请给出一段运用维纳滤波有效去除高斯噪声的MATLAB代码
时间: 2024-05-08 21:18:23 浏览: 203
当然,以下是一段运用维纳滤波有效去除高斯噪声的MATLAB代码:
```matlab
% 生成一张带有高斯噪声的图像
img = im2double(imread('lena.png'));
noisy_img = imnoise(img, 'gaussian', 0, 0.1);
% 计算噪声方差
n = var(noisy_img(:));
% 设置维纳滤波器参数
K = 5; % 滤波器大小
L = 1; % 正则化参数
filter = zeros(K, K);
half_k = floor(K / 2);
for i = 1:K
for j = 1:K
filter(i, j) = exp(-((i - half_k - 1)^2 + (j - half_k - 1)^2) / (2 * L^2));
end
end
% 计算傅里叶变换域的维纳滤波器
filter_fft = fft2(filter, size(noisy_img, 1), size(noisy_img, 2));
filter_fft = conj(filter_fft) ./ (abs(filter_fft).^2 + n);
% 对输入图像进行维纳滤波
filtered_img = real(ifft2(filter_fft .* fft2(noisy_img)));
% 显示结果图像
figure; imshow(img); title('原始图像');
figure; imshow(noisy_img); title('带噪声的图像');
figure; imshow(filtered_img); title('维纳滤波后的图像');
```
代码中首先生成了一张带有高斯噪声的图像,然后通过计算噪声方差,设置了维纳滤波器的参数。通过傅里叶变换,在频域中计算出维纳滤波器,并对输入图像进行滤波,最终得到滤波后的图像。
阅读全文