我正在研究使用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,{{ 1}}。我注意到,通过使用简单的连接来组合这两个不同的矩阵维度是不可能的。
任何人都知道如何解决我的问题?至少,如何组合两个不同维度的矩阵?
谢谢
答案 0 :(得分:2)
您需要保持检测窗口的大小相同,HOG经过培训才能在32X32中找到对象。 如果要以多尺度查找对象,则需要重新缩放图像,而不是检测窗口。
更改此行:
X=win_size(1)*s;
Y=win_size(2)*s;
对此:
X=win_size(1);
Y=win_size(2);
它应该有用。