I am wondering that two hog features can compare or not.
There was a article about this question on this page ->
http://stackoverflow.com/questions/11626140/extracting-hog-features-using-opencv
This article introduces that to compare the descriptor values of HOG.
I don't know this comparison is surely exact or not.
I think this comparison need more experiment.
similarity test in video
#include < opencv2\opencv.hpp>
#include < stdio.h>
#ifdef _DEBUG
#pragma comment(lib, "opencv_core249d.lib")
#pragma comment(lib, "opencv_imgproc249d.lib") //MAT processing
#pragma comment(lib, "opencv_highgui249d.lib")
#pragma comment(lib, "opencv_objdetect249d.lib")
#else
#pragma comment(lib, "opencv_core249.lib")
#pragma comment(lib, "opencv_imgproc249.lib")
#pragma comment(lib, "opencv_highgui249.lib")
#pragma comment(lib, "opencv_objdetect249.lib")
#endif
#define M_PI 3.1415
using namespace std;
using namespace cv;
Mat get_hogdescriptor_visual_image(Mat& origImg,
vector< float>& descriptorValues,
Size winSize,
Size cellSize,
int scaleFactor,
double viz_factor);
int main()
{
//image load
Mat img1 = imread("./b1.jpg");
Mat img2 = imread("./c5.jpg");
//rgb 2 gray
Mat img1_gray;
cvtColor(img1, img1_gray, CV_RGB2GRAY);
Mat img2_gray;
cvtColor(img2, img2_gray, CV_RGB2GRAY);
//resize smaller
Mat r_img1_gray;
resize(img1_gray, r_img1_gray, Size(64, 8));
Mat r_img2_gray;
resize(img2_gray, r_img2_gray, Size(64, 8));
//extractino hog feature
HOGDescriptor d1( Size(64,8), Size(8,8), Size(4,4), Size(4,4), 9);
HOGDescriptor d2( Size(64,8), Size(8,8), Size(4,4), Size(4,4), 9);
// Size(32,16), //winSize
// Size(8,8), //blocksize
// Size(4,4), //blockStride,
// Size(4,4), //cellSize,
// 9, //nbins,
//hog feature compute
vector< float> descriptorsValues1;
vector< Point> locations1;
d1.compute( r_img1_gray, descriptorsValues1, Size(0,0), Size(0,0), locations1);
vector< float> descriptorsValues2;
vector< Point> locations2;
d2.compute( r_img2_gray, descriptorsValues2, Size(0,0), Size(0,0), locations2);
//hog feature size
//cout << descriptorsValues1.size() << endl;
///////////////////////
//copy vector to mat
//create Mat
Mat A(descriptorsValues1.size(),1,CV_32FC1);
//copy vector to mat
memcpy(A.data,descriptorsValues1.data(),descriptorsValues1.size()*sizeof(float));
//create Mat
Mat B(descriptorsValues2.size(),1,CV_32FC1);
//copy vector to mat
memcpy(B.data,descriptorsValues2.data(),descriptorsValues2.size()*sizeof(float));
/////////////////////////
//sum( sqrt( (A.-B)^2 ) )
Mat C = A-B;
C = C.mul(C);
cv::sqrt(C, C);
cv::Scalar rr = cv::sum(C);
float rrr = rr(0);
cout << "Distance: " << rrr << endl;
//hog visualization
Mat r1 = get_hogdescriptor_visual_image(r_img1_gray, descriptorsValues1, Size(64,8), Size(4,4), 10, 3);
Mat r2 = get_hogdescriptor_visual_image(r_img2_gray, descriptorsValues2, Size(64,8), Size(4,4), 10, 3);
imshow("hog visualization1", r1);
imshow("hog visualization2", r2);
waitKey(0);
return 0;
}
refer to this page http://feelmare.blogspot.kr/2015/02/opencv-hog-descriptor-computation-and.html about the function "get_hogdescriptor_visual_image" in example source code.