简要理解HOG特征算子

    技术2022-07-10  102

    Histogram of Oriented Gradient 【H:直方图;O:方向;G:梯度】

    要素:

    (梯度)幅值(梯度)方向cellblock

    1.幅值计算

    (注意:计算对象是中间像素值)

    m a g n i t u d e ( g r a d i e n t ) = ( 120 − 70 ) 2 + ( 100 − 50 ) 2 = 70.7 magnitude(gradient)=\sqrt{(120-70)^2+(100-50)^2}=70.7 magnitude(gradient)=(12070)2+(10050)2 =70.7

    2.方向计算

    a n g l e ( g r a d i e n t ) = a r c t a n [ ( 120 − 70 ) / ( 100 − 50 ) ] = 4 5 。 angle(gradient)=arctan[(120-70)/(100-50)]=45^。 angle(gradient)=arctan[(12070)/(10050)]=45

    3.cell

      每个cell大小划分为 8 × 8 8\times8 8×8(可以是其他值)。将0-180度分成9等份,称为9个bins,分别是0,20,40…160。在HOG中,每个 8 × 8 8\times8 8×8的cell的梯度直方图本质是一个由9个数值组成的向量, 对应于0、20、40、60…160的梯度方向(角度)。   然后对每个bin中梯度的贡献进行统计:   统计方法是一种加权投票统计, 如上图所示,某像素的梯度幅值为13.6,方向为36,36度两侧的角度bin分别为20度和40度,那么就按一定加权比例分别在20度和40度对应的bin加上梯度值,加权公式为:

    20度对应的bin: ( ( 40 − 36 ) / 20 ) × 13.6 ((40-36)/20) \times13.6 ((4036)/20)×13.6,分母的20表示20等份,而不是20度;40度对应的bin: ( ( 36 − 20 ) / 20 ) × 13.6 ((36-20)/20) \times13.6 ((3620)/20)×13.6,分母的20表示20等份,而不是20度

      如果某个像素的梯度角度大于160度,也就是在160度到180度之间,那么把这个像素对应的梯度值按比例分给0度和160度对应的bin。如左下图绿色圆圈中的角度为165度,幅值为85,则按照同样的加权方式将85分别加到0度和160度对应的bin中。

    注意:计算时,分母仍为20

      对整个cell进行投票统计,正是在HOG特征描述子中创建直方图的方式,最终得到由9个数值组成的向量—梯度方向图:

    4.block(用以归一化)

    为什么要归一化

      图像的梯度对整体光照很敏感,意味着对于特定的图像,图像的某些部分与其他部分相比会非常明亮,通过对梯度进行归一化来减少这种光照影响。HOG特征将 8 × 8 8\times8 8×8的一个局部区域作为一个cell,再以 2 × 2 2\times2 2×2个cell作为一组,称为一个block,也就是说一个block表示 16 × 16 16\times16 16×16的区域。   由于每个cell有9个值,一个block( 2 × 2 2\times2 2×2个cell)则有36个值,HOG是通过滑动窗口的方式来得到block的,如下图所示:

    如何归一化

    归一化介绍   归一化的方法有很多:L1-norm、L2-norm、max/min等等,一般选择L2-norm。例如对于一个[3,4]的二维向量来说,模长是 3 2 + 4 2 = 5 \sqrt{3^2+4^2}=5 32+42 =5,这叫做向量的L2范数。将这个向量的每个元素除以5就得到了归一化向量 [0.6,0.8]。 归一化应用   采用同样的方法,一个cell有一个梯度方向直方图,包含9个数值,一个block有4个cell,那么一个block就有4个梯度方向直方图,将这4个直方图拼接成长度为36的向量,然后对这个向量进行归一化。而每一个block将按照上图滑动的方式进行重复计算,直到整个图像的block都计算完成。   例如,对于上图被划分 8 × 16 8 \times16 8×16个cell ,每个block有 2 × 2 2\times2 2×2个cell的话,那么cell的个数为: ( 16 − 1 ) × ( 8 − 1 ) = 105 (16-1)\times(8-1)=105 (161)×(81)=105。即有7个水平block和15个竖直block。每个block有36个值,整合所有block的特征值,最终获得由 36 × 105 = 3780 36\times105=3780 36×105=3780个特征值组成的特征描述符,而这个特征描述符是一个一维的向量,长度为3780。获得HOG特征向量,就可以用来可视化和分类了。对于多维的HOG特征,就可以使用SVM进行操作了。

    Processed: 0.012, SQL: 9