我正在做一项利用HOG和LBP进行人物检测的研究。我想在图像上检测多个大小的人。我使用了一个循环的尺度来检测窗口的大小,然后它将通过滑动窗口检测来检测图像上的匹配特征。然而,我的代码显示由于矩阵的不同维度的错误。下面是我的代码:
win_size = [32, 32]; %the window size of detection
%loop on scale of window size
for s=0.8:0.2:1
X=win_size(1)*s;
Y=win_size(2)*s;
%loop on column of image
for y = 1:X/4:lastRightCol-Y
%loop on row of image
for x = 1:Y/4:lastRightRow-X
p1 = [x,y];
p2 = [x+(X-1), y+(Y-1)];
po = [p1; p2] ;
% CROPPED IMAGE
crop_px = [po(1,1) po(2,1)];
crop_py = [po(1,2) po(2,2)];
topLeftRow = ceil(min(crop_px));
topLeftCol = ceil(min(crop_py));
bottomRightRow = ceil(max(crop_px));
bottomRightCol = ceil(max(crop_py));
cropedImage = im(topLeftCol:bottomRightCol,topLeftRow:bottomRightRow,:);
%Get the feature vector from croped image
HOGfeatureVector{counter}= getHOG(double(cropedImage));
LBPfeatureVector{counter}= getLBP(cropedImage);
LBPfeatureVector{counter}= LBPfeatureVector{counter}';
boxPoint{counter} = [x,y,X,Y];
counter = counter+1;
x = x+2;
end
end
end
我注意到问题是在HOGfeatureVector{counter}
上,因为我使用不同的窗口大小,我从HOG获得的功能也具有不同的维度。例如,我的窗口大小的原始尺度为32x32
,那么从HOG中提取特征后,它将给我的维度为<6256x324>
。然后,如果我把尺度放在窗口大小上,例如:0.8:0.2:1
,它会给我不同的维度,因为尺度为0.8,它会给我<6256x144>
,尺度为32,<6256x324>
。我注意到,通过使用简单的连接来组合这两个不同的矩阵维度是不可能的。
谢谢
您需要保持检测窗口的大小相同,HOG被训练为在32X32中找到对象。如果你想在多尺度中找到目标,那么你需要重新缩放图像,但不需要重新缩放检测窗口。
改变这一行:
X=win_size(1)*s;
Y=win_size(2)*s;
:
X=win_size(1);
Y=win_size(2);
应该能行