matlab边缘检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.实验目的及原理:
利用MA TLAB对灰度图进行边缘检测。比较直接调用各种算子进行边缘检测与模板卷积的方法的区别于效果。其中直接调用算子设计阈值的选取,不同阈值检测效果不同。
二.边缘检测代码:
I=imread('dog2.bmp');
I=rgb2gray(I);
subplot(331)
imshow(I)
title('原始灰度图像')
BW=edge(I,'prewitt'); %以自动域值选择法对图像进行Sobel算子边缘检测subplot(332)
imshow(BW)
title('自动域值的prewitt算子边缘检测')
[BW,thresh]=edge(I,'prewitt'); %返回当前Sobel算子边缘检测的阈值
disp('prewitt算子自动选择的阈值为:')
disp(thresh)
BW1=edge(I,'prewitt',0.02,'horizontal'); %以域值为0.02水平方向对图像进行Sobel
算子边缘检测
subplot(333)
imshow(BW1)
title('域值为0.02的水平方向的prewitt算子检测')
BW2=edge(I,'prewitt',0.02,'vertical'); %以域值为0.02垂直方向对图像进行Sobel
算子边缘检测
subplot(334)
imshow(BW2)
title('域值为0.02的垂直方向的prewitt算子检测')
BW3=edge(I,'prewitt',0.05,'horizontal'); % 以域值为0.05水平方向对图像进行
Sobel算子边缘检测
subplot(335)
imshow(BW3)
title('域值为0.05的水平方向的prewitt算子检测')
BW4=edge(I,'prewitt',0.05,'vertical'); % 以域值为0.05垂直方向对图像进行Sobel
算子边缘检测
subplot(336)
imshow(BW4)
title('域值为0.05的垂直方向的prewitt算子检测')
%用卷积实现
b=[-1 -1 -1;0 0 0;1 1 1];c=[-1 0 1;-1 0 1;-1 0 1]; %模板
d=conv2(im2double(I),b,'same');d=abs(d); %处理水平方向算子的结果,参数'same'
使得得到的图像与原图大小相等。
e=conv2(im2double(I),c,'same');e=abs(e); %处理垂直方向算子的结果
f=max(d,e); %取水平及垂直方向上的大值
subplot(337),imshow(uint8(d*255)), title('卷积实现prewitt水平')
subplot(338),imshow(uint8(e*255)), title('卷积实现prewitt垂直')
subplot(339),imshow(uint8(f*255)), title('卷积实现prewitt综合')
三.实验结果:
四.实验结论:
直接调用进行边缘检测效果不理想,边缘不明显,并且还涉及到阈值问题,在选取最佳阈值方面比较困难。若用卷积方法实现效果较好,边缘能基本检测出。