资源描述:
《图像边缘检测算法_代码程序_及其结果.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、图像边缘检测算法研究一、边缘检测:边缘是指图像局部亮度变化最显著的部分,边缘主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征提取和形状特征提取等图像分析的重要基础。边缘的检测正是利用物体和背景在某种图像特性上的差异来实现的。这些差异包括灰度、颜色或纹理特征。边缘检测实际上就是检测图像特性发生变化的位置。二、图像的边缘大致可分为两种:阶跃状和屋顶状;阶跃状的边缘处于图像中两个不同灰度的相邻区域之间,屋顶状的边缘上升和下降都比较缓慢。阶跃状边缘的位置在一阶导数的峰值点,在二阶导数的过零点;屋顶状边缘(有一定的宽度范围)的位
2、置在一阶导数的两峰值之间,在二阶导数的两个过零点之间。三、基于一阶导数法的边缘检测3.1梯度算子求梯度的运算可近似为微分模板与图像的卷积。常用一阶边缘检测算子有简单梯度算子、Roberts算子、priwitt算子、sobel算子。梯度算子包含着微分运算,对噪声比较敏感。以上各算子都只包含x,y两个方向的模板,每种模板只对相应的方向敏感,而对其他方向的变化响应不大。①Roberts算子Roberts算子是一种利用局部差分算子寻找边缘的算子,它由下式给出:++++-=它是由两个2×2模板作用的结果(标注•的是当前像素的位置):(1)用卷积函数conv2处理的M
3、atlab程序代码:a=imread('lena','tif');b=[01;-10]/126;c=[10;0-1]/126;%参数126是实验时为增强图像对比度试验出来的d=conv2(a,b,'same');d=abs(d);%处理水平方向算子的结果,参数'same'使得得到的图像与原图大小相等。e=conv2(a,c,'same');e=abs(e);%处理垂直方向算子的结果f=max(d,e);%取水平及垂直方向上的大值subplot(1,3,1),imshow(d),title('roberts水平')subplot(1,3,2),imshow(
4、e),title('roberts垂直')subplot(1,3,3),imshow(f),title('roberts综合')由图可知,用单个方向的算子则对该方向比较敏感。(2)用edge函数处理的Matlab程序代码:a=imread('tuxing','tif');%读取图像a=imnoise(a,'salt&pepper',0.005);%对图像加椒盐噪声b=edge(a,'roberts',0.02);%以阈值为0.02进行roberts边缘检测c=edge(a,'roberts',0.07);%阈值为0.07[d,e]=edge(a,'robe
5、rts');%该处可得阈值的默认值esubplot(2,2,1),imshow(a),axison;title('原图')subplot(2,2,2),imshow(b),axison;title('roberts阈值=0.02')subplot(2,2,3),imshow(c),axison;title('roberts阈值=0.07')subplot(2,2,4),imshow(d),axison;title('默认')运行结果:②Prewitt算子为了在边缘检测中减少噪声的影响,1970年Prewitt和Sobel分别提出Prewitt算子和Sobe
6、l算子。Prewitt算子加大了边缘检测算子的模板,扩大到3x3来计算差分算子。Prewitt边缘检测算子使用两个有向算子(一个水平的,一个是垂直的,一般称为模板),每一个逼近一个偏导数:如果我们用Prewitt算子检测图像M的边缘的话,我们可以先分别用水平算子和垂直算子对图像进行卷积,得到的是两个矩阵,在不考虑边界的情形下也是和原图像同样大小的M1,M2,他们分别表示图像M中相同位置处的两个偏导数。然后把M1,M2对应位置的两个数平方后相加得到一个新的矩阵G,G表示M中各个像素的灰度的梯度值(一个逼近)。然后就可以通过阀值处理得到边缘图像。(1)用卷积函
7、数conv2处理的Matlab程序代码:a=imread('lena','tif');b=[-1-1-1;000;111]/256;c=[-101;-101;-101]/256;%参数256是实验时为增强图像对比度试验出来的d=conv2(a,b,'same');d=abs(d);%处理水平方向算子的结果e=conv2(a,c,'same');e=abs(e);%处理垂直方向算子的结果f=max(d,e);%取水平及垂直方向上的大值subplot(1,3,1),imshow(d),title('prewitt水平')subplot(1,3,2),imsho
8、w(e),title('prewitt垂直')subplot(1,