Matlab實現(xiàn)圖像邊緣檢測
更新時間:2021年10月25日 16:10:31 作者:混z
這篇文章主要為大家詳細介紹了Matlab實現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
為了在一幅圖像 f 的(x,y)位置尋找邊緣的強度和方向,所選擇的工具就是梯度,梯度使用向量來表示:
該向量指出了圖像 f 在位置(x,y)處的最大變化率的方向,梯度向量的大小表示為:
它是梯度向量方向變化率的值。
梯度向量的方向表示為:
梯度算子
roberts算子:
sobel算子:
prewitt算子:
Matlab實現(xiàn)
function output = my_edge(input_img,method) if size(input_img,3)==3 input_img=rgb2gray(input_img); end input_img=im2double(input_img); sobel_x=[-1,-2,-1;0,0,0;1,2,1]; sobel_y=[-1,0,1;-2,0,2;-1,0,1]; prewitt_x=[-1,-1,-1;0,0,0;1,1,1]; prewitt_y=[-1,0,1;-1,0,1;-1,0,1]; psf=fspecial('gaussian',[5,5],1); input_img=imfilter(input_img,psf);%高斯低通濾波,平滑圖像,但可能會使圖像丟失細節(jié) input_img=medfilt2(input_img); %中值濾波消除孤立點 [m,n]=size(input_img); output=zeros(m,n); if nargin==2 if strcmp(method,'sobel') for i=2:m-1 for j=2:n-1 local_img=input_img(i-1:i+1, j-1:j+1); %近似邊緣檢測,加快速度 %output(i,j)=abs(sum(sum(sobel_x.*local_img)))+abs(sum(sum(sobel_x.*local_img))); output(i,j)=sqrt(sum(sum(sobel_x.*local_img))^2+sum(sum(sobel_y.*local_img))^2); end end elseif strcmp(method,'prewitt') for i=2:m-1 for j=2:n-1 local_img=input_img(i-1:i+1, j-1:j+1); output(i,j)=sqrt(sum(sum(prewitt_x.*local_img))^2+sum(sum(prewitt_y.*local_img))^2); end end else errordlg('maybe you should input sobel or prewitt'); end else %如果不輸入算子的名稱,默認使用roberts算子進行邊緣檢測 for i=1:m-1 for j=1:n-1 output(i,j)=abs(input_img(i,j)-input_img(i+1,j+1))+ ... abs(input_img(i+1,j)-input_img(i,j+1)); end end end output=imadjust(output);%使邊緣圖像更明顯 thresh=graythresh(output);%確定二值化閾值 output=bwmorph(im2bw(output,thresh),'thin',inf);%強化細節(jié) end
代碼效果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
基于python解線性矩陣方程(numpy中的matrix類)
這篇文章主要介紹了基于python解線性矩陣方程(numpy中的matrix類),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10Python實現(xiàn)隱馬爾可夫模型的前向后向算法的示例代碼
這篇文章主要介紹了Python實現(xiàn)隱馬爾可夫模型的前向后向算法,本文通過實例代碼給大家講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12Pandas缺失值填充 df.fillna()的實現(xiàn)
本文主要介紹了Pandas缺失值填充 df.fillna()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07