一、梯度
不是一个实数,他是一个向量即有方向有大小。以一个二元函数来讲解,设一个二元函数f(x,y),在某个点的梯度为:
=
:称为向量微分算子或nabla算子
梯度的方向是函数变化最快的方向,沿着梯度的方向容易找到最大值。
二、图像梯度
模糊图像中的物体轮廓不冥想,轮廓边缘灰度变化不强烈,层次感不强,而清晰图片中的物体轮廓边缘灰度变化明显,层次感强。那么这种灰度变化明显不明显怎么去定义呢?可以使用导数(梯度),衡量图像灰度的变化率,因为图像就是函数。
由图像可以看出,相邻灰度值有变化,那么梯度就有值,如果相邻像素没有变化,那么梯度就是0,把梯度值和相应的像素相加,那么灰度值没有变化的,像素就没有变化,灰度值变了,像素值也就变了。因此梯度来增强图像的。
将图像两个方向结合起来就可以得到图像函数f(x,y)梯度表达式:
Gx、Gy表示x方向和y方向的梯度。
幅度:
方向角:
对于数字图像来说,相当于是二维离散函数求梯度,使用差分来近似导数:
Gx(x,y):x方向梯度,即H(x,y)对x求偏导。
Gy(x,y):y方向梯度
H(x,y):像素值
像素点(x,y)处的梯度值和梯度方向分别是:
这里又是平方,又是开方的,计算量比较大,于是一般用绝对值之和来近似平方和平方根的操作,来降低计算量。
梯度的方向是函数变化最快的方向,当函数中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像。
经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,有Sobel算子、Robinson算子、Laplace算子等。
三、应用
sobel算子,主要用作边缘检测,是离散差分算子,用来运算图像梯度函数的灰度近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或者法矢量。
书上的sobel模板不是卷积模板,而是协相关模板,卷积的话要先将模板旋转180度以后再与图像做相关操作。
Gx方向的相关模板:
Gy方向的相关模板:
Sobel的卷积模板Gx:
sobel卷积模板Gy:
具体计算为,每个像素(灰度值)与模板对应位置元素相乘求和(类似于CNN中的卷积,其实是协相关运算),来计算该点灰度的大小:
通常,为了提高效率使用不开平方的近似值:
然后可用以下公式计算梯度方向: