【数字图像处理与应用】利用一阶Butterworth低通滤波器进行频域滤波

题目

  1. 给定图像 ‘barb.png’, 利用一阶Butterworth低通滤波器进行频域滤波, 当 D 0 = 10 , 20 , 40 , 80 D_0=10,20,40,80 D0=10,20,40,80 时, 给出相应滤波图像, 并分别以频域和空域的观点解释有关 滤波结果。
    提示:
    (1) 以 ( − 1 ) x + y (-1)^{x+y} (1)x+y 乘以输入图像进行中心变换;
    (2) 直接以FFT2进行傅立叶变换;
    (3) DFT反变换后取实部;
    (4) 以 ( − 1 ) x + y (-1)^{x+y} (1)x+y 乘以(3)中结果, 反中心变换。
    在这里插入图片描述

Matlab代码实现

算法介绍

本算法描述文档旨在说明如何利用一阶 Butterworth 低通滤波器对给定图像进行频域
滤波。通过设置不同的截止频率 D0(取值为 10、20、40 和 80),我们将生成相应的滤波
图像,并从频域和空域的观点解释滤波结果。

算法步骤

  1. 导入图像: 导入待处理的图像 barb.png, 使用 imread 函数将图像读取为矩阵形式。
  2. 灰度化: 使用 im2gray 函数将彩色图像转换为灰度图像。这将使得图像在处理过程 中变为单通道。
  3. 归一化: 使用 im2double 函数将灰度图像的像素值转换为双精度浮点数, 并将像素 值归一化到 [ 0 , 1 ] [0,1] [0,1] 的范围内。
  4. 获取图像尺寸: 使用 size 函数获取灰度图像的尺寸, 将宽度和高度分别存储为 M M M N N N
  5. 中心变换: 将归一化后的灰度图像与一个由 ( − 1 ) x + y (-1)^{x+y} (1)x+y 构成的矩阵相乘, 其中 x x x y y y 分别表示像素的横坐标和纵坐标。这个步骤将图像从空域中心移到频域中心。
  6. 傅立叶变换: 使用 f f t 2 \mathrm{fft} 2 fft2 函数对中心变换后的图像进行二维傅立叶变换, 得到频域中 的复数表示。
  7. 生成 Butterworth 低通滤波器: 根据给定的截止频率 D 0 D_0 D0, 生成一个 Butterworth 低 通滤波器 H 。 H H 。 H HH 的大小与图像的尺寸相同, 其中每个位置 ( u , v ) (u, v) (u,v) 处的值为 1 1 + ( u D 0 ) 2 + ( v D 0 ) 2 \frac{1}{1+\left(\frac{u}{D_0}\right)^2+\left(\frac{v}{D_0}\right)^2} 1+(D0u)2+(D0v)21
  8. 滤波: 将傅立叶变换结果与 Butterworth 滤波器进行逐元素相乘, 得到滤波后的频域 结果。
  9. 反中心变换: 将滤波后的频域结果再次与一个由 ( − 1 ) x + y (-1)^{x+y} (1)x+y 构成的矩阵相乘, 以进行反 中心变换。
  10. 空域结果: 将反中心变换后的结果取实部, 并将像素值恢复到原始范围, 得到空域中 的滤波结果。
  11. 输出滤波后的空域图像。

Matlab代码

img = imread('barb.png');
img_gray = im2gray(img);
img_gray = im2double(img_gray);
[M, N] = size(img_gray);

figure('Name', '频域滤波结果');

D0_values = [10, 20, 40, 80];

for i = 1:length(D0_values)
    D0 = D0_values(i);
    
    % 中心变换
    centered_img = img_gray .* (-1).^(meshgrid(1:N) + meshgrid(1:M)');
    
    % 傅立叶变换
    F = fft2(centered_img);
    
    % 生成Butterworth低通滤波器
    H = 1 ./ (1 + (meshgrid(-(N/2):(N/2-1)).^2 + meshgrid(-(M/2):(M/2-1)).^2) / D0^2);
    
    % 滤波
    filtered_img = real(ifft2(F .* H));
    
    % 反中心变换
    filtered_img = filtered_img .* (-1).^(meshgrid(1:N) + meshgrid(1:M)');
    
    % 显示频域结果
    subplot(2, length(D0_values), i);
    imshow(log(1 + abs(fftshift(F))), []);
    title(['频域 (D0 = ' num2str(D0) ')']);
    
    % 显示空域结果
    subplot(2, length(D0_values), i + length(D0_values));
    imshow(filtered_img, []);
    title(['空域 (D0 = ' num2str(D0) ')']);
end

运行结果

在这里插入图片描述

  • 根据上图的对比,我们可以看出使用一阶 Butterworth 低通滤波器在频域滤波时,D0的值对滤波效果有显著影响。具体来说,随着 D0
    值的增大,滤波后的图像变得更加清晰。这是因为随着 D0 的增大,滤掉的高频成分变得更少,因此图像的清晰度得以提高。
  • 在空域上,滤波器的作用是减少图像中的高频噪声。然而,D0 的大小选择也会影响到图像本身的高频成分丢失的程度。如果 D0
    选择得过小,图像丢失的细节就会更多。因此,在使用滤波器的时候,我们需要根据实际情况选择合适的 D0 值,以达到最佳的滤波效果。
  • 在频域上,经过中心变换后的频域图像中心部分是低频部分,这部分内容会被滤波器保留下来。而越往外的高频部分则越容易被滤掉。因此,滤波后的频域图像内容基本上集中在中心附近这也是为什么随着
    D0 的增大,图像清晰度会提高的原因。
  • 总的来说,一阶 Butterworth 低通滤波器在频域滤波中起着重要的作用。通过合理选择 D0
    值,我们可以有效地减少图像中的高频噪声,同时保留图像的主要信息。

代码及相关文档下载

https://download.csdn.net/download/weixin_66397563/88067734

声明:未经允许,请勿转载

猜你喜欢

转载自blog.csdn.net/weixin_66397563/article/details/131829177