HoRain云--傅里叶变换:图像处理的频率魔法

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

好的,这是一个非常核心的图像处理概念。简单来说,傅里叶变换是将图像从“空间域”(我们看到的样子)转换到“频率域”的数学工具,而频率域滤波则是在这个频率域中,通过增强或抑制特定频率成分来修改图像特性的技术。
下面我将为你详细解析这两个概念及其应用。
📊 核心概念对比:空间域 vs 频率域
|
维度 |
空间域 |
频率域 |
|---|---|---|
|
视角 |
像素的排列和灰度值 |
图像中不同频率“波”的组成和强度 |
|
横坐标 |
像素位置 (x, y) |
频率 (u, v) |
|
纵坐标 |
像素的灰度/颜色强度 |
该频率成分的幅度和相位 |
|
操作 |
直接对像素值进行卷积等运算 |
修改频率成分(滤波)后,再转换回空间域 |
|
直观理解 |
我们看到图像本身 |
图像的“配方”或“组成成分表” |
🔬 傅里叶变换:从空间到频率的桥梁
核心思想
任何复杂的图像(信号)都可以分解为一系列不同频率、幅度和相位的正弦波(或余弦波)的叠加。
-
低频成分:对应图像中灰度变化缓慢的区域,如大面积的天空、墙面,决定了图像的整体轮廓和背景。
-
高频成分:对应图像中灰度剧烈变化的区域,如边缘、纹理、细节、噪声。
关键输出:频谱图
对图像进行二维傅里叶变换后,会得到一个复数数组。我们通常将其可视化为一幅频谱图。
-
中心:代表最低频率(DC分量,即图像的平均亮度)。
-
远离中心:代表越高频率的成分。
-
亮度:该频率成分的幅度(强度)。
频谱图示例:
空间域图像(如一个矩形) → 傅里叶变换 → 频率域频谱(十字形亮线)
在图像处理中的计算步骤
-
将图像转换为浮点类型。
-
应用傅里叶变换(如
np.fft.fft2)。 -
将零频率分量移到频谱中心(
np.fft.fftshift)。 -
计算幅度谱(
np.abs)并进行对数缩放以便显示。 -
进行滤波操作(在频率域乘法)。
-
将零频率分量移回角落,并进行逆傅里叶变换(
np.fft.ifft2)。 -
取实部并转换回图像格式。
🎛️ 频率域滤波:修改图像的“配方”
滤波的核心是在频率域,用一个滤波器函数 H(u, v) 乘以图像的傅里叶变换 F(u, v),即 G(u, v) = H(u, v) × F(u, v),然后再变回空间域。
1. 低通滤波
目的:允许低频通过,抑制高频。用于平滑图像、去噪、模糊。
效果:图像变模糊,细节和边缘被削弱。
常见滤波器:
-
理想低通滤波器:在频率域画一个圆,圆内通过(1),圆外截止(0)。会产生“振铃效应”。
-
巴特沃斯低通滤波器:过渡平滑,无振铃效应,更常用。其公式为:
H(u, v) = 1 / [1 + (D(u, v)/D0)^(2n)],其中D0是截止频率,n是阶数。 -
高斯低通滤波器:具有高斯分布形状,过渡最平滑。公式为:
H(u, v) = e^(-D^2(u, v) / (2 * D0^2))。
2. 高通滤波
目的:允许高频通过,抑制低频。用于锐化图像、增强边缘。
效果:突出边缘和细节,但背景(低频)变暗。
常见滤波器:
-
理想高通滤波器:与理想低通相反。
-
巴特沃斯高通滤波器:
H(u, v) = 1 / [1 + (D0/D(u, v))^(2n)]。 -
高斯高通滤波器:
H(u, v) = 1 - e^(-D^2(u, v) / (2 * D0^2))。
3. 带通与带阻滤波
-
带通滤波:只允许特定频率范围内的成分通过。可用于提取特定纹理。
-
带阻滤波:阻止特定频率范围内的成分通过。最典型的应用是去除周期性噪声(如扫描图像中的摩尔纹、传感器噪声)。
🛠️ 频率域滤波 vs 空间域滤波
|
特性 |
频率域滤波 |
空间域滤波(卷积) |
|---|---|---|
|
原理 |
修改频率成分 |
邻域像素加权平均 |
|
计算效率 |
对于大核滤波器更高效(FFT算法) |
对于小核滤波器更直接、快速 |
|
直观性 |
从全局频率角度理解操作 |
从局部像素角度理解操作 |
|
设计灵活性 |
易于设计任意形状的滤波器 |
核的设计受限于小尺寸 |
|
典型应用 |
去除周期性噪声、精确频率选择 |
日常模糊、锐化、边缘检测 |
重要关系:根据卷积定理,空间域的卷积运算等价于频率域的乘法运算。这意味着一个大的空间卷积核(如 50x50 的高斯模糊)在频率域中执行会快得多。
💻 实践示例:使用Python进行频率域滤波
import cv2
import numpy as np
import matplotlib.pyplot as plt
def frequency_domain_filtering(image_path, filter_type='lowpass', D0=30, n=2):
# 1. 读取图像并转换为灰度图
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
# 2. 傅里叶变换并移到中心
dft = np.fft.fft2(img)
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum = 20 * np.log(np.abs(dft_shift) + 1) # 幅度谱(用于显示)
# 3. 创建滤波器
rows, cols = img.shape
crow, ccol = rows // 2, cols // 2
u, v = np.meshgrid(np.arange(cols) - ccol, np.arange(rows) - crow)
D = np.sqrt(u**2 + v**2) # 到中心的距离
if filter_type == 'lowpass':
# 巴特沃斯低通滤波器
H = 1 / (1 + (D / D0)**(2*n))
elif filter_type == 'highpass':
# 巴特沃斯高通滤波器
H = 1 / (1 + (D0 / D)**(2*n))
elif filter_type == 'bandstop':
# 带阻滤波器(去除特定频率环)
W = 10 # 带宽
H = 1 / (1 + ((D*W) / (D**2 - D0**2 + 1e-6))**(2*n))
else:
H = np.ones((rows, cols))
# 4. 应用滤波器
filtered_dft_shift = dft_shift * H
# 5. 逆变换回空间域
filtered_dft = np.fft.ifftshift(filtered_dft_shift)
img_back = np.fft.ifft2(filtered_dft)
img_back = np.abs(img_back).astype(np.uint8)
# 6. 显示结果
plt.figure(figsize=(12, 8))
plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray'), plt.title('原始图像')
plt.subplot(2, 3, 2), plt.imshow(magnitude_spectrum, cmap='gray'), plt.title('幅度谱')
plt.subplot(2, 3, 3), plt.imshow(H, cmap='gray'), plt.title('滤波器 (频率域)')
plt.subplot(2, 3, 4), plt.imshow(img_back, cmap='gray'), plt.title('滤波后图像')
# 显示滤波后的频谱
filtered_magnitude = 20 * np.log(np.abs(filtered_dft_shift) + 1)
plt.subplot(2, 3, 5), plt.imshow(filtered_magnitude, cmap='gray'), plt.title('滤波后频谱')
plt.tight_layout()
plt.show()
return img_back
# 使用示例
# filtered_image = frequency_domain_filtering('input.jpg', filter_type='lowpass', D0=30)
🎯 典型应用场景
-
图像去噪:
-
高斯/周期噪声:使用低通滤波器非常有效。
-
周期性条纹噪声:使用带阻滤波器,在频谱图上找到对应的亮线(噪声频率)并将其抑制。
-
-
图像锐化与边缘增强:
-
使用高通滤波器突出边缘。但注意,单纯高通滤波会使背景变暗,常与原始图像叠加(高频增强滤波)。
-
-
纹理分析与分割:
-
不同纹理具有不同的频率特征。通过带通滤波器可以分离出特定纹理区域。
-
-
图像压缩(如JPEG):
-
JPEG压缩的核心是将图像分块后进行离散余弦变换(DCT,一种实数的傅里叶变换),然后舍弃高频系数(人眼不敏感)来实现压缩。
-
-
图像融合与混合:
-
将两幅图像的低频部分和高频部分分别融合,可以得到自然过渡的混合效果。
-
💡 关键要点与注意事项
-
为什么选择频率域?
-
全局性操作:可以一次性处理整个图像的特定频率成分。
-
物理意义明确:噪声、边缘、纹理往往对应特定的频率范围。
-
计算优势:对于大尺寸滤波器,通过FFT计算比空间卷积更快。
-
-
振铃效应:
-
使用“理想”滤波器(锐利截止)会在空间域产生振铃伪影(图像边缘出现波纹)。
-
解决方案:使用过渡平滑的滤波器(如巴特沃斯、高斯型)。
-
-
相位的重要性:
-
图像的傅里叶变换包含幅度谱和相位谱。
-
幅度谱决定图像中有哪些频率成分。
-
相位谱决定这些频率成分在空间中的位置。相位信息对图像结构至关重要,丢弃相位信息会导致图像无法识别。
-
-
边界效应:
-
傅里叶变换默认图像是周期性的。图像左右/上下边界的不连续会在频谱中引入额外的高频分量。
-
解决方法:在变换前对图像进行窗函数处理(如汉宁窗)或镜像填充。
-
总结:傅里叶变换为我们提供了观察和处理图像的另一个强大维度——频率域。频率域滤波让我们能够从“成分”的角度精准地操控图像,无论是平滑、锐化,还是去除特定噪声,都变得直观而高效。它是现代图像处理、压缩、分析不可或缺的基石工具。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐


所有评论(0)