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