我看的视频地址:https://www.bilibili.com/video/BV1dz411B7Rd?from=search&seid=15644842294857067045&spm_id_from=333.337.0.0
方向梯度直方图特征,HOG: 首先讲一些基础知识,关于图像的梯度的。 对于函数f(x,y),它的梯度向量是(fx,fy); 如果一张图像用函数f(x,y)表示的话,图像梯度就很容易计算。对于每个像素点,计算图像的水平梯度值x和垂直梯度值y。 其中,方向梯度值为
梯度角为
梯度值范围是0-255,很大的负方向变化像素表现为黑色,很大的正方向变换像素则表现为白色。
这里举一个例子,有一张黑色的图,中间有一个白色的圆形,中间是X方向的梯度图,右边是Y方向的梯度图。
要得到X方向的梯度图,首先要做的就是让我们的扫描线从左边走到右边,首先我们会看到很多像素值为0的黑色,然后就会看到像素值为255的白色,有一个巨大的梯度差。从0到255(从小到大)这表示一个正梯度,在图中呈现为白色。然后继续扫描,像素就从255到0即白色转换到了黑色,这表示为一个负梯度,在这个方向上像素值下降了,在图中呈现黑色。
同理,要得到Y方向的梯度图,像素先从0到255表示正梯度,在梯度图中呈现白色,然后从255到0,呈现黑色。
接下来我们来看一个例子,让我们假设它们可以在特点的像素范围内缩放,来看一小部分的像素值,可以把这小部分看作一个cell。
X方向的梯度值是120-70=50,Y方向是100-50=10.把他们俩放在一起就得到了特征向量[50 50],用以下方法计算总体的梯度值或梯度大小和梯度角: 现在我们就得到了向量的大小和方向,这个就是梯度直方图,定向梯度。 怎么理解定向梯度呢,这两个值就可以表示两个像素之间的关系,它们像素差值是多少,哪一边更高哪一边更低,我就可以用这两个值把原来的位置复原了。
接下来再举一个例子, 这是一辆汽车,右上是X方向的梯度图,右下是Y方向的梯度图。
第一步,定义一个8×8像素的cell单元,用来计算梯度值/角,于是我们就能得到每个像素的梯度值/角,表示图中那条红色的线条的长度和角度或者说方向。 接下来我们有计算得出的方向梯度值画一个直方图,画出梯度方向大小的所有梯度值。 现在我们就把图像的所有信息放在一起了。 如图,红色线条表示一个像素的不同梯度值。
这个就是我们想要得到的hog feature,用它去训练一个SVM,现在就能识别这辆汽车了。
将上面提到的cell平移一次,我们还会得到另一个hog feature,然后再平移一次,获得另外一个hog feature,这些被称为cell的维度,是非常重要的。
现在来总结一下: 1.hog feature是一种特征描述符,用来对对象做检测; 2.hog feature的特征非常强大,因为它可以和支持向量机svm分类器结合; 3.hog使用一个滑窗探测器,在图像上滑动,并且hog描述了每个位置的描述符; 4.通过改变图像尺度来处理缩放问题,可以缩小到上下,所以不用担心图像中不同的缩放比例很明显,它不依赖于颜色,没有依赖性,非常地紧凑;
|