边缘检测一般采用梯度微分的方法,具体来说是将图像中的一个像素设为中点,通过计算其与相邻的元素之间灰度变化的微分值来确定边缘。微分值越大说明灰度值变化越明显,再通过设置合适的阈值来判断这个像素是否为边缘像素,从而完成边缘检测。论文网
2。2。1 梯度
我们可以把图像看成一个二维的离散函数,则梯度是对这个二维的离散函数进行求导运算的结果。对于一个图像f(x,y),其在点(x,y)处的梯度公式为:
式中、分别为f(x,y)在(x,y)处关于x和y的偏导数。
对于计算机中的实际操作我们一般用绝对值差分法,公式如下所示:
G[f(x,y)]=|f(x,y)-f(x+1,y)|+|f(x,y)-f(x,y+1)| (2-2)
另外上式也可以用两个算子之和来表示:
G[f(x,y)]=|Gx|+|Gy| (2-3)
其中Gx、Gy的模版如下所示:
Gx= Gy= (2-4)
2。2。2 常用的边缘检测算子
采用不同的模版我们可以计算出不同的梯度值,平时人们常用的算子有一阶导数算子:Roberts算子、Sobel算子、Prewitt算子和二阶导数算子:Laplacian算子等等。
1。Roberts算子是一种最简单的算子,它通过使用局部差分算子来检测边缘的算子,将对角线方向上的两个相邻元素只差作为梯度来检测边缘[9]。其结构较为简单,所采用的是一个22的的矩阵模版。Roberts算子的定位精度较高,且检测水平较高,但其对噪声较为敏感,没有办法抑制噪声所带来的影响。
Gx、Gy的卷积算子为:
Gx= Gy= (2-5)
2。Sobel算子是一种离散型的差分算子,其中含有类似于局部平均的平均值运算,因此其有良好的消除噪声效果,对噪声有着平滑作用。
Gx、Gy的卷积算子为:
Gx= Gy= (2-6)
3。 Prewitt算子是一阶导数算子,通过对某个像素点的垂直方向以及水平方向的灰度差值进行卷积运算,从而检测边缘。这种方法也可以有效的去除噪声。
Gx、Gy的卷积算子为:
Gx= Gy= (2-7)
4。 Laplacian算子是一种二阶倒数算子,对于一阶导数算子来说,所求出的倒数值只要大于所选取的阈值即作为边缘点,从而有可能使得边缘点过多使得边缘检测的效果不好。对于Laplacian算子来说,一阶导数的最大值对应的是二阶导数的零点,则一阶导数的最大值即作为边缘点[10]。Laplacian算子对孤立的像素点的反应要比对边缘像素思安的反应更为强烈,所以Laplacian算子仅仅适用于没有噪声的图像。对于图像f(x,y),在点(x,y)处的拉普拉斯算子的运算方式是:
(2-8)
Gx、Gy的卷积算子为:
(2-9)
本文所采用的是roberts算子,边缘检测结果如图2。3所示。
对应Matlab程序:
I2=edge(I1,'roberts'); %自动选择阈值用roberts算子进行边缘检测
figure(2),
subplot(1,1,1),imshow(I2),title('边缘检测后图像');
图2。3 边缘检测
2。3 形态学处理
形态学处理指的是在图像中改变或者移动一个元素,并且将其与二值图像进行并、交等等集合运算。其中最基本的形态学运算是腐蚀、膨胀、开运算和闭运算,在这些基础运算的基础上,可以随意组合这些运算形成功能各不相同的运算[11]。形态学处理结果如图2。4所示。
我们设A为目标元素,B为结构元素,则基本运算的算法如下所示:
2。3。1 膨胀