欢迎访问文稿网!

常见边缘检测算子

范文之家 分享 时间: 加入收藏 我要投稿 点赞

常见边缘检测算子

    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

221381
领取福利

微信扫码领取福利

微信扫码分享