方向图计算-squaring gradient vector

完成squaring gradient vector的步骤如下:

  1.  计算x/y方向梯度;
  2.  基于图像局部邻域内的x/y方向梯度计算当前像素点方向;

注:本文采用图像坐标系,顺时针表示角度变化的正方向;方向范围为[0, 180);

下面进入重点:

本方法依据:根据图像局部邻域内的x/y梯度拟合出当前像素点方向。由于纹理线条的两边梯度幅值相同,而方向相反,因此本文通过拟合二倍方向角的方法计算像素点方向。

根据卷积核计算图像每一点x方向梯度vx与y方向梯度vy,其中

                                                vx 卷积核\begin{bmatrix} -1& 0& 1\\ -2& 0& 2\\ -1& 0& 1 \end{bmatrix},      vy卷积核\begin{bmatrix} -1 & -2& -1\\ 0& 0& 0\\ 1& 2& 1 \end{bmatrix}

假设图像像素点方向角为\alpha,那么有

                                                         tan\left ( 2 \alpha \right )=\frac{2tan\left ( \alpha \right )\ }{\ 1 - tan\left ( \alpha \right )^2}                                                           \left ( 1 \right )

                                                         tan\left ( \alpha \right )=vy/vx                                                                         \left ( 2 \right )

由(1)、(2)可得

                                                          tan\left ( 2 \alpha \right )=\frac{2vx*vy\ }{\ vx^2 - vy^2}                                                              \left ( 3 \right )

设定拟合半径r,则同步遍历r邻域内所有的vx、vy,有

                                                          \alpha =0.5*arctan\left ( \frac{\sum vx*vy}{\sum \left ( vx^2 - vy^2 \right )} \right )                                         \left ( 4 \right )

其中, \alpha \in \left [ -pi/2, pi/2 \right ],且该方向垂直于纹线方向。

算法:

  • 计算vx/vy梯度图,并生成图像src1=\sum 2vx*vy, src2=\sum \left ( vx^2-vy^2 \right );
  • 分别对src1/src2执行半径为r的boxfilter滤波,获取图像img1/img2;
  • 执行公式(4)完成方向图计算。

猜你喜欢

转载自blog.csdn.net/Robin_Cruise/article/details/88568207