当前位置:文档之家› matlab边缘检测

matlab边缘检测

matlab边缘检测
matlab边缘检测

一.实验目的及原理:

利用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综合')

三.实验结果:

四.实验结论:

直接调用进行边缘检测效果不理想,边缘不明显,并且还涉及到阈值问题,在选取最佳阈值方面比较困难。若用卷积方法实现效果较好,边缘能基本检测出。

相关主题
文本预览
相关文档 最新文档