《matlab边缘检测》由会员分享,可在线阅读,更多相关《matlab边缘检测(2页珍藏版)》请在金锄头文库上搜索。
1、一 实验目的及原理: 利用MATLAB对灰度图进行边缘检测。比较直接调用各种算子进行边缘检测与模板卷积的方法的区别于效果。其中直接调用算子设计阈值的选取,不同阈值检测效果不同。二边缘检测代码: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算子边缘
2、检测的阈值 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,pr
3、ewitt,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(im2
4、double(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综合)三实验结果:四实验结论:直接调用进行边缘检测效果不理想,边缘不明显,并且还涉及到阈值问题,在选取最佳阈值方面比较困难。若用卷积方法实现效果较好,边缘能基本检测出。