维纳滤波反褶积matlab,图像deblu的维纳滤波

我正试图实现维纳滤波器对模糊图像进行反褶积。我的实现是这样的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)

我有一个输入图像运动模糊的对角线核和一些高斯加性噪声添加到它。lena图片是512x512,模糊内核是11x11。

当我把维纳滤波器应用到这个图像时,结果是这样的。

wp7UA.png

我觉得这张去模糊的照片质量不好。所以我想问一下我的实现是否正确。

非常感谢!

更新我添加噪波的方式。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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值