Matlab利用低通滤波器对运动模糊图像进行逆滤波恢复完整代码
时间: 2023-06-27 21:06:23 浏览: 213
以下是Matlab代码,实现了使用低通滤波器进行逆滤波恢复运动模糊图像:
```matlab
clear all;
close all;
clc;
% 读入图像
I = imread('motion_blur.jpg');
figure, imshow(I), title('原始图像');
% 生成运动模糊核
LEN = 21; THETA = 11;
motion_kernel = fspecial('motion', LEN, THETA);
figure, imshow(motion_kernel, []), title('运动模糊核');
% 对图像进行运动模糊
blurred = imfilter(I, motion_kernel, 'conv', 'circular');
figure, imshow(blurred), title('运动模糊图像');
% 对模糊图像进行逆滤波
H = fft2(motion_kernel, size(I, 1), size(I, 2));
blurred_fft = fft2(blurred);
restored_fft = blurred_fft ./ H;
restored = ifft2(restored_fft);
restored = uint8(real(restored));
figure, imshow(restored), title('逆滤波恢复图像');
% 使用低通滤波器进行逆滤波
LPF = ones(size(I));
LPF(1:10, :) = 0;
LPF(end-9:end, :) = 0;
LPF(:, 1:10) = 0;
LPF(:, end-9:end) = 0;
restored_LPF = restored_fft .* LPF;
restored_LPF = ifft2(restored_LPF);
restored_LPF = uint8(real(restored_LPF));
figure, imshow(restored_LPF), title('低通滤波器恢复图像');
```
代码首先读入了一张运动模糊的图像,然后生成了对应的运动模糊核,并对图像进行了运动模糊。接下来,使用逆滤波对模糊图像进行恢复,并使用一个低通滤波器对恢复后的图像进行进一步处理,以提高图像质量。最后,将结果输出并显示在屏幕上。
阅读全文