图片里的高频和低频是什么?用华为云码道开发 OpenCV 傅里叶频谱分析工具

前面已经做过图像滤波、锐化、边缘检测,这些操作其实都和一个概念有关:

图像频率。

这次我用华为云码道辅助开发了一个基于 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 可以很直观地看到:

低频集中在中心,高频分布在外围。

这篇也把之前很多图像处理操作背后的一个核心概念串了起来:

平滑是在减少高频,锐化是在增强高频,而傅里叶变换则让这些频率成分真正变得可见。

下一篇可以继续做一个不重复的方向:

图片纹理朝哪个方向最明显?用华为云码道开发 OpenCV Gabor 滤波纹理分析工具

相关推荐
蓝宝石的傻话1 小时前
MiBeeNVR 的大脑视觉AI:MiBeeVision Lite 发了第一个可用版本
人工智能·计算机视觉·目标跟踪
晨间晓1 小时前
图片里的阴影能不能减弱?用华为云码道开发 OpenCV 光照校正工具
人工智能·opencv·华为云
ck0135791 小时前
AI 图片放大原理与实践:2 倍、4 倍放大有什么区别?
图像处理·人工智能·深度学习·计算机视觉
潜心一志1 小时前
图像预处理—— 图像的变换与校正(理论)
学习·计算机视觉
熊猫钓鱼>_>2 小时前
Kotlin Multiplatform for OpenHarmony 实战:kotlinx-serialization JSON 适配
开发语言·华为·kotlin·华为云·json·harmonyos·code
a puppy slide 葱14 小时前
ENAS | 基于参数共享的高效神经网络架构搜索
论文阅读·人工智能·深度学习·神经网络·机器学习·计算机视觉·神经网络架构搜索
晨间晓16 小时前
图片里的细小噪点怎么平滑?用华为云码道开发 OpenCV 图像滤波对比工具
人工智能·opencv·华为云
原子延迟18 小时前
证件照压缩到20k,原图和电子版的3种方法(2026)
图像处理·人工智能·计算机视觉
陈嘿萌18 小时前
CVPR 2026|CHAL:面向运动红外小目标检测的因果引导分层异常感知学习
图像处理·人工智能·深度学习·计算机视觉·学术研究与理论基础