資源簡介
Log和Canny邊緣檢測算子

代碼片段和文件信息
clear;
I?=?imread(‘C:\Users\Auser.MEY\Desktop\CV\Tessella.bmp‘);
%I?=?double(I);
%I=rgb2gray(I);?
I=imnoise(I‘gaussian‘00.0005);
figure;
imshow(I)
title(‘noise?image‘)
[heightwidth]?=?size(I);
J?=?I;
conv?=?zeros(55);%高斯卷積核
sigma?=?1;%方差
sigma_2?=?sigma?*?sigma;%臨時變量
sum?=?0;
for?i?=?1:5
????for?j?=?1:5
????????conv(ij)?=?exp((-(i?-?3)?*?(i?-?3)?-?(j?-?3)?*?(j?-?3))?/?(2?*?sigma_2))?/?(2?*?3.14?*?sigma_2);%高斯公式
????????sum?=?sum?+?conv(ij);
????end
end
conv?=?conv./sum;%標準化
%對圖像實施高斯濾波
for?i?=?1:height
????for?j?=?1:width
????????sum?=?0;%臨時變量
????????for?k?=?1:5
????????????for?m?=?1:5
????????????????if?(i?-?3?+?k)?>?0?&&?(i?-?3?+?k)?<=?height?&&?(j?-?3?+?m)?>?0?&&?(j?-?3?+?m)?????????????????????sum?=?sum?+?conv(km)?*?I(i?-?3?+?kj?-?3?+?m);
????????????????end
????????????end
????????end
????????J(ij)?=?sum;
????end
end
figureimshow(J[])
title(‘高斯濾波后的結果‘)
%求梯度
dx?=?zeros(heightwidth);%x方向梯度
dy?=?zeros(heightwidth);%y方向梯度
d?=?zeros(heightwidth);
for?i?=?1:height?-?1
????for?j?=?1:width?-?1
????????dx(ij)?=?J(ij?+?1)?-?J(ij);
????????dy(ij)?=?J(i?+?1j)?-?J(ij);
????????d(ij)?=?sqrt(dx(ij)?*?dx(ij)?+?dy(ij)?*?dy(ij));
????end
end
figureimshow(d[])
title(‘求梯度后的結果‘)
%局部非極大值抑制
K?=?d;%記錄進行非極大值抑制后的梯度
%設置圖像邊緣為不可能的邊緣點
for?j?=?1:width
????K(1j)?=?0;
end
for?j?=?1:width
????K(heightj)?=?0;
end
for?i?=?2:width?-?1
????K(i1)?=?0;
end
for?i?=?2:width?-?1
????K(iwidth)?=?0;
end
for?i?=?2:height?-?1
????for?j?=?2:width?-?1
????????%當前像素點的梯度值為0,則一定不是邊緣點
????????if?d(ij)?==?0
????????????K(ij)?=?0;
????????else
????????????gradX?=?dx(ij);%當前點x方向導數
????????????gradY?=?dy(ij);%當前點y方向導數
????????????gradTemp?=?d(ij);%當前點梯度
????????????%如果Y方向幅度值較大
????????????if?abs(gradY)?>?abs(gradX)
????????????????weight?=?abs(gradX)?/?abs(gradY);%權重
????????????????grad2?=?d(i?-?1j);
????????????????grad4?=?d(i?+?1j);
????????????????%如果x、y方向導數符號相同
????????????????%像素點位置關系
????????????????%g1?g2
????????????????%???C
????????????????%???g4?g3
????????????????if?gradX?*?gradY?>?0
????????????????????grad1?=?d(i?-?1j?-?1);
????????????????????grad3?=?d(i?+?1j?+?1);
????????????????else
????????????????????%如果x、y方向導數符號反
????????????????????%像素點位置關系
????????????????????%???g2?g1
????????????????????%???C
????????????????????%g3?g4
????????????????????grad1?=?d(i?-?1j?+?1);
????????????????????grad3?=?d(i?+?1j?-?1);
????????????????end
????????????%如果X方向幅度值較大
????????????else
????????????????weight?=?abs(gradY)?/?abs(gradX);%權重
????????????????grad2?=?d(ij?-?1);
????????????????grad4?=?d(ij?+?1);
????????????????%如果x、y方向導數符號相同
????????????????%像素點位置關系
????????????????%g3
????????????????%g4?C?g2
????????????????%?????g1
????????????????if?gradX?*?gradY?>?0
????????????????????grad1?=?d(i?+?1j?+?1);
????????????????????grad3?=?d(i?-?1j?-?1);
????????????????else
????????????????????%如果x、y方向導數符號反
?????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????8297??2016-07-14?19:13??Log和Canny程序(MATLAB)\canny.m
?????文件???????4474??2016-07-14?23:03??Log和Canny程序(MATLAB)\Laplacian.m
?????目錄??????????0??2016-07-15?17:07??Log和Canny程序(MATLAB)
-----------?---------??----------?-----??----
????????????????12771????????????????????3
評論
共有 條評論