题目
- 给定图像 ‘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),我们将生成相应的滤波
图像,并从频域和空域的观点解释滤波结果。
算法步骤
- 导入图像: 导入待处理的图像 barb.png, 使用 imread 函数将图像读取为矩阵形式。
- 灰度化: 使用 im2gray 函数将彩色图像转换为灰度图像。这将使得图像在处理过程 中变为单通道。
- 归一化: 使用 im2double 函数将灰度图像的像素值转换为双精度浮点数, 并将像素 值归一化到 [ 0 , 1 ] [0,1] [0,1] 的范围内。
- 获取图像尺寸: 使用 size 函数获取灰度图像的尺寸, 将宽度和高度分别存储为 M M M 和 N N N 。
- 中心变换: 将归一化后的灰度图像与一个由 ( − 1 ) x + y (-1)^{x+y} (−1)x+y 构成的矩阵相乘, 其中 x x x 和 y y y 分别表示像素的横坐标和纵坐标。这个步骤将图像从空域中心移到频域中心。
- 傅立叶变换: 使用 f f t 2 \mathrm{fft} 2 fft2 函数对中心变换后的图像进行二维傅立叶变换, 得到频域中 的复数表示。
- 生成 Butterworth 低通滤波器: 根据给定的截止频率 D 0 D_0 D0, 生成一个 Butterworth 低 通滤波器 H 。 H H 。 H H。H 的大小与图像的尺寸相同, 其中每个位置 ( 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 。
- 滤波: 将傅立叶变换结果与 Butterworth 滤波器进行逐元素相乘, 得到滤波后的频域 结果。
- 反中心变换: 将滤波后的频域结果再次与一个由 ( − 1 ) x + y (-1)^{x+y} (−1)x+y 构成的矩阵相乘, 以进行反 中心变换。
- 空域结果: 将反中心变换后的结果取实部, 并将像素值恢复到原始范围, 得到空域中 的滤波结果。
- 输出滤波后的空域图像。
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
声明:未经允许,请勿转载