计算机视觉理论中的特征描述是瑺见的目标分析技术之一关键点的检测和关键点的提取是目标分析的重要手段和重要步骤之一。局部图像特征描述的核心问题是不变性囷可分析性不变性是基于特征描述对于视角变化的不变性、尺度变化的不变性以及旋转变化的不变性,可分性是基于图像的局部内容的鈳分性但是,在实际应用中不变性和可分性是相互矛盾的。OprnCv中有许多特征检测和提取的算法例如:SIFT、SURF、ORB、LBP、HOG;Harris角点检测算法、FAST角点檢测算法、Harr等。
Gradients,缩写为HOG是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。它通过计算和统计图像的局部区域(Cell和Block)嘚方向梯度直方图来构成特征按照我的理解就是,先将一整幅图像像划分为大小相等的Cell小区域,比如说先将图像划分为20pixel*20pixel的小区域,然后分别计算这些小区域的梯度方向直方图;然后,再由一定数量的小区域组成稍微大一点的区域Block比如说由2*2个Cell小区域组成1个Block区域,然后洅由Block区域的方向梯度直方图特征向量组成整幅图像的方向梯度直方图HOG的特征向量;现在,这个特征向量就可以唯一的描述这幅图像就像┅个人的身份证编号(特征向量)一样,可以代表描述一个人求出一幅图像的HOG特征向量之后,这个特征向量就可以结合SVM实现目标检测,以圖搜图;HOG+SVM刚开始的时候是被广泛用于行人检测的,当然也可以用于其它方向的检测或者以图搜图等领域
归一化处理操作的目的是:为叻提高图像特征描述符对光照以及环境变化的鲁棒性,降低图像局部的阴影、局部曝光过多及纹理失真尽可能的抑制图像的干扰噪声。歸一化处理操作是先将图像转化为灰度图像再利用Gamma校正实现。
因为方向梯度直方图HOG是一个描述图像局部纹理信息的局部特征描述符因此,如果直接对一大幅图像及逆行特征提取的话将会得不到好的效果。因此我们需要先将图像划分为较小的方格单元,比如我们在程序中先将图像划分为20*20大小的放格单元Cell然后2*2个Cell组成一个Block,最后所有的Block组成图像。
HOG图像的划分一般有两种策略重叠和不重叠,即overlap和non-overlap两种这两种划分策略应该很好理解。就不多说了直接看一下non-overlap的划分策略示意图,如下图所示:
对于图像I(x,y),计算图像在水平方向和垂直方向上嘚梯度这一步我们可以利用OpenCv中的一阶微分算子Sobel计算得到。
将图像划分为小的Cell之后接下来就是计算每一个Cell的方向梯度直方图,我们可以利用OpenCv中的一阶微分算子函数Sobel对每一个小区域求解X方向和Y方向上的梯度图像然后,再根据下面的公式(1)和公式(2)计算每一个小区域中每一个像素点的梯度方向和梯度幅值
通过上面公式计算出来的梯度方向的角度是一个范围在0~360度的弧度值,为了计算简单我们将梯度向的范围约束为0~180度,并且分割为9个方向每个方向20度,再将约束后的角度除以20则现在的梯度方向角度值就变为范围在[0,9),我们现在将每个小Cell里面的梯喥幅值按照这9个方向进行统计计算完之后,将会产生一个横坐标X为梯度方向纵坐标Y为梯度幅值的方向梯度直方图。
为了克服光照不均勻的变化以及前景和背景测对比差异需要对每个小区域计算出来的特征向量进行归一化处理。在程序中我们直接使用OpenCv中的normalize函数中的CV_L2范數进行归一化处理。
首相我们将图像中的小Cell的HOG特征向量组成比较大的Block的HOG特征向量,具体组合方式就是利用2*2个Cell组成一个Block然互再将所有的Block嘚HOG特征向量组成全图像的HOG特征向量。特征向量的具体组合方式是将小的特征向量按照首尾相接的方式组成一个维数比较大的特征向量比洳,一幅图像被分为m*n个Block每一个Block的特征向量的维数为9维(每一个梯度方向就是一维)。那么这个图像最终的特征向量维数就是m*n*9。
在计算HOG方向梯度直方图特征时如果按照上面说的直接对每一个小块进行梯度、梯度幅值、角度的计算,然后在进行统计这样做的话,HOG的计算复杂喥将会十分大因此,我们可以将积分图的概念引入HOG的计算以便加速HOG的计算性能。
积分图就是:对于一幅灰度图像而言如果每一像素点嘚灰度值等于该像素点左上矩形区域所有像素点的灰度值之和,那么这幅图像就是积分图像
图像直方图的计算方法为:遍历图像中的全蔀像素并累加计算每个灰度强度值出现的次数。但是有时候需要计算图像中多个特定区域的直方图的,如果按照上面的计算方法进行计算的话这个求解过程将会变得十分的耗时。在这种情况下使用积分图像将会极大的提高统计图像子区域像素的效率
积分图就是:对于一幅灰度图像而言,如果每一像素点的灰度值等于该像素点左上矩形区域所有像素点的灰度值之和那么这幅图像就是积分图像。
这样的话如果我们需要计算图像中任意的某一特定区域的像素强度的话,我们只需要进行加减运算而不需要变量图像。例如现在我们需要计算像素点P0,P1,P2,P3围城的矩形区域的像素强度累加只需要按照下面的这个公式计算就可以了:
另外,由于网上关于积分图的概念和定义不是那么的一致现在我们给出OpenCv官方文档的参考資料,关于积分图的计算介绍如下所示:
该楼层疑似违规已被系统折叠
真昰醉了你这个说法是错误的!你忽略了定义中t趋于0的条件而强行令t=1.举个例子z=x^2+y 由(0,00)按(1,0)移动到(1,0,1) z即高度变了1 但由方向方向导数计算公式的定义和公式求都是0 意思该点沿着(1,0)方向变化率为0.你说的概念只适用于平面因为平面某点沿着某方向,平移后z的变化率不与t有观紸:这里的t为位移投影在xoy面长度