为什么维纳滤波器在我的情况下只减少噪音?它并没有减少模糊量

问题描述 投票:0回答:1

我正在Python中实现维纳滤波,该滤波应用于使用圆盘形状点扩散函数模糊的图像。我包括制作圆盘形状 PSF 和维纳滤波器的代码


def wienerFiltering(kernel,K_const,image):
    #F(u,v)
    copy_img= np.copy(image)
    image_fft =np.fft.fft2(copy_img)
    #H(u,v)
    kernel_fft  = np.fft.fft2(kernel,s=copy_img.shape)
    #H_mag(u,v)
    kernel_fft_mag = np.abs(kernel_fft)
    #H*(u,v)
    kernel_conj = np.conj(kernel_fft)

    f = (kernel_conj)/(kernel_fft_mag**2 + K_const)
    return np.abs(np.fft.ifft2(image_fft*f))


def makeDiskShape(arr,radius,centrX,centrY):
    for i in range(centrX-radius,centrX+radius):
        for j in range(centrY-radius,centrY+radius):
            if(l2dist(centrX,centrY,i,j)<=radius):
                arr[i][j]=1
    return arr/np.sum(arr)


这是模糊的高斯噪声图像: this is blurred and gaussian noised image

这是我对 K 值为 50 进行维纳滤波后得到的结果: this is what I am getting result after Wiener filtering for K value of 50

结果似乎不太好,我该如何改进?

看起来噪点减少了,但模糊量却没有减少。圆盘 PSF 矩阵的形状为 20,20,半径为 9,看起来像 this

更新 使用地面真实图像和噪声的功率谱来计算 K 常数值,我仍然得到很强的伪影: this is noised and blurred image this is result after using power specturm in place of a constant K value

image-processing signal-processing
1个回答
1
投票

降低您的

K
值。您需要不断尝试,直到获得良好的结果。如果太大,则不会过滤,如果太小,则会出现强烈的伪影。

如果您了解噪声方差,则可以使用它来估计正则化参数。在维纳滤波器中,常数

K
N/S
的简化,其中
N
是噪声功率,
S
是信号功率。这两个值都与频率相关。信号功率
S
可以通过待滤波图像的自相关函数的傅里叶变换来估计。噪声功率很难估计,但如果您有这样的估计(或者因为您综合创建了噪声图像而知道它),那么您可以将该值代入方程中。请注意,这是噪声功率,而不是噪声的方差。

以下代码使用 DIPlib(我们称为 PyDIP 的 Python 接口)来演示维纳反卷积(免责声明:我是作者)。我认为将此代码转换为使用其他库并不困难。

import PyDIP as dip

image = dip.ImageRead('trui.ics');
kernel = dip.CreateGauss([3,3]).Pad(image.Sizes())

smooth = dip.ConvolveFT(image, kernel)
smooth = dip.GaussianNoise(smooth, 5.0)  # variance = 5.0

H = dip.FourierTransform(kernel)
F = dip.FourierTransform(smooth)
S = dip.SquareModulus(F)  # signal power estimate
N = dip.Image(5.0 * smooth.NumberOfPixels())  # noise power (has same value at all frequencies)

Hinv = dip.Conjugate(H) / ( dip.SquareModulus(H) + N / S )

out = dip.FourierTransform(F * Hinv, {"inverse", "real"})

smooth
图像看起来像这样:

对上面的图像进行反卷积所得的

out
图像如下所示:

不要期待完美的结果。正则化项阻碍了完美的逆滤波,因为这种滤波会强烈增强噪声,从而淹没信号并产生完全无用的输出。维纳滤波器在取消卷积和抑制噪声之间找到了中间立场。

WienerDeconvolution
的 DIPlib 文档解释了所涉及的一些方程。

© www.soinside.com 2019 - 2024. All rights reserved.