【发布时间】:2019-05-27 05:23:18
【问题描述】:
我正在 MATLAB 中测试维纳滤波器以恢复模糊图像。我正在使用 conv2() 来模糊原始图像。如果我对 conv2() 使用“完整”选项,一切正常。但是当我更改为“相同”或“有效”时,恢复的图像中突然出现了很多伪影,维纳滤波器失败了。请参阅下面的模糊图像,从“完整”卷积恢复,从“相同”卷积恢复。
这是我对 Wiener 过滤器的实现:
% load image
img = rgb2gray(imread('cameraman.jpg'));
[W, H] = size(img);
dim = 300;
img_fft = fft2(img,dim,dim);
% create blur kernel
kernel = ones(5) / 25;
kernel_fft = fft2(kernel,dim,dim);
% The option here makes huge difference 'same'/'full'/'valid'
img_blur = conv2(img,kernel,'same');
img_blur_fft = fft2(img_blur,dim,dim);
% Wiener filtering
k = 1e-5;
kernel_fft_conj = conj(kernel_fft);
img_wiener_freq = kernel_fft_conj .* img_blur_fft ./ (kernel_fft .* kernel_fft_conj + k);
img_wiener_ifft = ifft2(img_wiener_freq);
img_wiener_ifft = img_wiener_ifft(1:W,1:H);
在现实生活中,模糊图像从来没有圆形或全卷积的形式,我怎样才能正确实现维纳滤波器,使其不依赖于图像的边界?
【问题讨论】:
标签: matlab image-processing filtering convolution deconvolution