图像的边缘检测(实验报告)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字信号处理实验图像的边缘检测
图像的边缘检测
一,原理
本实验主要是对图像的边缘进行提取,通过对边缘的分析来分析图像的特征。
首先,了解一些术语的定义:
边缘点:图像中具有坐标[i,j]且处在强度显著变化的位置上的点。
边缘段:对应于边缘点坐标[i,j]及其方位 ,边缘的方位可能是梯度角。
边缘检测器:从图像中提取边缘(边缘点和边缘段)集合的算法。
轮廓:边缘列表,或者是一条表示边缘列表的拟合曲线。
边缘连接:从无序边缘表形成有序边缘表的过程,习惯上,边缘表的表示采用顺时针方向来排序。
边缘跟踪:一个用来确定轮廓的图像(指滤波后的图像)搜索过程。
边缘就是图像中包含的对象的边界所对应的位置。物体的边缘以图像局部特性的不连续性的形式出现的,例如,灰度值的突变,颜色的突变,纹理结构的突变等。从本质上说,边缘就意味着一个区域的终结和另外一个区域的开始。图像边缘信息在图像分析和人的视觉中十分重要,是图像识别中提取图像特征的一个重要属性。
边缘检测(edge detection)在图像处理和对象识别领域中都是一个重要的基本问题。由于边缘的灰度不连续性,可以使用求导数的方法检测到。最早的边缘检测方法都是基于像素的数值导数的运算。本实验主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算,比较处理结果。
边缘检测有三个共性准则,
1,好的检测结果,或者说对边缘的误测率尽可能低,就是在图像边缘出现的地方检测结果中不应该没有;另一方面不要出现虚假的边缘。
2,对边缘的定位要准确,也就是我们标记出的边缘位置要和图像上真正边缘的中心位置充分接近。
3,对同一边缘要有尽可能低的响应次数,也就是检测响应最好是单像素的。
二,对图像进行各种算子运算
本实验中主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算。
由于MATLAB对彩色图像不能进行分析。所以,我们要将图像首先进行灰度处理,处
理后的图像才能进行各种算子的变换分析。
程序如下所示:
>> I=imread('C:\Users\Administrator\Desktop\草莓.jpg');
>> subplot(3,3,1);
>> imshow(I);title('(a)原始图像');
>> J=rgb2gray(I); %转化为灰度图像
>> subplot(3,3,2);
>> imshow(J);title('(b)灰度图');
>> K=imadjust(J,[40/255 1]);%调整灰度值
>> subplot(3,3,3)
>> imshow(K);title('(c)调整灰度后的图');
>> I1=edge(K,'sobel');
>> subplot(3,3,4);
>> imshow(I1);title('(d)Sobel算子');
>> I2=edge(K,'prewitt');
>> subplot(3,3,5);
>> imshow(I2);title('(e)Prewitt算子');
>> I3=edge(K,'robert');
>> subplot(3,3,6);
>> imshow(I3);title('(f)Robert算子');
>> I4=edge(K,'log');
>> subplot(3,3,7);
>> imshow(I4);title('(g)Laplace算子');
>> I5=edge(K,'canny');
>> subplot(3,3,8);
>> imshow(I5);title('(h)Canny算子');
图像进行分析之后的结果如图1所示。
图1 对原图进行各种算子变换的结果
通过对上述几种算子的研究,我们可以发现,Prewit t 算子和Sobel 算子都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有些差异,但是图像产生了一定的模糊, 而且有些边缘还检测不出来,所以检测精度比较低, 该类算子比较适用于图像边缘灰度值比较明显的情况。
Robert s 算子检测精度比较高, 但容易丢失一部分边缘, 使检测的结果不完整,同时图像没经过平滑处理,不能抑制噪声,所以该算子对具有陡峭的低噪声图像响应最好。
Laplace算子通过高斯函数对图像进行了平滑处理,对噪声的抑制作用比较明显, 但处理的同时也可能将原有的边缘平滑, 造成某些边缘无法检测到。此外,噪声对其影响也较大,检测到的图细节很丰富,同时就可能出现伪边缘。但是,如果要降低伪边缘的话,又可能使检测精度下降,丢失很多真边缘。因此, 对于不同图像应选择不同参数。
Canny 算子也采用高斯函数对图像进行平滑处理,也具有较强的去噪能力, 但同样可能会丢失一些边缘信息,但是,从图中可以看出,Canny 算子比Laplace算子的检测边缘的精度要高些。通过实验结果可以看出,该算子在上述几种边缘检测算子当中效果最好。
三,加入噪声
对图像加入一定的噪声,然后观察各种算子对噪声的影响。(加入高斯噪声(μ=0,σ^2=0.01))
其程序如下:
>> K_g1 = imnoise(K,'gaussian',0,0.01);
>> BW_sobel = edge(K_g1,'sobel');
>> BW_prewitt = edge(K_g1,'prewitt');
>> BW_roberts = edge(K_g1,'roberts');
>> BW_laplace = edge(K_g1,'log');
>> BW_canny = edge(K_g1,'canny');
>> figure(2)
>> subplot(2,3,1);imshow(K_g1),title('加入高斯噪声(μ=0,σ^2=0.01)图像');
>> subplot(2,3,2),imshow(BW_sobel),title('sobel检测');
>> subplot(2,3,3),imshow(BW_prewitt),title('prewitt检测');
>> subplot(2,3,4),imshow(BW_roberts),title('roberts检测');
>> subplot(2,3,5),imshow(BW_laplace),title('laplace检测');
>> subplot(2,3,6),imshow(BW_canny),title('canny检测');
其程序运行的结果如图2所示: