数字图像梯度(the gradient of the image)
方向导数
有限差分
梯度
图像梯度
图像梯度的定义
图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:
由此可见,梯度指出了在(x,y)处f的最大变化率的方向。
这个矢量的幅度为
图像处理中一阶微分是用梯度幅值来实现的。
方向角
对于数字图像而言,图像可看成二维离散函数,图像梯度其实就是这个二维离散函数的求导,如下:
分别对X,Y两个方向上求出它们的偏微分,最终得到梯度Delta F。
G(x,y) = dx(i,j) + dy(i,j);
dx(i,j) = I(i+1,j) - I(i,j);
dy(i,j) = I(i,j+1) - I(i,j);
图像梯度一般也可以用中值差分:
dx(i,j) = [I(i+1,j) - I(i-1,j)]/2;
dy(i,j) = [I(i,j+1) - I(i,j-1)]/2;
图像边缘一般都是对图像进行梯度运算来实现的。梯度的正负反映其边缘的走势,相当于方向。由于图像在计算机中以数字图像的形式进行存储,即图像是离散的数字信号,对数字图像的梯度使用差分来代替连续信号中的微分。
数字图像中,更多的使用差分来近似导数,最简单的梯度近似表达式如下:
梯度的方向是函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像。
对于离散的图像来说,一阶微分的数学表达相当于两个相邻像素的差值,根据选择的梯度算子不同,效果可能有所不同,但是基本原理不会变化。最常见的算子为Roberts算子,其它常见还有Sobel,Prewitt等算子。
Roberts算子
计算Roberts为例的X,Y的梯度演示如下图:
图像微分(梯度计算)是图像边缘提取的重要的中间步骤,根据X,Y方向的梯度向量值,可以得到如下两个重要参数振幅magnitude, 角度theta,计算公式如下:
Theta = tan-1(yGradient/xGradient)
magnitude表示边缘强度信息,theta预言边缘的方向走势。假如对一幅数字图像,求出magnitude之后与原来每个像素点对应值相加,则图像边缘将被大大加强,轮廓更加明显,是一个很典型的sharp filter的效果。
Sobel算子
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:
具体计算如下:
图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:
通常,为了提高效率使用不开平方的近似值:
然后可用以下公式计算梯度方向:
若图像为:
则使用近似公式的计算的结果为:
这样的形式很好理解,假如中间为边缘,那么边缘两侧的亮度差距就会变大,乘以符号相反的系数,会使得最终的结果达到很大的值,在图像上来看就是白色;而不是边缘的区域,左右两边或者上下两边就会抵消,在图像上看就是黑色。
物理意义为:梯度的方向是函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像。求导操作不仅能够捕获轮廓,人影和一些纹理信息,还能进一步弱化光照的影响。
Scharr
算子
举例
我们先考虑下x方向,选取某个像素,假设其像素值是100,沿x方向的相邻像素分别是90,90,90,则根据上面的计算其x方向梯度分别是10,0,0。这里只取变化率的绝对值,表明变化的大小即可。
我们看到,100和90之间亮度相差10,并不是很明显,与一大群90的连续灰度值在一起,轮廓必然是模糊的。我们注意到,如果相邻像素灰度值有变化,那么梯度就有值,如果相邻像素灰度值没有变化,那么梯度就为0。如果我们把梯度值与对应的像素相加,那么灰度值没有变化的,像素值不变,而有梯度值的,灰度值变大了。
我们看到,相加后的新图像,原图像像素点100与90亮度只相差10,现在是110与90,亮度相差20了,对比度显然增强了,尤其是图像中物体的轮廓和边缘,与背景大大加强了区别,这就是用梯度来增强图像的原理。