我试图在两个RGB图像之间进行直方图图像比较,这两个RGB图像包括相同人物和非头部的头部,以查看它们之间的相关性。我这样做的原因是因为在使用HOG执行扫描以检查扫描窗口是否是头部之后,我现在尝试在随后的帧中跟踪相同的头部,并且我还想删除一些明显的误报。
我目前尝试了RGB和HSV直方图比较,并使用欧几里德距离来检查直方图之间的差异。以下是我写的代码:
%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));
E_distance由一个包含3个距离的数组组成,这些距离指的是红色直方图差异,绿色和蓝色。
问题是:
有人可以向我解释我是否正确地做了这个,或者对我应该做什么有什么指导?
PS:我从本文(亲和力测量部分)得到了LAB直方图比较的想法:People Looking at each other
答案 0 :(得分:1)
颜色直方图相似性可以作为通过检测进行跟踪的良好线索,但不要依赖它来消除人与人和非人之间所有可能匹配的歧义。
根据您的代码,您可以做一件事来改进比较:目前,您正在使用每通道直方图。这没有足够的辨别力,因为你不知道RGB组件何时共同发生(例如,你知道红色通道在64-96范围内的次数以及蓝色在32-64范围内的次数,但是当这些发生时不会同时)。要纠正此问题,您必须使用3D直方图,计算颜色的共同现象。对于每个通道8个分区的离散化,您的直方图将具有8 ^ 3 = 512个分区。
其他改进建议: