您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 基于MATLAB边缘检测与提取的几种方法的比较
基于MATLAB边缘检测与提取的几种方法的比较数字图像边缘检测(DigitalImageProcessing)又称为计算机图像边缘检测,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。由于图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。在通常情况下,我们可以将信号中的奇异点和突变点认为是图像中的边缘点,其附近灰度的变化情况可从它相邻像素灰度分布的梯度来反映。根据这一特点,提出了多种边缘检测算子:如Robert算子、Sobel算子、Prewitt算子、Laplacian算子,Canny算子等。这些方法多是以待处理像素为中心的邻域作为进行灰度分析的基础,实现对图像边缘的提取并已经取得了较好的处理效果。经典的边界提取技术大都基于微分运算。首先通过平滑来滤除图像中的噪声,然后进行一阶微分或二阶微分运算,求得梯度最大值或二阶导数的过零点,最后选取适当的阈值来提取边界。本文主要介绍几种经典的边缘提取算法,选取两种用MATLAB语言编程实现,对提取结果进行比较和分析。图像边缘检测的基本步骤:(1)滤波。边缘检测主要基于导数计算,但受噪声影响。但滤波器在降低噪声的同时也导致边缘强度的损失。(2)增强。增强算法将邻域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。(3)检测。但在有些图像中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值判定。(4)定位。精确确定边缘的位置。几种边缘算子的比较以柚子的图片为例1、Roberts算子是一种利用局部差分算子寻找边缘的算子,Roberts算子边缘定位准,但是对噪声敏感。适用于边缘明显而且噪声较少的图像分割,在应用中经常用Roberts算子来提取道路。程序如下:I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');%读取图像J=rgb2gray(I);%转化为灰度图像K=imadjust(J,[40/2551]);%调整灰度值BW=edge(K,'roberts');%边缘检测figure(1);imshow(BW);%显示图像2、Sobel边缘算子:图像中的每个像素都用这核做卷积。这两个核分别对垂直边缘和水平边缘响应最大,两个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。Sobel算子认为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越大,产生的影响越小。程序如下:I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');%读取图像J=rgb2gray(I);%转化为灰度图像K=imadjust(J,[40/2551]);%调整灰度值BW=edge(K,'sobel');%边缘检测figure(1);imshow(BW);%显示图像3、Prewitt算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,有抑制噪声作用。但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。程序如下:I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');%读取图像J=rgb2gray(I);%转化为灰度图像K=imadjust(J,[40/2551]);%调整灰度值BW=edge(K,'prewitt');%边缘检测figure(2);imshow(BW);%显示图像这是未经滤波的效果图。4、Laplacian算子利用二阶导数信息,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。使得图像经过二阶微分后,在边缘处产生一个陡峭的零交叉点,根据这个对零交叉点判断边缘。Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板。5、Log(LaplacianofGassian)算法:将高斯滤波和拉普拉斯检测算子结合在一起进行边缘检测的方法。也称之为拉普拉斯高斯算法。该算法的主要思路和步骤是:滤波(滤波函数根据人类视觉特性选为高斯函数)、增强(对平滑图像进行拉普拉斯运算)、检测(边缘检测判据是二阶导数的零交叉点并对应一阶导数的较大峰值)。这种方法的特点是图像首先与高斯滤波器进行卷积,这样既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除。但是由于平滑会造成图像边缘的延伸,因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点。高斯--拉普拉斯算子把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来,先平化掉噪声,再进行边缘检测,所以效果更好。程序如下:I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');J=rgb2gray(I);%转化为灰度图像K=imadjust(J,[40/2551]);%调整灰度值BW1=edge(K,'log',0.01);figure(1);subplot(3,2,1);imshow(BW1);title('阈值为0.01的LOG算子边缘检测图像');BW11=edge(K,'log',0.001);subplot(3,2,5);imshow(BW11);title('阈值为0.001的LOG算子边缘检测图像');BW2=edge(K,'log',0.005);subplot(3,2,4);imshow(BW2);title('阈值为0.005的LOG算子边缘检测图像');BW20=edge(K,'log',0.007);subplot(3,2,3);imshow(BW20);title('阈值为0.007的LOG算子边缘检测图像');BW22=edge(K,'log',0.009);subplot(3,2,2);imshow(BW22);title('阈值为0.009的LOG算子边缘检测图像');BW23=edge(K,'log',0.0001);subplot(3,2,6);imshow(BW23);title('阈值为0.0001的LOG算子边缘检测图像');结果分析:如图所示采用的阈值越小则图像的边缘处理效果越清晰,且边缘点条理显著。但是当阈值超过0.0001时图像边缘的处理效果越模糊如图5.20所示,但是仍能进行边缘的判断!6、Canny算子类似与Marr(LOG)边缘检测方法,也属于先平滑后求导数的方法。采用二维高斯函数的任意方向上的一阶方向导数为噪声滤波器,通过与图像卷积进行滤波;然后对滤波后的图像寻找图像梯度的局部最大值,以此来确定图像边缘。根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。用双阈值算法检测和连接边缘。检测方法的优点:①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘。程序如下:I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');J=rgb2gray(I);%转化为灰度图像K=imadjust(J,[40/2551]);%调整灰度值BW1=edge(K,'canny',0.01);figure(2);subplot(3,2,1);imshow(BW1);title('阈值为0.01的Canny算子边缘检测图像');BW11=edge(K,'canny',0.009);subplot(3,2,2);imshow(BW11);title('阈值为0.009的Canny算子边缘检测图像');BW2=edge(K,'canny',0.007);subplot(3,2,3);imshow(BW2);title('阈值为0.007的Canny算子边缘检测图像');BW21=edge(K,'canny',0.005);subplot(3,2,4);imshow(BW21);title('阈值为0.005的Canny算子边缘检测图像');BW22=edge(K,'canny',0.0001);subplot(3,2,5);imshow(BW22);title('阈值为0.0001的Canny算子边缘检测图像');结果分析:如图所示采用的阈值越小则图像的边缘处理效果越模糊不清,且边缘分界点无法判断,变得模糊不清。且当阈值超过0.0002时图像边缘的边缘有效信息部分丢失,边缘点的判断模糊如图5.19所示,虽仍然能够识别它的边界线,但其清晰边界点已无法识别判断图像的边缘点准确性!重新选择阈值,程序如下:I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');J=rgb2gray(I);%转化为灰度图像K=imadjust(J,[40/2551]);%调整灰度值BW1=edge(K,'canny',0.00);subplot(3,2,1);imshow(BW1);title('阈值为0.00的Canny算子边缘检测图像');BW11=edge(K,'canny',0.05);subplot(3,2,2);imshow(BW11);title('阈值为0.05的Canny算子边缘检测图像');BW2=edge(K,'canny',0.1);subplot(3,2,3);imshow(BW2);title('阈值为0.1的Canny算子边缘检测图像');BW21=edge(K,'canny',0.2);subplot(3,2,4);imshow(BW21);title('阈值为0.2的Canny算子边缘检测图像');BW22=edge(K,'canny',0.3);subplot(3,2,5);imshow(BW22);title('阈值为0.3的Canny算子边缘检测图像');效果明显变好。7、基于小波包的图像边缘检测从信号分析的角度看,图像的边缘是图像信号的突变点,描述信号最有意义的特征点是信号的突变点,它包含了信号的大量信息。边缘在图像中表现为灰度值的突变,表现为高频信号。因此所以的边缘检测方法都是检测信号的高频分量,但是在实际图像中,由于噪声的存在,边缘检测成为一个难题。小波包分解后得到的图像序列又近似部分和细节部分组成,近似部分是原图像对高频部分进行滤波所得的近似表示,经滤波后,近似部分去除了高频分量,因此能够检测到原图像中所检测不到的边缘。I=imread('D:\研一\阳建宏信号\作业\柚子.jpg');%加入噪声I2=imnoise(I,'gaussian',0,0.01);subplot(221);imagesc=(I2);title('原始图像');axissquare;[X,map]=rgb2ind(I2,0.1);%转化为灰度图像X=double(X);%用小波db10对图像X进行一层小波包分解T=wpdec2(X,1,'db10');%重构图像的近似部分A=wprcoef(T,[10]);subplot(222);imagesc=(A);title('图像的近似部分');axissquare;%原图像的边缘检测BW1=edge(X,'sobel');subplot(223);imshow(BW1);title('原图像的边缘');axissquare;%图像近似部分的边缘检测BW2=edge(A,'sobel');subplot(224);imshow(BW2);title('图像近似部分的边缘');axissquare;8、基于膨胀与腐蚀的形态操作——骨架化和边缘检测(1)骨架化:某些应用中,针对一副图像,希望对图像中所有对象简化为线条,但不修改图像的基本结构,保留图像基本轮廓,这个过程就是所谓的骨架化。提供了专门的函数bwmorph,可以实现骨架化操作。BW1=imread('D:\研一\阳建宏信号\作业\柚子.jpg');J=rgb2gray(
本文标题:基于MATLAB边缘检测与提取的几种方法的比较
链接地址:https://www.777doc.com/doc-5679654 .html