4、频域降噪原理:傅里叶变换与小波变换基础、频域滤波(低通、带阻)、DCT域降噪
聊频域降噪之前,我想先问一个问题:你平时在时域里做滤波,是不是总觉得有些噪声和细节纠缠在一起,怎么调都分不开?
我早年做一款低照度IPC时也遇到过这问题。空域滤波调重了,细节全糊;调轻了,噪声还在。后来我意识到——换个角度看问题,也许就豁然开朗了。这个“换个角度”,就是频域。
4.1 为什么要去频域?
时域里,像素值是随空间位置变化的。频域里,我们看的是图像中灰度变化的“快慢”。
- 低频:图像中平坦区域、缓慢变化的背景。
- 高频:边缘、纹理细节,以及——噪声。
说白了,噪声和细节在频域里都挤在高频段。但它们的分布特性不一样。细节通常有方向性、有结构,而噪声是随机的、无规律的。这就是频域降噪能比空域做得更精细的原因。
核心认知:频域降噪不是“一刀切”地把高频全砍掉,而是根据噪声和信号在频域的不同分布,做选择性处理。
4.2 傅里叶变换:从空间到频率的“翻译官”
傅里叶变换,就是把图像从空间域映射到频率域。对于离散图像,我们用的是离散傅里叶变换(DFT)。
公式我就不推了,你记住一个直观理解就行:
傅里叶变换把图像分解成不同频率、不同方向的正弦波分量。每个分量有幅度和相位。
- 幅度谱:告诉我们图像里各个频率成分的“能量”有多大。
- 相位谱:决定了这些频率成分在空间上的位置。
我刚开始做频域滤波时,犯过一个低级错误——只保留幅度谱,把相位谱扔了。结果重建出来的图像完全看不出原样。相位信息对图像结构至关重要,千万别丢。
实战技巧:在安防监控中,我们通常对图像分块做FFT(快速傅里叶变换),而不是整图做。因为整图FFT会把全局频率混在一起,局部噪声反而不好处理。我习惯用32x32或64x64的块大小,步长重叠一半,效果比较稳。
4.3 频域滤波:低通与带阻
傅里叶变换之后,我们就可以在频域里“动手”了。最基础的操作就是滤波。
4.3.1 低通滤波
低通滤波,就是保留低频,抑制高频。说白了就是让图像变“糊”。
- 理想低通:在截止频率处一刀切。但会产生振铃效应,图像边缘出现“鬼影”。我建议你别用。
- 巴特沃斯低通:过渡平滑,振铃少。阶数越高,越接近理想低通。
- 高斯低通:最常用。没有振铃,过渡自然。我项目中90%的低通场景都用它。
| 滤波器类型 | 振铃效应 | 边缘保留 | 推荐场景 |
|---|---|---|---|
| 理想低通 | 严重 | 差 | 不推荐 |
| 巴特沃斯低通 | 中等 | 中等 | 需要控制截止锐度时 |
| 高斯低通 | 无 | 较好 | 通用降噪 |
4.3.2 带阻滤波
带阻滤波,是专门抑制某个频率范围的噪声。比如监控画面里50Hz/60Hz的工频干扰,或者传感器产生的固定模式噪声(FPN)。
我记得有一次做球机项目,画面里总有一条条横纹。时域滤波怎么都去不掉。后来在频域一看,频谱图上对应垂直方向有一排亮斑。用带阻滤波器把那几个频率点一压,横纹立刻消失。那种感觉,真的很爽。
注意:带阻滤波器的带宽要控制好。带宽太窄,抑制不干净;带宽太宽,会连带把有用的图像细节也干掉。我一般从3-5个像素的带宽开始试,逐步收窄。
4.4 小波变换:多分辨率分析利器
傅里叶变换有个硬伤:它只能告诉你图像里有哪些频率成分,但不知道这些频率出现在哪里。小波变换解决了这个问题。
小波变换把图像分解成不同尺度(分辨率)和不同方向的子带:
- LL子带:低频近似,相当于原图的缩略图。
- LH、HL、HH子带:水平、垂直、对角方向的高频细节。
噪声主要分布在高频子带(LH、HL、HH),而且尺度越小(分辨率越高),噪声越明显。
小波降噪的经典流程:
- 对图像做小波分解,得到各层子带。
- 对高频子带做阈值处理(软阈值或硬阈值)。
- 重构图像。
我的经验:小波降噪在低照度场景下特别有效。因为低照度噪声往往分布在多个尺度上,小波的多分辨率特性可以逐层剥离噪声。我常用db4或sym8小波基,分解层数3-4层。再多就容易丢失低频细节。
4.5 DCT域降噪:JPEG背后的功臣
离散余弦变换(DCT),你可能更熟悉它在JPEG压缩里的角色。但DCT在降噪上也有独特优势。
DCT和傅里叶变换类似,但DCT只用余弦函数,没有虚部。计算量更小,能量集中性更好——图像的大部分能量都集中在DCT系数的左上角(低频区)。
DCT域降噪怎么做?
- 把图像分成8x8或16x16的块。
- 对每个块做DCT变换。
- 对高频系数做衰减或置零。
- 反DCT重建。
这和JPEG压缩的量化过程很像。区别在于,JPEG量化是为了压缩码率,而DCT降噪是为了抑制噪声。
避坑指南:DCT分块处理会产生块效应,尤其是降噪强度较大时。我曾经在项目中吃过这个亏——降噪效果很好,但画面出现明显的马赛克感。后来我在块与块之间加了重叠处理(overlap-add),块效应基本消除了。重叠宽度取块大小的1/4比较合适。
4.6 三种频域降噪方法对比
| 方法 | 优势 | 劣势 | 安防适用场景 |
|---|---|---|---|
| 傅里叶(频域滤波) | 实现简单,适合去除周期性噪声 | 无法定位频率位置,全局处理 | 工频干扰、横纹噪声 |
| 小波变换 | 多分辨率,保留边缘好 | 计算量大,小波基选择依赖经验 | 低照度噪声、复杂纹理场景 |
| DCT域降噪 | 计算快,能量集中,易硬件实现 | 块效应,对非平稳噪声效果一般 | 实时性要求高的IPC、SoC平台 |
4.7 本章知识体系
下面这张图,帮你把本章的核心逻辑串起来:
三种方法各有各的脾气。傅里叶适合处理周期性噪声,小波在低照度场景下表现突出,DCT则胜在计算效率。实际项目中,我经常把它们组合着用——比如先用DCT做快速预处理,再用小波做精细降噪。效果往往1+1>2。
一句话总结:频域降噪的本质,是利用变换域把噪声和信号“拉开距离”,然后精准地只对噪声下手。理解了这个,你就能在空域和频域之间自由切换,不再被一种方法束缚。