我写了一个分类器,现在想用它来检测图像。 我的分类器已经有了我感兴趣的一些对象的HoG特征模型。 我有滑动窗口的东西,它将以不同的比例滑过图像,我可以获得每个窗口的HoG功能。 我的问题是 - 下一步是什么?
是否真的像将模型的HoG功能与窗口中的功能相匹配一样简单?我理解,对于整数图像,每个类都有一个阈值(例如face
或not face
),如果窗口生成的图像的计算值足够接近类的值并且没有'越过门槛,然后我们说我们有一场比赛。
但是它如何与HoG功能配合使用?
答案 0 :(得分:3)
是的,就这么简单。拥有HOG模型和窗口后,您需要将窗口功能应用于模型。然后选择最佳结果(使用阈值与否,具体取决于您的应用程序)。
Here您有一个执行相同步骤的示例代码。关键部分如下:
function detect(im,model,wSize)
%{
this function will take three parameters
1. im --> Test Image
2. model --> trained model
3. wStize --> Size of the window, i.e. [24,32]
and draw rectangle on best estimated window
%}
topLeftRow = 1;
topLeftCol = 1;
[bottomRightCol bottomRightRow d] = size(im);
fcount = 1;
% this for loop scan the entire image and extract features for each sliding window
for y = topLeftCol:bottomRightCol-wSize(2)
for x = topLeftRow:bottomRightRow-wSize(1)
p1 = [x,y];
p2 = [x+(wSize(1)-1), y+(wSize(2)-1)];
po = [p1; p2];
img = imcut(po,im);
featureVector{fcount} = HOG(double(img));
boxPoint{fcount} = [x,y];
fcount = fcount+1;
x = x+1;
end
end
lebel = ones(length(featureVector),1);
P = cell2mat(featureVector);
% each row of P' correspond to a window
[~, predictions] = svmclassify(P',lebel,model); % classifying each window
[a, indx]= max(predictions);
bBox = cell2mat(boxPoint(indx));
rectangle('Position',[bBox(1),bBox(2),24,32],'LineWidth',1, 'EdgeColor','r');
end
对于每个窗口,代码都会提取HOG描述符并将其存储在featureVector
中。然后使用svmclassify
代码检测对象所在的窗口。