matlab 读入lena图像,利用理想低通滤波器对其进行平滑处理,设置滤波半径依次为5,15,45,65.显示相应滤波结果。
时间: 2023-06-09 12:03:53 浏览: 145
好的,我可以为您解答这个问题。以下是 MATLAB 代码:
```MATLAB
% 读入 lena.tif 图像
lena = imread('lena.tif');
% 将图像转为 double 类型
lena = im2double(lena);
% 计算图像傅里叶变换
lena_ft = fft2(lena);
% 构造理想低通滤波器
[M, N] = size(lena);
r1 = 5;
r2 = 15;
r3 = 45;
r4 = 65;
% 计算距离矩阵
[x, y] = meshgrid(1:N, 1:M);
dist = sqrt((x - floor(N/2) - 1).^2 + (y - floor(M/2) - 1).^2);
% 理想低通滤波器
H1 = dist <= r1;
H2 = dist <= r2;
H3 = dist <= r3;
H4 = dist <= r4;
% 进行滤波
lena_ft_filtered1 = lena_ft .* H1;
lena_ft_filtered2 = lena_ft .* H2;
lena_ft_filtered3 = lena_ft .* H3;
lena_ft_filtered4 = lena_ft .* H4;
% 反变换得到滤波结果
lena_filtered1 = real(ifft2(lena_ft_filtered1));
lena_filtered2 = real(ifft2(lena_ft_filtered2));
lena_filtered3 = real(ifft2(lena_ft_filtered3));
lena_filtered4 = real(ifft2(lena_ft_filtered4));
% 显示结果
subplot(2, 2, 1);
imshow(lena_filtered1);
title(['r=', num2str(r1)]);
subplot(2, 2, 2);
imshow(lena_filtered2);
title(['r=', num2str(r2)]);
subplot(2, 2, 3);
imshow(lena_filtered3);
title(['r=', num2str(r3)]);
subplot(2, 2, 4);
imshow(lena_filtered4);
title(['r=', num2str(r4)]);
```
这段代码会显示 4 张图像,分别是滤波半径分别为 5、15、45 和 65 时的滤波结果。请注意,理想低通滤波器是在频域上对图像进行的滤波。
阅读全文