【发布时间】:2015-05-01 04:06:14
【问题描述】:
我试图在包括同一个人的头部和非头部的两个 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
【问题讨论】:
-
直方图比较对于这类任务不是很有效。例如,同一个人在不同的照明条件下会比在与比较图像类似的照明条件下的潜在不同的人提供更大的距离。
-
我明白...那么对于边界框亲和性,您有什么建议? IE。您如何将检测到的单独窗口关联在一起?谢谢
-
好吧,既然您希望能够匹配人脸,我会建议更符合人脸识别的技术。提取该域中使用的描述符并进行比较。
-
正如我试图在问题中解释的那样......我已经使用 HOG + SVM 执行了检测部分。所以目前我处于后期处理阶段......即我正在尝试修剪误报,并尝试将不同帧中检测到的窗口与同一个人关联以进行跟踪。
-
我说的不是检测,而是识别。您可能可以从特征面开始,然后从那里开始。
标签: matlab image-processing computer-vision