HOG算子

了解了SIFT算子之后,来看看HOG算子吧~其实仔细看看,会发现HOG和SIFT特征感觉像是孪生兄弟呢~当然,即便如此,两者之间仍是有较为明显的差别,那就来看看吧~

HOG——Histogram Orientated Graphic(方向梯度直方图)

通过计算和统计图像局部区域的梯度方向直方图来构成特征(类似于SIFT中8个方向梯度直方图统计)。

在这儿参考了一篇写得比较详细的博客Hog描述子

先来说说Hog描述子形成的整体流程:

Hog pipline

对整幅图像用b*b大小的blocks窗口进行滑动,则整幅图像有s个blocks,其中s=((m-b)/stride+1)*((n-b)/stride+1);另外,对于两blocks重叠的cells单元,进行对比度归一化,能有效第去除光照的影响以提高精确度。每个blocks划分成c个cells,每个cells包含若干个像素点,针对每个cells,计算其中每个像素的梯度方向及幅值,并统计出该cell中的方向梯度直方图(按一定权重,此处权重的选择可根据L2,L1范式等确定),确定直方图所包含的bins的个数b,最后针对每个block进行特征归一化,以消除因光照,阴影和边缘变化等的影响,最后整张图可由一个s*c*b的高维向量组成,至此便完成了HoG描述子的生成。

需要注意的是:在形成描述子的过程中有几个超参数需要注意,首先是整张图片划分成多少个blocks,每个blocks划分成多少个cells比较合适,另外对cells进行直方图统计时,选取多少个bins较为适宜,这些均是根据不同需求所需进行设计的参数选择。若blocks取得太大,则归一化的效果被削弱使得错误率提升,若取得太小,则相邻blocks间有用的信息可能被过滤掉了。

HoG描述子最初的应用是用于行人检测,根据研究者大量的实验得出在针对行人检测时,选择的blocks大小为3*3个单元格,cells数为6*6,bins数为将0~180度角度无方向划分成9个bins。并且因为针对行人检测,需要有较明显的边缘信息,故在预处理时没有对其进行高斯平滑,但是在处理时,因为需要计算梯度信息,对于噪点的处理经常需要考虑到进行平滑操作,故需针对具体问题进行具体分析。


在这儿想进行说明的是HoG描述子与SIFT描述子之间的区别:

可以看到,HoG与SIFT均进行了梯度方向直方图的统计操作,但不同的是,其针对的进行统计的对象不同,HoG进行统计归一化是局部区域的block,而SIFT在进行统计之前需要确定特征点,再取特征点周围一定范围进行直方图统计。

由产生过程可知,HoG不具有尺度和旋转不变性。


效果展示:

*R-HOG指的是block选用的是矩形,C-HOG指block选用的是圆形。

HoG+SVM进行行人检测是比较成熟的方法,另外opencv中也有相应的实现函数接口。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。