包含全部的羅伯特算子、普魯伊特算子、索貝爾算子、拉普拉斯算子、傳統(tǒng)CANNY算法、改進的CANNY算法邊緣提取代碼,實用性高,效果顯著,畫出每種方法的對比結(jié)果圖,下載源文件直接跑就行。文件里包含三張醫(yī)學X光圖片用于檢驗程序有效性。
0.png (45.41 KB, 下載次數(shù): 66)
下載附件
2018-6-3 04:52 上傳
全部資料51hei下載地址:
邊緣提取MATLAB源碼.zip
(687.51 KB, 下載次數(shù): 23)
2018-6-2 09:47 上傳
點擊文件名下載附件
源碼 下載積分: 黑幣 -5
- clear all;
- close all;
- clc;
- tic
- img=imread('timg1.png');
- imshow(img);
- title('原圖');
- [m n]=size(img);
- img=double(img);
- %產(chǎn)生一個高斯(低通)濾波器,產(chǎn)生一個5*5的校驗矩陣
- w=fspecial('gaussian',[5 5]);
- figure;
- imshow(uint8(img))
- title('高斯濾波后的圖像');
- %產(chǎn)生一個sobel類型濾波器
- w=fspecial('sobel');
- img_w=imfilter(img,w,'replicate'); %求橫邊緣
- w=w';
- img_h=imfilter(img,w,'replicate'); %求豎邊緣
- img=sqrt(img_w.^2+img_h.^2); %求距離
- figure;
- imshow(uint8(img));
- title('sobel邊緣檢測后的圖像')
- %下面是非極大抑制
- new_edge=zeros(m,n);
- for i=2:m-1
- for j=2:n-1
- Mx=img_w(i,j);
- My=img_h(i,j);
-
- if My~=0
- o=atan(Mx/My); %邊緣的法線弧度
- elseif My==0 && Mx>0
- o=pi/2;
- else
- o=-pi/2;
- end
-
- %Mx處用My和img進行插值
- adds=get_coords(o);
- M1=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3));
- adds=get_coords(o+pi);
- M2=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3));
- isbigger=(Mx*img(i,j)>M1)*(Mx*img(i,j)>=M2)+(Mx*img(i,j)<M1)*(Mx*img(i,j)<=M2);
- if isbigger
- new_edge(i,j)=img(i,j);
- end
- end
- end
- figure;
- imshow(uint8(new_edge));
- title('非極大抑值后的圖像');
- %下面是滯后閾值處理
- up=120; %上閾值
- low=100; %下閾值
- set(0,'RecursionLimit',10000); %設(shè)置最大遞歸深度
- for i=1:m
- for j=1:n
- if new_edge(i,j)>up &&new_edge(i,j)~=255 %判斷上閾值
- new_edge(i,j)=255;
- new_edge=connect(new_edge,i,j,low);
- end
- end
- end
- figure;
- imshow(new_edge==255);
- title('滯后閾值處理后的圖像');
- toc
復制代碼
|