但是如果只有针对人类的实现,您可以引导我到该代码,并给我一些提示,以便改进代码以用于“汽车或摩托车”等物体。
hog = vl_hog("im.jpg",8,'verbose')
这里的8是窗口大小,您可以根据需要进行调整。imhog = vl_hog('render',hog,'verbose')
这里有一个非常优秀的Matlab代码,完全实现了Dalal算法。我已经在许多重要的学术项目中测试和使用了这个代码。
http://hi.baidu.com/fpmaldfoamdfmze/item/4f3b3ac881affcb00c0a7b11 所有的功劳归于发布此代码的人!
HOG不仅适用于行人检测,还可以用于任何刚性(或近似刚性)物体。
要使用这个代码,你需要理解如何在一个区域内计算HOG。该区域被分成重叠的“块”。块由若干个“单元”组成。每个块中都计算了一个空间方向直方图。最终向量是通过连接这些空间直方图形成的。 你可以调整的参数有:
cellpw, cellph:单元格的像素宽度和高度。
nblockw, nblockh:x和y方向上以单元格数量计算的块大小。
nthet:角度箱数。
issigned: 是否采用有符号或无符号梯度
overlap: 块之间的重叠量,以分数表示
isglobalinterpolate: 三维直方图的全局或局部插值方式
normmethod: 使用的规范化类型
您可以首先尝试使用默认参数 -
cellpw = 8; cellph = 8; nblockw = 2; nblockh = 2; nthet = 9; overlap = 0.5; isglobalinterpolate = 'localinterpolate'; issigned = 'unsigned'; normmethod = 'l2hys';
在Matlab中获取特征的方法类似于:
I = imread('car.png');
Ig = rgb2gray(I);
F = hogcalculator(Ig, 8, 8, 2, 2, 9, 0.5,'localinterpolate', 'unsigned', 'l2hys');
F的维度/长度取决于您选择的参数。
回答您的评论, 是的,您必须为正面(汽车)和负面(非汽车)图像构建这些特征以构建检测系统。 SVM通常用作分类器。我建议使用libsvm库 -
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
一旦您建立了训练集,请使用该训练集进行训练。调整SVM参数以获得最高的准确性。 示例中给出的参数可能不是最佳的,您可以尝试不同的设置。我建议首先尝试更改nthet、cellpw和cellph。 祝你好运!