基于Sobel算子图像边缘检测的MATLAB实现

龙源期刊网 http://www.qikan.com.cn

基于Sobel算子图像边缘检测的MATLAB实现

作者:吴术路

来源:《电脑知识与技术》2010年第19期

摘要:边缘检测在数字图像处理中有着重要的应用。边缘是图像的最基本特征。该文利用Sobel算子对图像进行水平和垂直的边缘提取,并对图像进行MATLAB仿真比较,仿真实验表明,该方法对图像边缘的检测精度较高,抗噪声能力强,提高了图像边缘检测效果。 关键词:边缘检测;Sobel算子;MATLAB

中图分类号:TP391文献标识码:A文章编号:1009-3044(2010)19-5314-02 Based on Sobel Edge Detection Operator of MATLAB Implementation WU Shu-lu

(Qinghai & TV University, Xi'ning 810008, China)

Abstract: Edge detection in the digital image processing has important applications. Edge is the most basic features of the image. In this paper, Sobel operator to the image horizontal and vertical edge detection, and image comparison MATLAB simulation, simulation experiments show that the method has high precision in image detection, anti-noise ability and improving the image edge detection.

Key words: edge detection; sobel operator; MATLAB

边缘检测技术对于数字图像非常重要,边缘是所要提取目标和背景的边界线,提取出边缘才能将目标和背景区分开。图像的边缘是指图像局部区域亮度变化显著的部分。该区域的灰度剖面一般可以看做一个阶跃,图像的边缘部分集中了图像的大部分信息,图像边缘的确定与提取对于整个图像场景的识别与理解是非常重要的,同时也是图像分割所依赖的重要特征。最简单的边缘检测方法是边缘检测算子。Sobel算子利用像素点上下左右四个方向像素的权重算法,根据在边缘点处达到极值这一现象进行边缘的检测。其中Sobel算子对噪声具有平滑作用,提供较为精确的边缘方向信息,是一种较为常用的边缘检测方法。针对经典Sobel算子对边缘具有很强的方向性特点,本文利用Sobel算子对图像进行水平和垂直的边缘提取,最后对图像进行MATLAB仿真比较,从仿真的结果可以看出,此算法具有较好的检测精度。 1 目前主要的几种经典的边缘检测算子比较

龙源期刊网 http://www.qikan.com.cn

边缘检测算子对图像中灰度的变化进行检测,通过求一阶导数极值点或二阶导数过零点来检测边缘。在数字图像中实现图像与模块卷积运算时,运算速度与选取的模块大小有直接关系,模块越大,检测效果越明显,速度越慢,反之则效果差一点,但速度提高很多。其次,抑制噪声和边缘精确定位是无法同时满足的,就各种算法而言,有的边缘定位能力比较强,有的抗噪声能力比较强。

1) Roberts 算子是一种斜向偏差分的梯度计算方法,提取边缘的结果边缘较粗,边缘定位不是很准确,容易丢失一部分边缘,同时没有经过图像平滑计算,因此不能抑制噪声。

2) Sobel算子和Prewitt算子提取边缘的结果差不多。两者对噪声都具有平滑作用。虽然产生了较好的边缘效果,但也检测出了一些伪边缘,使得边缘比较粗,降低了检测定位精度。 3) Laplacian of Gaussian(LoG)是两种算子的结合,算子提取边缘的结果比较完整,位置比较准确,但含有很多噪声点。

4) Canny算子是一类最优边缘检测算子,提取的边缘最为完整,而且边缘的连续性很好,定位比较精确。但在实际应用中编程较为复杂且运算较慢。 2 Sobel算子

如果用Sobel算子检测图像的边缘的话,可以先分别用水平算子和垂直算子对图像进行卷积,得到的是两个矩阵。

Sobel梯度算子是先做成加权平均,再微分,然后求梯度,计算公式表示为: fx'(x,y)=f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)-f(x-1,y-1)-2f(x,y-1)-f(x+1,y-1) fy'(x,y)=f(x-1,y+1)+2f(x-1,y)+f(x-1,y+1)-f(x+1,y-1)-2f(x+1,y)-f(x+1,y+1) 二维图像的灰度值函数f(x,y),其梯度表示为: G[f(x,y)]=|fx'(x,y)+ fy'(x,y)| 3.MATLAB程序实现及其仿真结果 3.1 MATLAB部分程序: f=imread('peppers.png'); f=rgb2gray(f); f=im2double(f);

龙源期刊网 http://www.qikan.com.cn

% 使用垂直Sobel算子,自动选择阈值

[VSFAT Threshold]=edge(f,'sobel','vertical'); % 边缘探测 figure, imshow(f),title('原始图像'),% 显示原始图像 figure,imshow(VSFAT),title('垂直图像边缘检测'); % 显示边缘探测图像

%使用水平和垂直Sobel算子,自动选择阈值 SFST=edge(f,'sobel',Threshold);

figure,imshow(SFST),title('水平和垂直图像边缘检测'); % 显示边缘探测图像

%使用指定45度角Sobel算子滤波器,指定阈值 s45=[-2 -1 0;-1 0 1;0 1 2]; SFST45=imfilter(f,s45,'replicate'); SFST45=SFST45>=Threshold;

figure,imshow(SFST45),title('45度角图像边缘检测'); % 显示边缘探测图像 3.2 仿真结果图 图1为仿真结果图。 3.3 实验结果分析

在本实验中使用Sobel算子在3个方向进行了图像边缘检测,从程序运行结果可以看出,45度角Sobel算子生成的边缘检测图像呈现出浮雕效果,水平和垂直Sobel算子检测出的边缘多于单个方向上检测出的边缘。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4