使用 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 对图像进行频域滤波,并以巴特沃斯高通滤波器为例进行了说明。通过调节滤波器的截止频率和阶数,可以控制滤波器的特性,从而实现不同的图像处理效果。

Matlab 图像频域滤波:使用巴特沃斯高通滤波器

原文地址: https://www.cveoy.top/t/topic/oj2X 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录