参考:Joachim Weickert 的图像处理中的各向异性扩散
不管你在哪里学习扩散技术的理论背景,我想应用Matlab实现的第二个各向异性扩散的正式定义,并不难。我使用了您之前使用的超声 B 扫描图像。
I=imread('ultrasound.png');
I=rgb2gray(I);
subplot(1,2,1)
imshow(I);
[rows, cols]=size(I);
diff = double(I); % original image
lambda = 0.25;
niter = 10;
Co = 20;
for i = 1:10 % iterations
% 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:rows,2:cols+1) - diff;
deltaS = diffl(3:rows+2,2:cols+1) - diff;
deltaE = diffl(2:rows+1,3:cols+2) - diff;
deltaW = diffl(2:rows+1,1:cols) - diff;
cN = 1./(1 + (deltaN/Co).^2);
cS = 1./(1 + (deltaS/Co).^2);
cE = 1./(1 + (deltaE/Co).^2);
cW = 1./(1 + (deltaW/Co).^2);
diff = diff + lambda*(cN.*deltaN + cS.*deltaS + cE.*deltaE + cW.*deltaW);
end
subplot(1,2,2),imshow(uint8(diff))
与散斑噪声图像(左)相比,您可以看到扩散滤波器(右)的边缘保留效果。
