我想知道,对于像“汽车”这样的对象的 HOG 描述符是否有任何实现,而不是 MATLAB 中的 Human?
但万一,只有人类,你能引导我到那个代码,并给我这样的提示,以改进用于“汽车或摩托车等物体”的代码
我想知道,对于像“汽车”这样的对象的 HOG 描述符是否有任何实现,而不是 MATLAB 中的 Human?
但万一,只有人类,你能引导我到那个代码,并给我这样的提示,以改进用于“汽车或摩托车等物体”的代码
现在在计算机视觉系统工具箱中有一个函数extractHOGFeatures 。
HOG 是一种特征描述符,它可以应用于您想要的任何对象。除了块大小、单元大小、块步长等参数外,实现不会有任何变化。要获得汽车的描述符,您需要提供它们的正样本和负样本。Opencv 提供了用户训练分类器的功能。如果 matlab 提供了训练分类器的代码,它应该是相同的。
那么你可以使用VLFeat Toolbox,它对 HOG 的实现非常有效,你可以找到任何对象的 hOG 特征,也可以可视化。如果“im.jpg”如果你的输入图像,你可以使用
hog = vl_hog("im.jpg",8,'verbose')
这里 8 是你的窗口大小来获得 HOG 特征,你可以相应地调整。
用于显示功能
imhog = vl_hog('render',hog,'verbose')
这是一个完全实现 Dalal 算法的优秀 Matlab 代码。我已经在许多主要的学术项目中测试并使用了这段代码。
http://hi.baidu.com/fpmaldfoamdfmze/item/4f3b3ac881affcb00c0a7b11 所有功劳归发布者所有!
HOG 并非特定于行人检测。您可以将它与任何刚性(或近似刚性)对象一起使用。
要使用此代码,您需要了解如何在一个区域上计算 HOG。该区域被划分为重叠的“块”。块由许多“单元”组成。在每个块中计算空间方向直方图。最终的向量是通过连接这些空间直方图形成的。您可以调整的参数是
cellpw, cellph:分别是单元格的像素宽度和高度。
nblockw, nblockh : 块大小分别由 x 和 y 方向的单元格数计算。
nthet:角度箱的数量。
issigned : 是否采用有符号或无符号梯度
重叠:指定为分数的块之间的重叠量
isglobalinterpolate : 3d 直方图的全局或局部插值
normmethod : 使用的规范类型
您可以尝试使用默认参数 -
单元格 = 8; 细胞 = 8; nblockw = 2; nblockh = 2; nthet = 9; 重叠 = 0.5; isglobalinterpolate = 'localinterpolate'; 已签名 = '未签名'; 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。祝你好运!