MATLAB中图片的傅里叶频谱布特沃斯低通滤波的实现
时间: 2023-09-12 07:03:22 浏览: 78
频域滤波 傅立叶变换 频域高低通滤波 梯形高低通滤波 布特沃斯高低通滤波 指数高低通滤波.rar
以下是MATLAB中图片的傅里叶频谱布特沃斯低通滤波的实现步骤:
1. 读取图像:使用imread函数读取图像,可以将图像转换为灰度图像。
2. 傅里叶变换:使用fft2函数对图像进行二维傅里叶变换,得到图像的频域表示。
3. 中心化频谱:使用fftshift函数将频谱移到中心位置,方便后续滤波操作。
4. 布特沃斯低通滤波器:根据布特沃斯低通滤波器的公式,生成滤波器,调整滤波器的截止频率和阶数,可以控制滤波器的性能。
5. 滤波:将生成的滤波器与中心化后的频谱相乘,得到滤波后的频谱。
6. 反变换:使用ifft2函数对滤波后的频谱进行反傅里叶变换,得到滤波后的图像。
7. 显示图像:使用imshow函数显示原始图像和滤波后的图像。
以下是MATLAB代码实现:
```
% 读取图像
img = imread('test.jpg');
% 转换为灰度图像
img_gray = rgb2gray(img);
% 傅里叶变换
img_fft = fft2(img_gray);
% 中心化频谱
img_fft_shift = fftshift(img_fft);
% 图像大小
[n, m] = size(img_gray);
% 布特沃斯低通滤波器
D0 = 50; % 截止频率
n = 2; % 阶数
H = zeros(n, m);
for i = 1:n
for j = 1:m
D = sqrt((i-n/2-1)^2 + (j-m/2-1)^2);
H(i,j) = 1 / (1 + (D0/D)^(2*n));
end
end
% 滤波
img_fft_filter = img_fft_shift .* H;
% 反变换
img_ifft = ifft2(ifftshift(img_fft_filter));
% 显示图像
figure;
subplot(1,2,1);
imshow(img_gray);
title('原始图像');
subplot(1,2,2);
imshow(abs(img_ifft), []);
title('滤波后的图像');
```
在代码中,我们使用了布特沃斯低通滤波器对图像进行了滤波,可以通过调整截止频率和阶数来控制滤波器的性能。在滤波后,我们使用ifft2函数对滤波后的频谱进行反变换,得到滤波后的图像。最后使用imshow函数将原始图像和滤波后的图像显示出来,可以对比两者的差异。
阅读全文