您现在的位置是:首页 >技术交流 >【图像处理】图像的边缘检测(Matlab代码实现)网站首页技术交流
【图像处理】图像的边缘检测(Matlab代码实现)
👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
2)基于人工设计特征方法,如统计边缘[6] 、概率边界 (probability boundary,Pb)PMI(pointwise mutual information),和结构化边缘检测算法,如 SE(struc-tured forests edge detection)算法[9] 等。传统的边缘检测方法提取边缘已经取得了相当大的进步,但是对噪声
📚2 运行结果
部分代码:
function idxLocalMax=cannyFindLocalMaxima(direction,ix,iy,mag)
%功能:实现非极大抑制功能
%输入:direction-4个方向
% ix-图像在x方向滤波结果
% iy-图像在y方向滤波结果
% mag-滤波幅度
[m,n,o]=size(mag);
%根据梯度幅度确定各点梯度的方向,并找出四个方向可能存在的边缘点的坐标。
switch direction
case 1
idx=find((iy<=0&ix>-iy)|(iy>=0&ix<-iy));
case 2
idx=find((ix>0&-iy>=ix)|(ix<0&-iy<=ix));
case 3
idx=find((ix<=0&ix>iy)|(ix>=0&ix<-iy));
case 4
idx=find((iy<0&ix<=iy)|(iy>0&ix>=iy));
end
%去除图像边界以外点
if~isempty(idx)
v=mod(idx,m);
extIdx=find(v==1|v==0|idx<=m|idx>(n-1)*m);
idx(extIdx)=[];
end
%求出可能的边界点的滤波值
ixv=ix(idx);
iyv=iy(idx);
gradmag=mag(idx);
%计算4个方向的梯度幅度
switch direction
case 1
d=abs(iyv./ixv);
gradmag1=mag(idx+m).*(i-d)+mag(idx+m-1).*d;
gradmag2=mag(idx-m).*(i-d)+mag(idx-m+1).*d;
case 2
d=abs(ixv./iyv);
gradmag1=mag(idx+1).*(i-d)+mag(idx+m-1).*d;
gradmag2=mag(idx-1).*(i-d)+mag(idx-m+1).*d;
case 3
d=abs(ixv./iyv);
gradmag1=mag(idx-1).*(i-d)+mag(idx-m-1).*d;
gradmag2=mag(idx+1).*(i-d)+mag(idx+m+1).*d;
case 4
d=abs(iyv./ixv);
gradmag1=mag(idx-m).*(i-d)+mag(idx-m-1).*d;
gradmag2=mag(idx+m).*(i-d)+mag(idx+m+1).*d;
end
%进行非极大抑制
idxLocalMax=idx(gradmag>=gradmag1&gradmag>=gradmag2);
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]肖扬,周军.图像边缘检测综述[J].计算机工程与应用,2023,59(05):40-54.
[2]刘仲驰.基于果蝇算法的网络图像边缘检测方法[J].自动化应用,2022(11):81-83+86.DOI:10.19769/j.zdhy.2022.11.020.