前面已经做过图像滤波、锐化、边缘检测,这些操作其实都和一个概念有关:
图像频率。
这次我用华为云码道辅助开发了一个基于 OpenCV 的 傅里叶频谱分析工具,把图片从空间域转换到频域,直观看一张图片里的低频和高频能量到底是怎么分布的。
1. 这次工具做什么?
主要功能包括:
- 上传 JPG / PNG 图片
- 自动转换为灰度图
- 使用二维傅里叶变换
- 将低频移动到频谱中心
- 生成 Magnitude Spectrum
- 调节 Low Frequency Radius Ratio
- 统计 Low Frequency Ratio
- 统计 High Frequency Ratio
- 统计 Total Frequency Energy
- 支持下载频谱图
整体流程:
图片
→ Grayscale
→ DFT
→ FFT Shift
→ Magnitude Spectrum
→ Frequency Energy Analysis

2. 什么是图像里的"频率"?
这里的频率并不是声音里的频率,而是:
图像亮度在空间中变化的快慢。
例如:
天空
湖面
大面积平滑区域
像素变化比较慢,一般属于:
Low Frequency,低频。
而:
狗狗毛发
草地
树叶
建筑边缘
像素变化比较快,更偏向:
High Frequency,高频。
所以简单理解:
低频描述整体结构,高频描述细节和边缘。
3. 傅里叶变换怎么做?
首先把图片转成灰度图:
gray = cv2.cvtColor( image, cv2.COLOR_BGR2GRAY)
然后执行二维 DFT:
dft = cv2.dft( np.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT)
经过这一步后,图片就从原来的:
Spatial Domain
转换到了:
Frequency Domain
我们就可以分析不同频率成分的强弱。
4. 为什么还要做 fftshift?
原始 DFT 的低频部分通常位于频谱四个角。
为了方便观察,这次使用:
dft_shift = np.fft.fftshift( dft, axes=(0, 1))
把低频移动到频谱图中心。
所以页面中的 Frequency Spectrum 可以看到:
中央区域最亮。
中心越近:
频率越低。
距离中心越远:
频率越高。
这样查看频率结构会直观很多。
5. Frequency Spectrum 怎么生成?
傅里叶结果包含实部和虚部,所以先计算幅值:
magnitude = cv2.magnitude( dft_shift[:, :, 0], dft_shift[:, :, 1])
然后通过对数变换压缩显示范围:
spectrum = 20 * np.log( magnitude + 1)
最后归一化到:
0~255
生成页面中的 Frequency Spectrum。

图中越亮的位置,表示对应空间频率的响应越强。
6. Low / High Frequency 怎么划分?
这次采用一个简单的圆形区域来划分。
页面设置:
Low Frequency Radius Ratio = 0.15
以频谱中心为圆心,根据图片较短边计算低频半径。
本次实际半径约:
142.95 px
圆形内部作为:
Low Frequency
外面的部分作为:
High Frequency
这样就可以分别统计两个区域的能量。
7. 真实测试结果
这次继续使用狗狗公园图片。
图片尺寸:
1650 × 953
实际结果:
- Low Frequency Radius Ratio:0.15
- Low Frequency Ratio:99.68%
- High Frequency Ratio:0.32%
- Total Frequency Energy:6.3816 × 10¹⁶
- Low Frequency Radius:约 142.95 px
可以看到:
低频能量占据了绝大部分。
8. 为什么低频能量会达到 99.68%?
看到:
99.68%
第一感觉可能会觉得太高。
但这是正常的。
因为直接对原始灰度图做傅里叶变换时:
平均亮度
大面积颜色变化
天空
湖面
主体的大尺度结构
都会产生很强的低频能量。
相比之下,毛发、草地、树叶这些高频细节虽然视觉上很明显,但总能量并不一定高。
所以:
High Frequency Ratio = 0.32%
并不代表这张图片没有细节。
它只是说明:
从总频域能量来看,低频部分占据主导。
9. 它和之前的滤波、锐化有什么关系?
前面做过:
Bilateral Filter
它会减少很多细小纹理,本质上就是在一定程度上:
削弱高频。
后来又做了:
Unsharp Mask
它通过提取原图和模糊图之间的差异:
增强高频细节。
而这一篇的 Fourier Spectrum 不再直接修改图片,而是:
把这些低频和高频直接展示出来。
所以三者正好可以串起来:
Blur
→ 抑制部分高频
Sharpen
→ 增强高频
Fourier Spectrum
→ 观察频率能量分布
10. 总结
这次用华为云码道辅助开发了一个:
OpenCV 傅里叶频谱分析工具。
核心流程:
Grayscale
→ DFT
→ FFT Shift
→ Magnitude
→ Energy
→ Low / High Frequency Analysis
本次真实测试结果:
- Radius Ratio:0.15
- Low Frequency Ratio:99.68%
- High Frequency Ratio:0.32%
- Total Frequency Energy:6.3816 × 10¹⁶
通过 Frequency Spectrum 可以很直观地看到:
低频集中在中心,高频分布在外围。
这篇也把之前很多图像处理操作背后的一个核心概念串了起来:
平滑是在减少高频,锐化是在增强高频,而傅里叶变换则让这些频率成分真正变得可见。
下一篇可以继续做一个不重复的方向: