MATLAB维纳滤波算法图像复原
时间: 2023-10-22 14:21:55 浏览: 110
MATLAB维纳滤波算法是一种常用的图像复原方法,它通过对图像进行噪声去除和模糊消除,使图像变得清晰。下面是 MATLAB 实现维纳滤波算法的步骤:
1. 读入图像并将其转换为灰度图像。
```
img = imread('image.jpg');
gray_img = rgb2gray(img);
```
2. 在图像中添加高斯噪声或者运动模糊。
```
noisy_img = imnoise(gray_img, 'gaussian', 0, 0.01); % 添加高斯噪声
blurred_img = imfilter(gray_img, fspecial('motion', 20, 45)); % 添加运动模糊
```
3. 计算图像的功率谱密度。
```
H = fft2(blurred_img);
H_conj = conj(H);
H_power = abs(H).^2;
```
4. 计算退化函数的功率谱密度。
```
K = fspecial('disk', 5);
K_fft = fft2(K, size(gray_img, 1), size(gray_img, 2));
K_power = abs(K_fft).^2;
```
5. 计算维纳滤波器的频域表示。
```
SNR = 20;
W_fft = H_conj ./ (H_power + K_power./SNR);
```
6. 对退化图像进行维纳滤波。
```
restored_img = real(ifft2(W_fft .* fft2(noisy_img)));
```
7. 显示原始图像、退化图像和复原图像。
```
subplot(1,3,1); imshow(gray_img); title('Original Image');
subplot(1,3,2); imshow(blurred_img); title('Degraded Image');
subplot(1,3,3); imshow(restored_img, []); title('Restored Image');
```
上述代码中,SNR 是信噪比,可以根据实际情况进行调整。运行上述代码,即可得到经过维纳滤波处理后的图像。
阅读全文