matlab选择任意一副图像,对其进行傅里叶变换,在频率域中实现二阶butterworth低通滤波器的平滑作用,截止频率任意设定。显示原始图像和滤波图像。
时间: 2023-11-27 08:53:28 浏览: 81
下面是实现该功能的 Matlab 代码:
```matlab
% 选择任意一幅图像
img = imread('example.jpg');
% 进行傅里叶变换
f = fft2(double(img));
fshift = fftshift(f);
% 设定截止频率和滤波器阶数
D0 = 50; % 截止频率
n = 2; % 滤波器阶数
% 构造二阶butterworth低通滤波器
[M,N] = size(img);
u = 0:(M-1);
v = 0:(N-1);
idx = find(u>M/2);
u(idx) = u(idx)-M;
idy = find(v>N/2);
v(idy) = v(idy)-N;
[V,U] = meshgrid(v,u);
D = sqrt(U.^2+V.^2);
H = 1./(1+(D./D0).^(2*n));
% 在频率域中实现滤波器的平滑作用
G = H.*fshift;
% 反傅里叶变换得到滤波后的图像
Gshift = ifftshift(G);
g = real(ifft2(Gshift));
% 显示原始图像和滤波图像
figure;
subplot(1,2,1);imshow(img);title('原始图像');
subplot(1,2,2);imshow(g,[]);title('滤波后图像');
```
其中,`example.jpg` 是一个任意的图像文件名,截止频率 `D0` 可以根据需要进行调整,滤波器阶数 `n` 也可以根据需要进行调整。运行该程序后,将会显示原始图像和滤波后的图像。
阅读全文