Matlab 图像频域滤波:使用巴特沃斯高通滤波器
使用 Matlab 实现图像频域滤波:巴特沃斯高通滤波器
本教程将引导你使用 Matlab 代码实现对图像进行频域滤波,并使用巴特沃斯高通滤波器作为示例。
1. 读取图像
首先,我们需要读取图像文件。这里使用 cameraman.tif 作为示例。
I = imread('cameraman.tif');
I = double(I);
2. 构造巴特沃斯高通滤波器
我们需要构造不同截止频率 D0 和不同阶数 n 的巴特沃斯高通滤波器。
D0_list = [10, 20, 30];
n_list = [2, 4, 6];
for i = 1:length(D0_list)
for j = 1:length(n_list)
D0 = D0_list(i);
n = n_list(j);
[H, W] = size(I);
u = 0:(H-1);
v = 0:(W-1);
idx = find(u > H/2);
u(idx) = u(idx) - H;
idy = find(v > W/2);
v(idy) = v(idy) - W;
[V, U] = meshgrid(v, u);
D = sqrt(U.^2 + V.^2);
H = 1./(1 + (D0./D).^(2*n));
%% 在频域中,用构造的巴特沃斯高通滤波器分别对图像进行滤波
F = fft2(I);
F_filtered = F.*H;
I_filtered = real(ifft2(F_filtered));
%% 将滤波结果变换回图像空间域,并显示原始图像、高通滤波后图像
figure;
subplot(1,2,1); imshow(uint8(I)); title('原始图像');
subplot(1,2,2); imshow(uint8(I_filtered)); title(sprintf('D0=%d, n=%d的高通滤波后图像', D0, n));
end
end
3. 频域滤波
我们将图像转换为频域,并利用构造的巴特沃斯高通滤波器对图像进行滤波。
F = fft2(I);
F_filtered = F.*H;
I_filtered = real(ifft2(F_filtered));
4. 图像空间域转换与显示
将滤波后的图像转换回空间域,并显示原始图像和滤波后的图像。
figure;
subplot(1,2,1); imshow(uint8(I)); title('原始图像');
subplot(1,2,2); imshow(uint8(I_filtered)); title(sprintf('D0=%d, n=%d的高通滤波后图像', D0, n));
5. 分析实验结果
实验结果显示,随着截止频率 D0 的增加,高通滤波后图像中的高频部分越来越明显,而低频部分则越来越模糊。同时,随着阶数 n 的增加,高通滤波器的陡峭程度也增加,滤波后图像中的高频部分更为明显,但也会出现更多的伪影。因此,需要根据实际应用需求选择合适的截止频率和阶数。
总结
本教程演示了如何使用 Matlab 对图像进行频域滤波,并以巴特沃斯高通滤波器为例进行了说明。通过调节滤波器的截止频率和阶数,可以控制滤波器的特性,从而实现不同的图像处理效果。
原文地址: https://www.cveoy.top/t/topic/oj2X 著作权归作者所有。请勿转载和采集!