-
大小: 424KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-13
- 語言: Matlab
- 標(biāo)簽:
資源簡介
canny算法,實(shí)現(xiàn)邊緣檢測。本程序主要分為4步,第一步是輸入圖像,第二步和第三步實(shí)現(xiàn)canny算法,第三步實(shí)現(xiàn)輸出

代碼片段和文件信息
function?e=canny_edge(Isigma)?
%functione=edge(I‘canny‘threshsigma);
%該函數(shù)實(shí)現(xiàn)Canny算子提取邊緣點(diǎn)
%輸入圖像為I,標(biāo)準(zhǔn)差sigma,輸出為邊緣圖像e
I=255*double(I);%將圖像轉(zhuǎn)化為double型
[mn]=size(I);
Rr=2:m-1;cc=2:n-1;
e=repmat(logical(uint8(0))mn);
%產(chǎn)生同樣大小的邊緣圖像e,初始化為1?,即初始化邊緣
GaussianDieOff=0.0001;%設(shè)定高斯函數(shù)消失門限
PercentOfPixelsNotEdges=0.7;%用于計(jì)算邊緣門限
ThresholdRatio=0.2;%設(shè)置兩個(gè)門限的比例
%首先設(shè)計(jì)高斯濾波器和它的微分
pw=1:30;
%設(shè)定濾波器寬度
ssq=sigma*sigma;
%計(jì)算方差
??width?=?find(exp(-(pw.*pw)/(2*ssq))>GaussianDieOff1‘last‘);
??if?isempty(width)
????width?=?1;??%當(dāng)使用者鍵入很小的sigma時(shí)
??end
%計(jì)算濾波算子寬度
?t?=?(-width:width);
??gau?=?exp(-(t.*t)/(2*ssq))/(2*pi*ssq);?????%?一維高斯濾波器
?[xy]=meshgrid(-width:width-width:width);
??dgau2D=-x.*exp(-(x.*x+y.*y)/(2*ssq))/(pi*ssq);%高斯濾波器的一階導(dǎo)數(shù)
??%平滑圖像
??aSmooth=imfilter(Igau‘conv‘‘replicate‘);???%?按行濾波
??aSmooth=imfilter(aSmoothgau‘‘conv‘‘replicate‘);?%?再按列濾波
??ax?=?imfilter(aSmooth?dgau2D?‘conv‘‘replicate‘);
??ay?=?imfilter(aSmooth?dgau2D‘?‘conv‘‘replicate‘);
??mag=sqrt((ax.*ax)+(ay.*ay));
%計(jì)算濾波結(jié)果的幅度
magmax=max(mag(:));
if?magmax>0
mag=mag/magmax;
%對濾波幅度進(jìn)行歸一化
end
%下面根據(jù)濾波幅度的概率密度計(jì)算濾波門限
[countsx]=imhist(mag64);
%計(jì)算濾波結(jié)果的幅度的直方圖
highThresh=min(find(cumsum(counts)>PercentOfPixelsNotEdges*m*n))/64;
%通過設(shè)定非邊緣點(diǎn)的比例來確定高門限
lowThresh=ThresholdRatio*highThresh;
%設(shè)置低門限為高門限乘以比例因子
thresh=[lowThreshhighThresh];
%下面進(jìn)行非極大抑制
%大于高門限的點(diǎn)歸于強(qiáng)邊緣圖像
%小于低門限的點(diǎn)歸于弱邊緣圖像
idxStrong=[];
for?dir=1:4
?idxLocalMax=cannyFindLocalMaxima(diraxaymag);
idxWeak=idxLocalMax(mag(idxLocalMax)>lowThresh);
e(idxWeak)=1;
idxStrong=[idxStrong;idxWeak(mag(idxWeak)>highThresh)];
end
rstrong=rem(idxStrong-1m)+1;%rem是求余數(shù)
cstrong=floor((idxStrong-1)/m)+1;%向-∞取整
e=bwselect(ecstrongrstrong8);????
%通過形態(tài)學(xué)算子將兩幅圖像的邊緣進(jìn)行連接
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%???Local?Function?:?cannyFindLocalMaxima
%
function?idxLocalMax?=?cannyFindLocalMaxima(directionixiymag)
%
%?This?sub-function?helps?with?the?non-maximum?suppression?in?the?Canny
%?edge?detector.??The?input?parameters?are:
%?
%???direction?-?the?index?of?which?direction?the?gradient?is?pointing?
%???????????????read?from?the?diagram?below.?direction?is?1?2?3?or?4.
%???ix????????-?input?image?filtered?by?derivative?of?gaussian?along?x?
%???iy????????-?input?image?filtered?by?derivative?of?gaussian?along?y
%???mag???????-?the?gradient?magnitude?image
%
%????there?are?4?cases:
%
%?????????????????????????The?X?marks?the?pixel?in?question?and?each
%?????????3?????2?????????of?the?quadrants?for?the?gradient?vector
%???????O----0----0???????fall?into?two?cases?divided?by?the?45?
%?????4?|?????????|?1?????degree?line.??In?one?case?the?gradient
%???????|?????????|???????vector?is?more?horizontal?and?in?the?other
%???????O????X????O???????it?is?more?vertical.??There?are?eight?
%???????|?????????|???????divisions?but?for?the?non-maximum?suppression??
%????(1)|?????????|(4)????we?are?only?worried?about?4?of?them?since?we?
%???????O----O----O???????use?symmetric?po
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????431818??2010-08-21?13:04??canny\3.jpg
?????文件???????4681??2011-03-19?12:47??canny\canny_edge.m
?????目錄??????????0??2011-03-24?14:01??canny
-----------?---------??----------?-----??----
???????????????436499????????????????????3
評論
共有 條評論