首页 百科知识 常见边缘检测算子

常见边缘检测算子

时间:2022-10-09 百科知识 版权反馈
【摘要】:常见的边缘检测算子有利用一阶微分Roberts交叉算子、Prewitt算子、Sobel算子,二阶微分Laplacian算子、LoG算子。Sobel算子是边缘检测器中最常用的算子之一,Sobel算子和Prewitt算子都是加权平均,但是Sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。MATLAB图像处理工具箱中提供了边界分割函数edge(),对灰度图像图5-12进行零交叉算子边缘检测,得到图5-13的边缘提取结果。

5.3.2 常见边缘检测算子

常见的边缘检测算子有利用一阶微分Roberts交叉算子、Prewitt算子、Sobel算子,二阶微分Laplacian算子、LoG算子。

(1)Roberts交叉算子。1963年,Roberts提出了边缘检测算子。Roberts交叉算子为梯度幅值计算提供了一种简单的近似方法,边缘定位准,但是对噪声敏感,适用于边缘明显且噪声较少的图像分割。MATLAB图像处理工具箱中提供了边界分割函数edge(),对灰度图像图5-4进行Roberts交叉算子边缘检测,得到图5-5的边缘提取结果。程序代码如下:

f=imread('woman.jpg');

imshow(f);

g=edge(f,'roberts');

figure,imshow(g)。

img107

图5-4

img108

图5-5

(2)Prewitt算子。Prewitt于1970年左右提出了Prewitt算子。对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以,Prewitt算子对边缘的定位不如Roberts算子。MATLAB图像处理工具箱中提供了边界分割函数edge(),对灰度图像图5-6进行Prewitt算子边缘检测,得到图5-7的边缘提取结果。程序代码如下:

f=imread('woman1.jpg');

imshow(f);

g=edge(f,'prewitt');

figure,imshow(g)。

img109

图5-6

img110

图5-7

(3)Sobel算子。Sobel算子是边缘检测器中最常用的算子之一,Sobel算子和Prewitt算子都是加权平均,但是Sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。MATLAB图像处理工具箱中提供了边界分割函数edge(),对灰度图像图5-8进行Sobel算子边缘检测,得到图5-9的边缘提取结果。程序代码如下:

f=imread('camera.jpg');

imshow(f);

g=edge(f,'sobel');

figure,imshow(g)。

img111

图5-8

img112

图5-9

(4)二阶微分Laplacian算子。拉普拉斯(Laplacian)算子是一种二阶微分算子,可分为四邻域、八邻域。Laplacian算子是一种各向同性算子,在只关心边缘的位置而不考虑其周围的像素灰度差值时比较合适。Laplacian算子对孤立像素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声像素,而且对于双边锋带不易检测出图像边缘的方向。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。基于这些原因,很少使用Laplacian算子,如果对图像先作平滑操作可以有效降低噪声的影响,LoG算子就是基于这一思想的。

(5)LoG算子。就是拉普拉斯高斯(Laplacian of a Gaussian,LoG)算子,这是二阶微分算子,是一个线性的、移不变的算子,它的传递函数在频域空间的圆点是零,因此经拉普拉斯滤波过的图像具有零平均灰度。其具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。但是,其对噪声比较敏感,图像一般先经过平滑处理。因为平滑处理也是用模板进行的,通常的分割算法都是把LoG算子和平滑算子结合起来生成一个新的模板,最后用零灰度值进行二值化产生闭合的、连通的轮廓,消除所有内部点。MATLAB图像处理工具箱中提供了边界分割函数edge(),对灰度图像图5-10进行LoG算子边缘检测,得到图5-11的边缘提取结果。程序代码如下:

f=imread('coins.jpg');

imshow(f);

g=edge(f,'log');

figure,imshow(g)。

img113

图5-10

img114

图5-11

(6)零交叉算子。零交叉算子先用指定的滤波器对图像进行滤波,然后寻找零交叉点作为边缘。MATLAB图像处理工具箱中提供了边界分割函数edge(),对灰度图像图5-12进行零交叉算子边缘检测,得到图5-13的边缘提取结果。程序代码如下:

f=imread('moon.jpg');

imshow(f);

g=edge(f,'zerocross');

figure,imshow(g)。

img115

图5-12

img116

图5-13

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈