维纳滤波法matlab代码
时间: 2023-11-05 10:04:42 浏览: 42
下面是使用维纳滤波法进行图像复原的MATLAB代码示例:
```matlab
% 读取原始图像
I = imread('lena.jpg');
% 添加高斯噪声
J = imnoise(I, 'gaussian', 0.01);
% 计算点扩散函数
PSF = fspecial('motion', 20, 45);
% 对模糊图像进行维纳滤波
K = deconvwnr(J, PSF, 0.01);
% 显示结果
subplot(1,3,1), imshow(I), title('原始图像');
subplot(1,3,2), imshow(J), title('模糊图像');
subplot(1,3,3), imshow(K), title('维纳滤波结果');
```
其中,使用 `imread` 函数读取原始图像,使用 `imnoise` 函数添加高斯噪声。使用 `fspecial` 函数计算点扩散函数,然后使用 `deconvwnr` 函数进行维纳滤波,最后使用 `subplot` 和 `imshow` 函数显示结果。其中,参数 `0.01` 是正则化参数,可以根据实际情况进行调整。
相关问题
维纳滤波去噪matlab代码
以下是一个简单的基于维纳滤波的去噪的Matlab代码示例:
```matlab
clear all;
close all;
clc;
% 读取带噪声的图像
I_noisy = imread('noisy_image.jpg');
% 显示原始图像和带噪声的图像
figure;
subplot(1,2,1);
imshow(I_noisy);
title('Noisy Image');
% 转换为灰度图像
I_noisy_gray = rgb2gray(I_noisy);
% 计算噪声方差
var_noise = var(double(I_noisy_gray(:)));
% 计算信号方差
var_signal = var(double(imread('original_image.jpg')));
% 维纳滤波
I_denoised = wiener2(I_noisy_gray,[5 5],var_noise/var_signal);
% 显示去噪后的图像
subplot(1,2,2);
imshow(I_denoised);
title('Denoised Image');
```
在这个示例中,我们首先读取了一个带噪声的彩色图像,然后将其转换为灰度图像。接着,我们计算了噪声方差和信号方差,并使用wiener2函数对图像进行了维纳滤波。最后,我们显示了去噪后的图像。值得注意的是,wiener2函数的第二个参数指定了用于滤波的局部邻域的大小。
维纳滤波matlab代码
下面是一个简单的维纳滤波的 MATLAB 代码:
```matlab
function im_filtered = wiener_filter(im, PSF, NSR)
% 对输入图像和点扩散函数进行傅里叶变换
IM = fft2(im);
H = fft2(PSF, size(im,1), size(im,2));
% 计算维纳滤波的参数
if NSR > 0
% 计算噪声功率谱
NPS = abs(fft2(randn(size(im)))) .^ 2;
% 计算信号功率谱
SPS = abs(IM) .^ 2;
% 计算信噪比
SNR = SPS ./ NPS;
% 计算维纳滤波的参数
K = NSR ./ SNR;
K(SNR == 0) = 0;
else
K = 0;
end
% 应用维纳滤波
im_filtered = real(ifft2((conj(H) .* IM) ./ (abs(H) .^ 2 + K)));
```
在上面的代码中,`im` 是输入图像,`PSF` 是点扩散函数,`NSR` 是噪声功率与信号功率之比。函数返回维纳滤波后的图像 `im_filtered`。