为什么韦纳滤波器在我的情况下仅减少噪音,而没有减少模糊量

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

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


def weinerFiltering(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

this is what i am getting result after weiner 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.