-
大小: 1.13MB文件类型: .zip金币: 1下载: 0 次发布日期: 2023-08-15
- 语言: 其他
- 标签: PMAD anisotropic matlab
资源简介
论文+代码
论文详细P. Perona and J. Malik. Scale-space and edge detection using anisotropic diffusion.IEEE Trans. 1990.
代码片段和文件信息
% ANISODIFF - Anisotropic diffusion.
%
%
% diff = anisodiff(im niter kappa lambda option)
%
%
% im - input image
% niter - number of iterations.
% kappa - conduction coefficient 20-100 ?
% lambda - max value of .25 for stability
% option - 1 Perona Malik diffusion equation No 1
% 2 Perona Malik diffusion equation No 2
%
% Return
% diff - diffused image.
%
% kappa controls conduction as a function of gradient. If kappa is low
% then mall intensity gradients are able to block conduction and hence diffusion
% across step edges. A large value reduces the influence of intensity
% gradients on conduction.
%
% lambda controls speed of diffusion (you usually want it at a maximum of
% 0.25)
%
% Diffusion equation 1 preserve high contrast edges over low contrast ones.
% Diffusion equation 2 favours wide regions over smaller ones.
% Reference:
% P. Perona and J. Malik.
% Scale-space and edge detection using anisotropic diffusion.
% IEEE Transactions on Pattern Analysis and Machine Intelligence
% 12(7):629-639 July 1990.
function diff = anisodiff(im niter kappa lambda option)
if ndims(im)==3
error(‘Anisodiff only operates on 2D grey-scale images‘);
end
im = double(im);
[rowscols] = size(im);
diff = im;
%{
var = 2;
x = (-4:4);
g = exp(-x.*x/(2*var)); g = g/sum(g);
blurred = conv2(img‘same‘);
im_b = conv2(blurredg‘‘same‘);
%}
for i = 1:niter
% fprintf(‘\rIteration %d‘i);
% Construct diffl which is the same as diff but
% has an extra padding of zeros around it.
diffl = zeros(rows+2 cols+2);
diffl(2:rows+1 2:cols+1) = diff;
% North South East and West differences
deltaN = diffl(1:rows2:cols+1) - diff;
deltaS = diffl(3:rows+22:cols+1) - diff;
deltaE = diffl(2:rows+13:cols+2) - diff;
deltaW = diffl(2:rows+11:cols) - diff;
%deltaN = diff;deltaW;
% Conduction
if option == 1
cN = exp(-(deltaN/kappa).^2);
cS = exp(-(deltaS/kappa).^2);
cE = exp(-(deltaE/kappa).^2);
cW = exp(-(deltaW/kappa).^2);
elseif option == 2
cN = 1./(1 + (deltaN/kappa).^2);
cS = 1./(1 + (deltaS/kappa).^2);
cE = 1./(1 + (deltaE/kappa).^2);
cW = 1./(1 + (deltaW/kappa).^2);
end
% APPLYING FOUR-POINT-TEMPLETE FOR numerical solution of DIFFUSION P.D.E.
diff = diff + lambda*(cN.*deltaN + cS.*deltaS + cE.*deltaE + cW.*deltaW);
% Uncomment the following to see a progression of images
% subplot(ceil(sqrt(niterations))ceil(sqrt(niterations)) i)
% imagesc(diff) colormap(gray) axis image
end
%fprintf(‘\n‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1332481 2012-10-21 22:29 PM_AD\Scale-space and edge detection using anisotropic diffusion.pdf
文件 2694 2006-02-13 15:32 PM_AD\anisodiff.m
目录 0 2012-11-13 15:24 PM_AD\
- 上一篇:VFp 成绩分析系统
- 下一篇:Concurrency in Go中文版.pdf
评论
共有 条评论