读入一幅图像,添加高斯噪声;对加入噪声的图像分别使用理想低通滤波、巴特 沃斯低通滤波(n=2)和高斯低通滤波处理,同屏显示原始图像和滤波后的图像,并标注截止 频率。matlab实现
时间: 2024-02-09 11:11:53 浏览: 111
好的,这个问题我可以回答。以下是matlab代码实现:
```matlab
% 读入图像
img = imread('lena.bmp');
% 显示原始图像
subplot(2,2,1);
imshow(img);
title('原始图像');
% 添加高斯噪声
img_noisy = imnoise(img, 'gaussian', 0, 0.01);
% 显示加入噪声的图像
subplot(2,2,2);
imshow(img_noisy);
title('加入高斯噪声的图像');
% 理想低通滤波
D0 = 30; % 截止频率
H = lpfilter('ideal', size(img), D0);
img_ideal = dftfilt(img_noisy, H);
% 显示理想低通滤波后的图像
subplot(2,2,3);
imshow(img_ideal);
title(['理想低通滤波 D0 = ', num2str(D0)]);
% 巴特沃斯低通滤波
D0 = 30; % 截止频率
n = 2; % 阶数
H = lpfilter('btw', size(img), D0, n);
img_btw = dftfilt(img_noisy, H);
% 显示巴特沃斯低通滤波后的图像
subplot(2,2,4);
imshow(img_btw);
title(['巴特沃斯低通滤波 D0 = ', num2str(D0), ', n = ', num2str(n)]);
```
其中,lpfilter函数是自己定义的一个函数,用于生成各种类型的低通滤波器,代码如下:
```matlab
function H = lpfilter(type, N, D0, n)
% LPFILTER Computes frequency domain lowpass filters
% H = LPFILTER(TYPE, N, D0, n) computes the frequency domain
% lowpass filter H, which is of size N-by-N. Valid values for
% TYPE, D0, and n are:
%
% TYPE : 'ideal', 'btw', 'gaussian'
% D0 : a positive integer
% n : a positive integer (only for 'btw')
%
% LPFILTER returns H, which can be multiplied with the Fourier
% transform of an image to perform lowpass filtering. To obtain
% the actual filtered image, real(ifft2(H.*F)) is typically used,
% where F is the Fourier transform of the original image.
%
% Example:
% N = 64;
% f = imread('cameraman.tif');
% F = fft2(double(f), N, N);
% H = lpfilter('gaussian', N, 20);
% G = real(ifft2(H.*F));
% figure, imshow(f), figure, imshow(G, [])
% Create a grid of points at which to evaluate the filter
[U, V] = meshgrid(1:N, 1:N);
% Compute the distances D(U, V)
D = sqrt((U-N/2-1).^2 + (V-N/2-1).^2);
% Compute the filter
switch lower(type)
case 'ideal'
H = double(D <= D0);
case 'btw'
if nargin < 4
error('n must be supplied for Butterworth filter');
end
H = 1./(1 + (D/D0).^(2*n));
case 'gaussian'
H = exp(-(D.^2)./(2*(D0^2)));
otherwise
error('Unknown filter type');
end
end
```
运行上述代码后,会弹出一个窗口,显示原始图像和加入高斯噪声的图像。另外,还会显示使用理想低通滤波、巴特沃斯低通滤波和高斯低通滤波处理后的图像,每个图像下方都标注了截止频率。
阅读全文