title: Image Histogram Comparison
body: <p>I was trying to do histogram image comparison between two RGB images which includes heads of the same persons and non-heads to see the correlation between them. The reason I am doing this is because after performing scanning using HOG to check whether the scanning window is a head or not, I am now trying to track the same head throughout consequent frames and also I want to remove some clear false positives.</p>
  
  <p>I currently tried both RGB and HSV histogram comparison and used Euclidean Distance to check the difference between the histograms. The following is the code I wrote:</p>
  
  <pre><code>%RGB histogram comparison
  
   %clear all;
  img1 = imread('testImages/samehead_1.png');
  img2 = imread('testImages/samehead_2.png');
  
  img1 = rgb2hsv(img1);
  img2 = rgb2hsv(img2);
  
  %% calculate number of bins = root(pixels);
  [rows, cols] = size(img1);
  no_of_pixels = rows * cols;
  %no_of_bins = floor(sqrt(no_of_pixels));
  no_of_bins = 256;
  
  %% obtain Histogram for each colour
  % -----1st Image---------
  rHist1 = imhist(img1(:,:,1), no_of_bins);
  gHist1 = imhist(img1(:,:,2), no_of_bins);
  bHist1 = imhist(img1(:,:,3), no_of_bins);
  
  hFig = figure;
  hold on;
  h(1) = stem(1:256, rHist1);
  h(2) = stem(1:256 + 1/3, gHist1);
  h(3) = stem(1:256 + 2/3, bHist1);
  
  set(h, 'marker', 'none')
  set(h(1), 'color', [1 0 0])
  set(h(2), 'color', [0 1 0])
  set(h(3), 'color', [0 0 1])
  
  hold off;
  
  % -----2nd Image---------
  rHist2 = imhist(img2(:,:,1), no_of_bins);
  gHist2 = imhist(img2(:,:,2), no_of_bins);
  bHist2 = imhist(img2(:,:,3), no_of_bins);
  
  hFig = figure;
  hold on;
  h(1) = stem(1:256, rHist2);
  h(2) = stem(1:256 + 1/3, gHist2);
  h(3) = stem(1:256 + 2/3, bHist2);
  
  set(h, 'marker', 'none')
  set(h(1), 'color', [1 0 0])
  set(h(2), 'color', [0 1 0])
  set(h(3), 'color', [0 0 1])
  
  %% concatenate values of a histogram in 3D matrix
  % -----1st Image---------
  M1(:,1) = rHist1;
  M1(:,2) = gHist1;
  M1(:,3) = bHist1;
  
  % -----2nd Image---------
  M2(:,1) = rHist2;
  M2(:,2) = gHist2;
  M2(:,3) = bHist2;
  
  %% normalise Histogram
  % -----1st Image---------
  M1 = M1./no_of_pixels;
  % -----2nd Image---------
  M2 = M2./no_of_pixels;
  
  %% Calculate Euclidean distance between the two histograms
  E_distance = sqrt(sum((M2-M1).^2));
  </code></pre>
  
  <p>The E_distance consists of an array containing 3 distances which refer to the red histogram difference, green and blue.</p>
  
  <p><strong>The Problem is:</strong></p>
  
  <ul>
  <li>When I compare the histogram of a non-head(eg. a bag) with that of a head..there is a clear difference in the error. So this is acceptable and can help me to remove the false positive.</li>
  <li>However! When I am trying to check whether the two images are heads of the same person, this technique did not help at all as the head of another person gave a less Euclidean distance than that of the same person.</li>
  </ul>
  
  <p>Can someone explain to me if I am doing this correctly, or maybe any guidance of what I should do?</p>
  
  <p>PS: I got the idea of the LAB histogram comparison from this paper (Affinity Measures section): <a href="http://groups.inf.ed.ac.uk/calvin/Publications/marinIJCV14.pdf" rel="nofollow">People Looking at each other</a></p>