使用扩散滤波对超声图像进行去斑处理

信息处理 图像处理 matlab
2022-02-15 21:55:55

我正在研究去斑超声图像。我一直在尝试一些基本的过滤器及其混合组合。现在我想尝试扩散过滤技术来去除超声图像的斑点。我对扩散过滤技术(各向同性扩散或 Perona Malik Anisotropic Diffusion Filter)一无所知。我想从基础学习。请推荐一些书籍来学习扩散技术。请记住,我不是高级学习者。

我在谷歌上搜索并发现这本书(Christos P. Loizou、Constantinos S. Pattichis、Costas Pattichis 的 Despeckle Filtering Algorithms and Software for Ultrasound Imaging)非常有用。但是我买不起。如果有人有这本书的PDF(甚至1或2章),请给我链接。还提供一些有用的链接来学习这些技术

1个回答

参考: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))

与散斑噪声图像(左)相比,您可以看到扩散滤波器(右)的边缘保留效果。

在此处输入图像描述