Wiener Filter for image deblur

yc2*_*986 7 python image-processing convolution motion-blur

我正在尝试实施维纳滤波器以对模糊图像执行反卷积.我的实现是这样的

import numpy as np
from numpy.fft import fft2, ifft2

def wiener_filter(img, kernel, K = 10):
    dummy = np.copy(img)
    kernel = np.pad(kernel, [(0, dummy.shape[0] - kernel.shape[0]), (0, dummy.shape[1] - kernel.shape[1])], 'constant')
    # Fourier Transform
    dummy = fft2(dummy)
    kernel = fft2(kernel)
    kernel = np.conj(kernel) / (np.abs(kernel) ** 2 + K)
    dummy = dummy * kernel
    dummy = np.abs(ifft2(dummy))
    return np.uint8(dummy)
Run Code Online (Sandbox Code Playgroud)

此实现基于Wiki页面.

使用的TIFF图像来自:http://www.ece.rice.edu/~wakin/images/lena512color.tiff
但这里有一个PNG版本:

我有一个由对角内核模糊的输入图像运动,并添加了一些高斯加性噪声.lena图片为512x512,模糊内核为11x11.

当我将wiener_filter应用于此图像时,结果就像这样. 在此输入图像描述.

我认为这种模糊的图像质量不高.所以我想问一下我的实现是否正确.

非常感谢你!

更新我添加噪音的方式.

from scipy.signal import gaussian, convolve2d

def blur(img, mode = 'box', block_size = 3):
    # mode = 'box' or 'gaussian' or 'motion'
    dummy = np.copy(img)
    if mode == 'box':
        h = np.ones((block_size, block_size)) / block_size ** 2
    elif mode == 'gaussian':
        h = gaussian(block_size, block_size / 3).reshape(block_size, 1)
        h = np.dot(h, h.transpose())
        h /= np.sum(h)
    elif mode == 'motion':
        h = np.eye(block_size) / block_size
    dummy = convolve2d(dummy, h, mode = 'valid')
    return np.uint8(dummy), h

def gaussian_add(img, sigma = 5):
    dummy = np.copy(img).astype(float)
    gauss = np.random.normal(0, sigma, np.shape(img))
    # Additive Noise
    dummy = np.round(gauss + dummy)
    # Saturate lower bound
    dummy[np.where(dummy < 0)] = 0
    # Saturate upper bound
    dummy[np.where(dummy > 255)] = 255
    return np.uint8(dummy)
Run Code Online (Sandbox Code Playgroud)

tfv*_*tfv 2

对于数据比较,您可以在以下位置找到维纳滤波和无监督维纳滤波的示例实现:

http://scikit-image.org/docs/dev/auto_examples/plot_restoration.html

如果您提供原始图像数据,我们也许可以提供进一步的帮助。

编辑:原始链接似乎已关闭,试试这个: http ://scikit-image.org/docs/dev/auto_examples/filters/plot_restoration.html

  • @tfv:你的链接已关闭 (2认同)