matLAB在频域中恢复匀速直线运动模糊图像进行逆滤波恢复,并考察无低通滤波、有低通滤波(尝试不同截止频率)对恢复效果的影响
时间: 2023-07-15 10:14:12 浏览: 195
m代码_图像处理;频域低通滤波;MATLAB_
恢复匀速直线运动模糊图像的步骤如下:
1. 读入模糊图像,对其进行傅里叶变换,得到频域图像。
2. 构造恢复滤波器,可以选择无低通滤波和有低通滤波两种方式。
3. 对频域图像进行滤波操作,得到滤波后的频域图像。
4. 对滤波后的频域图像进行反傅里叶变换,得到恢复后的模糊图像。
无低通滤波的恢复滤波器可以简单地设置为逆滤波器,即:
H(u,v) = 1 / H_blur(u,v)
其中H_blur(u,v)为模糊滤波器的频率响应函数,可以根据模糊过程进行计算。
有低通滤波的恢复滤波器可以设置为:
H(u,v) = H_lpf(u,v) / H_blur(u,v)
其中H_lpf(u,v)为低通滤波器的频率响应函数,可以设置不同的截止频率进行实验比较。
下面是matlab代码示例:
```matlab
% 读入模糊图像
img_blur = imread('blur_image.png');
% 傅里叶变换
f = fft2(img_blur);
% 构造恢复滤波器
H_blur = fft2(blur_kernel, size(img_blur,1), size(img_blur,2));
H_inv = 1 ./ H_blur; % 无低通滤波
H_lpf = fspecial('gaussian', [size(img_blur,1), size(img_blur,2)], 10);
H_lpf = fft2(H_lpf);
H_lpf(H_lpf<0.1) = 0.1; % 设置截止频率
H = H_lpf ./ H_blur; % 有低通滤波
% 滤波操作
f_restored_inv = f .* H_inv;
f_restored_lpf = f .* H;
% 反傅里叶变换
img_restored_inv = uint8(ifft2(f_restored_inv));
img_restored_lpf = uint8(ifft2(f_restored_lpf));
% 显示结果
subplot(1,3,1), imshow(img_blur), title('模糊图像');
subplot(1,3,2), imshow(img_restored_inv), title('无低通滤波');
subplot(1,3,3), imshow(img_restored_lpf), title('有低通滤波(截止频率=10)');
```
在实验中,可以尝试不同的截止频率进行比较,观察恢复效果。低通滤波可以去除高频噪声,但可能会导致图像细节模糊。
阅读全文