给出用维纳滤波法实现对运动模糊图像复原的matlab代码
时间: 2024-03-20 08:42:52 浏览: 231
好的,以下是使用维纳滤波法实现对运动模糊图像复原的 MATLAB 代码:
```matlab
% 读入运动模糊图像
img = imread('blurry_image.png');
% 定义运动方向和长度
theta = 30; % 运动的方向,单位:度
len = 15; % 运动的长度
% 生成点扩散函数
PSF = fspecial('motion', len, theta);
% 对图像进行运动模糊处理
blurred = imfilter(img, PSF, 'conv', 'circular');
% 计算频率响应函数
[H, W] = freqspace(size(PSF));
[U, V] = meshgrid(W, H);
D = len * sqrt(U.^2 + V.^2);
F = exp(-pi * D.^2);
% 计算维纳滤波器
K = F ./ (F + 1 / SNR);
% 对模糊图像进行维纳滤波
restored = deconvwnr(blurred, PSF, K);
% 显示原始图像、模糊图像和复原图像
figure;
subplot(1, 3, 1); imshow(img); title('原始图像');
subplot(1, 3, 2); imshow(blurred); title('模糊图像');
subplot(1, 3, 3); imshow(restored); title('复原图像');
```
其中,`SNR` 变量表示信噪比,越大表示信号越强,噪声越小。你可以根据实际情况调整这个值。
希望这个代码能够帮到你!
阅读全文