資源簡介
matlab邊緣檢測程序,包括:'羅伯特梯度','Prewitt算法','Sobel梯度','Laplace算子','Laplace算子擴展模板','方向算子'。
代碼片段和文件信息
function?[?Result?]?=?Edge_detect(?Kk?)
%UNtitleD?此處顯示有關此函數的摘要
%???此處顯示詳細說明
%?將圖片讀入矩陣????
A=double(K);
[Row?ColThi]=size(A);
Result=zeros(RowCol);
%?選擇待增強的波段
if?Thi>1
????n=input(‘請選擇待處理的波段:‘);
????B=A(::n);
else
????B=A;
end
dim=5;
Mod=ones(dimdim);
for?i=(dim+1)/2:(Row-(dim+1)/2)
????for?j=(dim+1)/2:(Col-(dim+1)/2)
?????????C=B((i-(dim-1)/2):(i+(dim-1)/2)(j-(dim-1)/2):(j+(dim-1)/2));
?????????D=Mod.*C;
?????????B(ij)=mean2(D);
????end
end???
%?選擇要執行的操作
str={‘羅伯特梯度‘‘Prewitt算法‘‘Sobel梯度‘‘Laplace算子‘‘Laplace算子擴展模板‘‘方向算子‘};
[selok]=listdlg(‘Liststring‘str‘PromptString‘‘請選擇操作?‘?‘SelectionMode‘‘single‘);??
??
%?羅伯特梯度
if?sel==1?
???for?i=2:(Row-1)
???????for?j=2:(Col-1)
????????????Result(ij)=abs(B(ij)-B(i+1j+1))+abs(B(i+1j)-B(ij+1));
???????end
???end
???
%?Prewitt算法
elseif?sel==2
?????T1=[-1-1-1;000;111];
?????T2=[-101;-101;-101];
?????for?i=2:(Row-1)
?????????for?j=2:(Col-1)
?????????????C=B((i-1):(i+1)(j-1):(j+1));
?????????????D1=C.*T1;
?????????????D2=C.*T2;
?????????????p=sum(D1(:));
?????????????q=sum(D2(:));
?????????????Result(ij)=abs(p)+abs(q);
?????????end
?????end
?????
%?Sobel梯度
elseif?sel==3
?????T1=[-1-2-1;000;121];
?????T2=[-101;-202;-101];
?????for?i=2:(Row-1)
?????????for?j=2:(Col-1)
?????????????C=B((i-1):(i+1)
- 上一篇:500w逆變器
- 下一篇:matlab的K-mean圖像分類程序
評論
共有 條評論