資源簡介
該算法為canny算子邊緣檢測,與matlab自帶函數效果一致,程序可運行。有對比效果,并有很多注釋。

代碼片段和文件信息
f=imread(‘大米.jpg‘);
f1?=?rgb2gray(f);
f1=double(f1);
edg=edge(f1‘canny‘);
figure
subplot(121)
imshow(edg)
%高斯濾波:
h?=?fspecial(‘gaussian‘[3?3]1);%建立3*3高斯濾波模板
f2?=?imfilter(f1h‘conv‘‘replicate‘);%將濾波模板與圖像進行卷積
?
%計算梯度幅值和方向
[linerow]?=?size(f2);
w=fspecial(‘sobel‘);%方法三
gx=imfilter(f2w‘replicate‘);??????%求橫邊緣
w=w‘;
gy=imfilter(f2w‘replicate‘);??????%求豎邊緣
grad=sqrt(gx.^2+gy.^2);???
angle?=?zeros(linerow);
for?i?=?2:line-1?%計算梯度方向
????for?j?=?2:row-1
????????angle(ij)?=?atan(gx(ij)/gy(ij));
????end
end
gradtemp=grad;
?
%對梯度幅值進行非極大值抑制
for?i?=?2:line-1
????for?j?=?2:row-1
????????if?gradtemp(ij)?~=?0
???????????if?angle(ij)?>?0?&&?angle(ij)????????????????w?=?angle(ij)/(pi/4);
???????????????d1?=?(1-w)*grad(ij+1)+w*grad(i-1j+1);
???????????????d2?=?(1-w)*grad(ij-1)+w*grad(i+1j-1);
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?>?pi/4?&&?angle(ij)????????????????w?=?(angle(ij)-pi/4)/(pi/4);
???????????????d1?=?(1-w)*grad(i-1j)+w*grad(i-1j+1);
???????????????d2?=?(1-w)*grad(i+1j)+w*grad(i+1j-1);
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?>?(-pi/4)?&&?angle(ij)?0
???????????????w?=?angle(ij)/(-pi/4);
???????????????d1?=?(1-w)*grad(ij+1)+w*grad(i+1j+1);
???????????????d2?=?(1-w)*grad(ij-1)+w*grad(i-1j-1);???????????????
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?-pi/4?&&?angle(ij)?>?-pi/2
???????????????w?=(angle(ij)+pi/4)/(-pi/4);
???????????????d1?=?(1-w)*grad(i+1j)+w*grad(i+1j+1);
???????????????d2?=?(1-w)*grad(i-1j)+w*grad(i-1j-1);?
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?==?0
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?==?pi/4
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?==?pi/2
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
???????????if?angle(ij)?==?(-pi/4)
??????????????if?gradtemp(ij)???????????????????gradtemp(ij)?=?0;
??????????????end
???????????end
????????else?
????????????gradtemp(ij)?=?grad(ij);
????????end
????end
end
%高低閾值
m1=70;
m2=5;
%連接邊緣
for?i?=?2:line-1
???for?j?=?2:row-1
???????if?gradtemp(ij)?<=?m2
??????????gradtemp(ij)?=?0;
???????elseif?g
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3583??2019-03-30?22:40??canny\cannytest.m
?????文件??????10746??2019-03-31?10:07??canny\Unti
?????文件??????35163??2019-03-30?20:41??canny\大米.jpg
?????文件??????11667??2019-03-30?20:41??canny\大腸桿菌.jpg
?????文件??????31039??2019-03-30?20:41??canny\紅細胞.jpg
?????目錄??????????0??2019-03-31?10:25??canny
-----------?---------??----------?-----??----
????????????????92198????????????????????6
- 上一篇:[Matlab]基于海浪譜的三維海浪模擬
- 下一篇:BPSK+AWGN1.zip
評論
共有 條評論