给出matlab代码:(1)读入图像‘cameraman.tif’,注意图像矩阵中数据格式; (2)为图像添加高斯噪声; (3)构造不同截止频率D0,不同阶数n的巴特沃斯低通滤波器; (4)在频域中,用构造的巴特沃斯低通滤波器分别对图像进行滤波; (5)将滤波结果变换回图像空间域,并显示原始图像、含噪图像、滤波后图像; (6)对比不同截止频率和阶数的低通滤波器的滤波结果,并分析。
时间: 2023-12-26 09:06:21 浏览: 108
以下是根据您的要求编写的Matlab代码:
```matlab
%% 读入图像
I = imread('cameraman.tif');
%% 添加高斯噪声
J = imnoise(I, 'gaussian', 0, 0.01);
%% 构造巴特沃斯低通滤波器
D0 = [10, 20, 30]; % 截止频率
n = [1, 2, 3]; % 阶数
figure; hold on;
for i = 1:length(D0)
for j = 1:length(n)
% 构造巴特沃斯低通滤波器
H = 1 ./ (1 + (D0(i)./freqspace(size(I,1), 'meshgrid')).^(2*n(j)));
% 在频域中用滤波器对图像进行滤波
F = fft2(J);
F = F .* H;
G = real(ifft2(F));
% 显示滤波结果
subplot(length(D0),length(n),(i-1)*length(n)+j);
imshow(G, []);
title(['D0=', num2str(D0(i)), ', n=', num2str(n(j))]);
end
end
hold off;
%% 显示原始图像、含噪图像、滤波后图像
figure;
subplot(1,3,1); imshow(I, []); title('Original Image');
subplot(1,3,2); imshow(J, []); title('Noisy Image');
subplot(1,3,3); imshow(G, []); title('Filtered Image');
```
上述代码中,使用`imread`函数读入图像,使用`imnoise`函数添加高斯噪声。接着,使用`freqspace`函数生成频率域网格,并根据不同的截止频率和阶数构造巴特沃斯低通滤波器。使用`fft2`函数将含噪图像变换到频域,并与滤波器相乘,最后使用`ifft2`函数将滤波结果变换回图像空间域。最后,使用`subplot`函数将不同的滤波结果显示在同一张图中,方便对比和分析。
阅读全文
相关推荐


















