医学图像处理 | 图像复原(三)

在上一期(医学图像处理 | 图像复原(二))推送中,我们介绍了如何通过matlab中的代码实现模糊噪声图像的建模。今天,我们一起来学习一下如何利用维纳滤波实现模糊噪声图像的复原

 之前我们只是讲到了维纳滤波的理论知识,但具体操作起来大家肯定也会有点迷茫,不知所措。有能力的同学可以尝试着依据原理自己编写验证一下!对于有些迷茫的同学也没关系,matlab中已经集成了维纳滤波功能的函数——deconvwnr。

 

 

     首先,我们一起来看一下deconvwnr函数的三种可能的语法形式。

(1)   fr=deconvwnr(g, PSF)

      在此条形式中,g是我们要滤波的图像,PSF是自己估计添加的点扩散函数。此滤波器即为直接逆滤波器

(2)   fr=deconvwnr(g, PSF, NSPR)

     在假设噪信功率比已知,或是个常量或是个数组的情况下,可以这样调用函数(NSPR即为噪信功率比)。当函数接收其中的任何一个形式时。此函数就可用于实现参数维纳滤波器。

(3)   fr=deconvwnr(g, PSF, NACORR, FACORR)

假设噪声和未退化图像的自相关函数NACORR和FACORR是已知的,可以这样调用函数。这里涉及相关的方法小白就只提一下了!感兴趣的可以下去深入的了解一下。

噪声图像

首先,我们显示在上一篇推送中最后得到的模糊噪声图像。

imshow(pixeldup(g,8),[ ]);

二、直接逆滤波复原图像

 

下面,我们使用直接逆滤波,对图像进行复原。

fr1=deconvwnr(g,PSF);

imshow(pixeldup(fr1,8),[ ]);

所得图像如下:

由上图可知,直接逆滤波效果不理想,这个结果是由噪声的结果决定的。

三、使用常数比率维纳滤波复原图像

 

Sn=abs(fft2(noise)).^2;

nA=sum(Sn(:))/numel(noise);

Sf=abs(fft2(f)).^2;

fA=sum(Sf(:))/numel(f);

R=nA/fA;

fr2=deconvwnr(g,PSF,R);

imshow(pixeldup(fr2,8),[ ]);

注:

R为图像的噪信功率比

构造维纳滤波器的过程中,我们感兴趣的两个量分别为平均噪声功率和平均图像功率,分别定义为:

其中,M和N分别表示图像和噪声数组的垂直和水平大小。这些量都是标量常量,且他们的比率R即定义为噪信功率比。即:

利用此滤波器,得到的图像如下:

与直接逆滤波相比,使用常数比率的维纳滤波有了重大改进,但结果仍然不理想。

四、使用自相关函数维纳滤波复原图像

 

NCORR=fftshift(real(ifft2(Sn)));

ICORR=fftshift(real(ifft2(Sf)));

fr3=deconvwnr(g,PSF,NCORR,ICORR);

imshow(pixeldup(fr3,8),[ ]);

注:

NACORR和ICORR分别计算的是噪声和未退化的图像的自相关函数。

所得图像如下:

使用自相关函数的维纳滤波效果最好,虽仍然有一些噪声的存在,但是已经和原图很接近了。

这是因为原图像和噪声函数都是已知的,所以可以正确地估算参量,从而能够由Wiener反卷积得到最佳结果。

如果在实践中,当这些参量之一(或更多)未知,挑战便是在实验中智能地选择所用函数,直到获得可接受的结果时止。所以图像复原的工作也是十分有难度的!让我们为这些工作者们点赞!

 

大家也可以尝试更多不同的滤波方法,看是否能够实现更优的滤波效果!

更多干货请关注公众微信号:医电小白的进阶之路

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值