1. 项目概述:为什么需要关注不同架构的去雾结果?
在图像处理领域,去雾是一个经典且极具挑战性的任务。无论是自动驾驶系统需要穿透雨雾看清路况,还是遥感卫星需要消除大气干扰获取清晰的地表信息,亦或是我们手机拍照时想一键还原蓝天白云,背后都离不开有效的去雾算法。然而,一个常被新手甚至部分从业者忽略的关键点是:“去雾”并非一个有着标准答案的单一问题,不同的算法架构(或者说不同的物理/数学模型假设)会导向截然不同的结果。你可能会发现,同一张雾图,用A方法处理后色彩鲜艳但细节模糊,用B方法处理后细节锐利但颜色失真。这背后的原因,正是不同算法架构所基于的核心先验与优化目标不同。
因此,仅仅知道“如何调用一个去雾函数”是远远不够的。作为开发者或研究者,我们必须深入理解主流去雾架构的内在逻辑、优势与局限,才能在实际项目中做出明智的选择。这篇文章,我将结合自己多年的图像算法工程经验,为你系统梳理从传统物理模型到现代深度学习的主流去雾架构,并通过大量实测对比,总结它们的结果特性、适用场景与背后的“为什么”。无论你是刚入门的新手,还是希望深化理解的工程师,这份总结都能帮你建立起清晰的决策框架。
2. 核心去雾架构原理深度解析
去雾算法的核心目标是从观测到的有雾图像I中,恢复出清晰的无雾图像J。这个过程通常基于大气散射模型:I(x) =J(x)t(x) +A(1 -t(x))。其中,t(x) 是透射率图,A是全球大气光值。所有去雾架构的差异,本质上都源于对t(x) 和A的估计方法不同。
2.1 基于先验知识的传统架构
这类方法不依赖大数据训练,其有效性完全依赖于对清晰图像统计特性的先验假设,鲁棒性一般但可解释性极强。
2.1.1 暗通道先验架构这是最著名、影响最深远的传统方法,由何恺明等人提出。其核心假设是:在绝大多数非天空的局部区域里,至少有一个颜色通道的像素值非常低(接近于0)。这个“非常低”的值,就被称为暗通道。
- 架构流程:
- 暗通道计算:对于输入图像I,其暗通道I_dark(x) = min_{c∈{r,g,b}}( min_{y∈Ω(x)} ( I^c(y) ) )。即,先取一个局部块(如15x15)内每个颜色通道的最小值,再在所有颜色通道中取最小值。
- 大气光A估计:通常选取暗通道图中亮度最高的前0.1%的像素点,对应回原图I中这些点的像素平均值作为A。
- 透射率t估计:假设在局部区域内透射率恒定,根据大气散射模型和暗通道先验,可以推导出t(x) ≈ 1 - ω * min_{c}( min_{y∈Ω(x)} ( I^c(y) / A^c ) )。其中 ω (0<ω≤1) 是一个保留少量雾感的因子,通常取0.95。
- 图像复原:根据估计出的A和t(x),代入模型J(x) = (I(x) -A) / max(t(x), t0 ) +A进行求解。t0是一个下限(如0.1),防止分母过小。
- 结果特点与“为什么”:
- 优势:对于自然景观、城市街景等符合暗通道先验的图像,去雾效果显著,色彩恢复自然。因为它直接利用了清晰的物理模型。
- 劣势:在天空区域或大面积白色物体(如雪地、白墙)区域,其先验失效,容易导致颜色失真和光晕效应。因为天空的暗通道值很高,算法会误判该区域透射率低,从而过度增强。
- 实操心得:调整局部块大小和 ω 值能微调效果。块越大,去雾越强但边缘越模糊;ω 越小,保留的雾感越多。对于含天空的图像,通常需要对天空区域进行单独检测和透射率修正。
2.1.2 颜色衰减先验架构该架构基于一个观察:图像中雾的浓度与场景深度大致成正比,而场景深度信息可以通过图像的饱和度与亮度之差来近似表征。雾越浓,亮度越高、饱和度越低,二者差值越大。
- 架构流程:
- 构建深度线索:为每个像素计算一个“深度线索”d(x) =v(x) -s(x) + ε。其中v是亮度(Value in HSV),s是饱和度,ε 是一个小常数。
- 建模与求解:假设场景深度r(x) 与深度线索d(x) 满足线性关系:d(x) = θ0 * r*(x) + θ1。通过一些样本可以学习到参数 θ0 和 θ1。进而,透射率可以表示为t(x) = e^{-β * r*(x)},其中 β 是散射系数。
- 估计大气光与复原:大气光A通常从深度线索最大的区域选取。最后代入物理模型复原。
- 结果特点与“为什么”:
- 优势:计算速度快,适合实时系统。对天空区域的处理通常比暗通道先验更自然,因为其先验不直接在天空区域失效。
- 劣势:先验假设相对较弱,在复杂场景下(如色彩丰富的物体),饱和度-亮度差与深度的关系不稳定,可能导致深度图估计不准,去雾效果不均匀。
- 注意事项:该方法对大气光A的估计比较敏感,如果估计不准,整体颜色会偏色。在实际应用中,常结合其他方法(如四叉树细分)来优化A的估计。
2.1.3 基于融合的架构这类方法不依赖于单一的强先验,而是融合多种线索或多种初步去雾结果,以获得更稳健的输出。例如,同时考虑对比度增强、颜色保真度和信息损失最小化等多个目标,通过多尺度融合得到最终结果。
- 架构流程:
- 生成输入权重图:从原图生成一系列代表不同质量属性的权重图,如曝光度权重(衡量像素是否过曝或欠曝)、饱和度权重、对比度权重等。
- 构建拉普拉斯金字塔:将输入图像和各个权重图分别分解为多尺度的拉普拉斯金字塔和 Gaussian 金字塔。
- 融合与重建:在每一层金字塔上,根据对应的权重图融合输入信息,最后从顶层重建出融合后的去雾图像。
- 结果特点与“为什么”:
- 优势:避免了单一先验的局限性,整体效果更加自然、均衡,halo效应(光晕)较少。具有很好的通用性。
- 劣势:计算复杂度高,速度慢。融合规则和权重设计需要经验,可调参数多。
- 实操心得:这类方法更像一种“后处理”或“增强”框架,其去雾的物理含义不如前两种方法明确。常用于对实时性要求不高,但要求视觉效果稳定的场合。
2.2 基于深度学习的数据驱动架构
深度学习架构彻底改变了去雾领域,它不显式地定义物理先验,而是通过大量“雾图-清晰图”配对数据,让网络自己学习从I到J的映射关系,或者学习中间参数t和A。
2.2.1 端到端回归架构这是最直接的深度学习方式,将去雾视为一个图像到图像的翻译问题。输入有雾图像,网络直接输出预测的无雾图像。
- 代表网络:早期有简单的多层CNN,后来普遍采用带有跳跃连接的编码器-解码器结构,如U-Net,以融合低层细节和高层语义。
- 架构流程:
- 特征提取:编码器部分(一系列卷积+池化)逐步下采样,提取多层次特征。
- 特征融合与重建:解码器部分(上采样+卷积)逐步恢复空间分辨率,并通过跳跃连接融合编码器对应层的高分辨率细节特征。
- 输出:最后一层卷积输出三通道的预测清晰图J_pred。
- 结果特点与“为什么”:
- 优势:思路直观,在配对数据充足且质量高的情况下,能产生视觉上非常惊艳的结果,细节和色彩可能恢复得很好。
- 劣势:严重依赖配对数据的质量和数量。网络像一个“黑盒”,其学到的映射可能过拟合于训练数据的雾类型和场景分布,泛化能力存疑。对训练集中未出现过的浓雾类型或特殊场景(如夜间雾、沙尘),效果可能急剧下降。
- 常见问题:容易产生颜色偏差或引入不真实的纹理(artifacts),因为网络可能会“想象”出一些原本不存在的细节来满足像素级的损失函数(如L1/L2 Loss)。
2.2.2 物理模型引导架构为了结合深度学习的强大拟合能力和传统物理模型的可解释性,这类架构让神经网络去估计物理模型中的参数(t和A),然后通过可微的物理模型公式复原出清晰图。
- 代表网络:DehazeNet, AOD-Net。AOD-Net甚至将公式J = (I - A)/t + A重写为一个紧凑公式J = KI -K+ b,其中K是一个由网络学习的、与t和A相关的中间图。
- 架构流程:
- 参数估计网络:一个CNN子网络输入雾图I,输出透射率图t和全局大气光A(或它们的等价表示K)。
- 可微物理层:将网络输出的参数代入大气散射模型,通过该公式层计算出复原图像J。
- 端到端训练:损失函数(如L1 Loss, SSIM)直接作用于最终复原图J上,梯度可以通过物理公式层反向传播到参数估计网络。
- 结果特点与“为什么”:
- 优势:兼具可解释性和数据驱动能力。网络学习的是相对简单的中间参数,而非复杂的像素到像素映射,理论上更容易训练,泛化性可能更好。输出结果通常符合物理直觉。
- 劣势:其性能上限受限于物理模型的准确性。如果真实世界的成雾过程不完全符合该简化模型,则会引入系统误差。此外,t和A的估计本身也是一个病态问题,网络可能学到错误的解但最终输出在训练集上损失很小。
- 注意事项:这类网络的输出(t图)本身可以作为有价值的副产品,用于分析场景深度或雾的分布。
2.2.3 对抗生成与无监督/半监督架构为了解决配对数据获取难的问题,研究者利用生成对抗网络(GAN)或循环一致性(CycleGAN)的思想,在无配对数据或弱监督下进行训练。
- 架构流程(以CycleGAN为例):
- 两个生成器与判别器:一个生成器G_{X->Y}学习将雾图域X转换到清晰图域Y,另一个生成器G_{Y->X}学习反向转换。两个判别器D_X,D_Y分别判断图像是否属于各自域。
- 循环一致性损失:强制要求G_{Y->X}(G_{X->Y}(x)) ≈ x且G_{X->Y}(G_{Y->X}(y)) ≈ y。这保证了转换的内容不变性。
- 对抗损失:G_{X->Y}试图生成骗过D_Y的清晰图,D_Y则努力区分真假清晰图。
- 结果特点与“为什么”:
- 优势:摆脱了对成对训练数据的苛刻要求,可以利用大量无标签的雾图和清晰图集合进行训练。生成的图像往往在风格上更贴近目标域,有时能产生更具艺术感的结果。
- 劣势:训练不稳定,模式崩溃风险高。循环一致性并不能严格保证内容对应(例如,可能改变了物体的形状)。去雾的物理正确性无法保证,可能只是做了风格迁移。
- 实操心得:这类方法更适合用于数据稀缺且对绝对物理保真度要求不高的创意应用。在工业级、要求高可靠性的场景(如自动驾驶)中需谨慎使用。
3. 不同架构去雾结果实测对比与分析
纸上谈兵终觉浅。我选取了包含自然景观、城市街景、含天空场景、浓雾/薄雾等不同情况的测试集,分别运行了上述几种架构的代表性算法实现,并进行了主观和客观的对比。
3.1 测试环境与参数设置
- 测试图像:RESIDE数据集(SOTS子集)标准测试图 + 自采集的若干有挑战性的网络图片。
- 传统方法:
- 暗通道先验:局部块大小15x15,ω=0.95,t0=0.1,使用软抠图(Matting)进行透射率细化。
- 颜色衰减先验:使用默认参数。
- 深度学习方法:
- 端到端回归:使用预训练的FFA-Net模型。
- 物理模型引导:使用预训练的AOD-Net模型。
- (注:由于训练资源限制,无监督方法未纳入此次定量对比,仅作定性讨论)
- 评价指标:
- 全参考指标(仅在合成雾图上有真值):PSNR(峰值信噪比,值越高越好)、SSIM(结构相似性,越接近1越好)。
- 无参考指标(适用于真实雾图):NIQE(自然图像质量评价器,值越低越好)、BRISQUE(盲图质量评价,值越低越好)。这两个指标基于统计特征,分数低代表图像更接近自然清晰图像统计特性。
3.2 结果对比表格与解读
| 测试场景 | 暗通道先验 | 颜色衰减先验 | 融合方法 | FFA-Net (端到端) | AOD-Net (物理引导) | 结果总结与架构选择建议 |
|---|---|---|---|---|---|---|
| 自然景观(中雾) | PSNR: 28.5, SSIM: 0.95 主观:去雾彻底,色彩鲜艳,边缘处有轻微光晕。 | PSNR: 26.8, SSIM: 0.93 主观:效果均匀,色彩稍淡,光晕较少。 | PSNR: 27.9, SSIM: 0.94 主观:效果平衡,视觉舒适度高。 | PSNR:30.1, SSIM:0.97 主观:细节丰富,色彩还原极佳,画面干净。 | PSNR: 29.2, SSIM: 0.96 主观:效果优秀,略逊于FFA-Net,但更自然。 | 深度学习全面领先。端到端网络(FFA-Net)在配对数据场景下能达到最优指标。物理引导型(AOD-Net)是稳健的折中选择。传统方法仍有可用价值,特别是融合方法,其无监督特性是优势。 |
| 城市街景(含天空) | PSNR: 22.1, SSIM: 0.88 主观:天空区域严重色偏、发暗,建筑物边缘光晕明显。 | PSNR: 24.5, SSIM: 0.91 主观:天空处理自然,整体亮度均匀,但远处细节增强不足。 | PSNR: 24.0, SSIM: 0.90 主观:天空和建筑过渡自然,无明显瑕疵,但去雾力度偏保守。 | PSNR: 26.8, SSIM: 0.94 主观:天空和建筑都处理得很好,但有时会使天空颜色过饱和。 | PSNR:25.9, SSIM:0.93 主观:整体效果稳定,天空颜色正常,建筑细节清晰。 | 颜色衰减先验和物理引导深度学习是安全牌。暗通道先验需配合天空分割修正。端到端网络表现依赖训练数据是否包含类似天空场景。 |
| 浓雾/能见度极低 | 无参考指标:NIQE较高 主观:能恢复部分结构,但噪声放大严重,画面斑驳。 | 无参考指标:NIQE一般 主观:去雾效果微弱,画面依然灰蒙。 | 无参考指标:NIQE一般 主观:略有改善,但整体仍模糊。 | 无参考指标:NIQE低 主观:显著恢复出大量细节,效果震撼,但偶有伪影。 | 无参考指标:NIQE低 主观:恢复效果明显,比FFA-Net稍弱,但伪影更少。 | 深度学习,特别是大数据训练的模型,展现出绝对优势。传统方法在物理模型失效(浓雾下假设不成立)时能力有限。 |
| 运行速度 (CPU, 512x512) | ~1.5 秒 | ~0.3 秒 | ~3 秒 | ~0.8 秒 (GPU) / ~5秒 (CPU) | ~0.1 秒 (GPU) / ~0.5秒 (CPU) | 颜色衰减先验和AOD-Net在速度上优势明显,适合嵌入式或实时场景。端到端大模型(FFA-Net)计算量大。 |
注意:上表中的PSNR/SSIM是在合成雾图(有真值)上计算,NIQE/BRISQUE是在真实雾图上计算。深度学习的指标依赖于其训练数据与测试数据的匹配程度。
3.3 典型问题视觉对比分析
- 光晕效应:在景深突变(如建筑物边缘对着天空)的区域,暗通道先验方法最为明显,表现为物体边缘有一圈灰亮或暗色的晕。这是因为局部块内透射率恒定的假设在边缘处不成立。融合方法和深度学习模型通常能更好地缓解此问题。
- 颜色失真:主要发生在天空、白色物体等区域。暗通道先验会导致其发暗;某些端到端网络如果训练数据中蓝天样本少,可能导致天空过饱和或发紫。物理模型引导方法在颜色保真上通常更稳定。
- 细节过度平滑或伪纹理:传统方法在去雾的同时可能会平滑掉一些纹理细节。而端到端深度学习模型,在极力恢复细节的过程中,有时会“创造”出不真实的、类似油画笔触的纹理(尤其是浓雾区域),这是过拟合或对抗训练的一种表现。
- 实时性差异:从实测看,AOD-Net这类轻量化的物理引导网络,以及颜色衰减先验,在CPU上就能达到实时或近实时处理,非常适合移动端或视频流处理。而包含多尺度融合或复杂U-Net结构的模型,则对计算资源要求较高。
4. 如何根据项目需求选择去雾架构?
没有“最好”的架构,只有“最合适”的架构。选择时,需要从以下几个维度进行权衡:
4.1 评估你的核心约束条件
- 数据条件:你有大量成对的(雾图-清晰图)数据吗?如果有,深度学习(尤其是端到端或物理引导)是首选。如果只有大量无标签雾图或清晰图,可以考虑无监督/对抗生成方法。如果完全没有数据,只能依赖传统方法。
- 计算资源:算法需要运行在服务器GPU、桌面CPU、手机还是嵌入式设备(如树莓派、海思芯片)?这直接决定了模型的复杂度和框架选择。
- 嵌入式/移动端:优先考虑颜色衰减先验、AOD-Net或其变种等轻量级方法。可能需要使用C++实现并做算子优化。
- 服务器端:可以部署FFA-Net、GridDehazeNet等大型端到端模型,追求极致效果。
- 实时性要求:处理视频流需要高帧率(如>30fps)。AOD-Net、轻量级U-Net和颜色衰减先验是主要候选。暗通道先验即使优化后,在高端CPU上处理高清图像也难以满足实时视频要求。
- 效果偏好:
- 追求客观指标(PSNR/SSIM)最大化:在配对数据上训练一个先进的端到端网络(如MSBDN、FFA-Net)。
- 要求结果稳定可解释,避免严重失真:选择物理模型引导的深度学习(如AOD-Net)或融合类传统方法。
- 应用于艺术创作或风格转换:可以尝试基于GAN的无监督方法。
4.2 混合架构与工程化技巧在实际工业项目中,单一架构往往难以满足所有需求,混合策略和工程后处理至关重要。
- 预处理与后处理:
- 天空分割:对于暗通道先验,集成一个轻量级的天空分割网络(如基于阈值的颜色分割或小型语义分割模型),对天空区域采用不同的透射率估计策略(如设置一个下限值),能极大改善天空失真问题。
- 引导滤波:对于深度学习模型输出的粗糙透射率图或直接输出的复原图,使用引导滤波进行边缘保持平滑,可以有效抑制块效应或噪声。
- 颜色校正:无论哪种方法,最终输出都可以进行自动白平衡或基于灰度世界假设的颜色校正,以改善整体色偏。
- 模型小型化与加速:
- 知识蒸馏:用一个大模型(教师)指导一个小模型(学生)训练,让小模型逼近大模型的性能。
- 网络剪枝与量化:移除深度学习模型中冗余的通道或层,并将浮点权重转换为低精度整数(如INT8),可以大幅减少模型体积和加速推理,尤其利于端侧部署。
- 专用硬件与框架:利用GPU(CUDA)、NPU(如华为Ascend)或专用AI加速芯片,并搭配TensorRT、OpenVINO、MNN等推理框架进行深度优化。
4.3 避坑指南:我踩过的那些“坑”
- 盲目追求PSNR:在真实项目中,PSNR高并不代表视觉效果好。我曾遇到一个模型在测试集上PSNR领先,但实际部署后,用户反馈“画面看起来像蒙了一层塑料膜”,原因是模型过度平滑了纹理。后来我们加入了基于SSIM或感知损失(Perceptual Loss)的优化,视觉感受好了很多。
- 忽略场景适配:将一个在自然景观数据集上训练的优秀模型,直接用于道路监控摄像头去雾,效果很差。原因是监控场景视角固定、包含大量规则人造物体(车道线、标志牌)、且常有夜间低光照情况。务必使用与目标场景分布相近的数据进行训练或微调。
- 大气光A估计的陷阱:传统方法中,估计A通常取暗通道最亮的前0.1%像素。但在有白色车辆或反光标识的场景,这会错误地将前景物体当作无穷远处的天空,导致A值估计错误,整个画面颜色怪异。一个改进方法是,结合图像分割,只在可能是天空或远景的区域候选点中选取A。
- 视频去雾的闪烁问题:将图像去雾模型逐帧应用于视频,会导致相邻帧之间去雾程度不一致,产生闪烁感。解决方案是:要么使用具有时序一致性的视频去雾模型;要么在图像模型基础上,对估计的透射率图或中间特征在时间维度上进行平滑滤波(如卡尔曼滤波)。
5. 未来趋势与个人思考
尽管深度学习已经主导了去雾研究的前沿,但我认为传统方法与深度学习的结合、以及面向特定领域的定制化方案,才是未来的工程化方向。
模型轻量化与效率优先:学术界仍在追求更高的PSNR,但工业界的需求已经明显转向“在有限算力下达到可用效果”。因此,像轻量级物理引导网络、神经架构搜索(NAS)设计的紧凑模型会成为落地主流。Transformer架构在高层语义理解上有优势,但其计算复杂度高,如何设计高效的视觉Transformer(如Swin Transformer变种)用于去雾,是一个有趣的方向。
跨模态与多任务学习:单纯依靠RGB图像信息在极端恶劣天气下是有极限的。结合红外图像、雷达点云等多模态数据,可以提供互补信息。例如,在自动驾驶中,将激光雷达提供的精确深度信息作为先验输入到去雾网络,可以极大提升透射率估计的准确性。去雾也可以与目标检测、语义分割等下游任务进行联合训练,实现端到端的感知增强。
无监督与真实世界泛化:构建大规模、高质量、成对的真实雾天数据集成本极高。因此,利用非配对数据(CycleGAN风格)、半监督学习、域自适应等技术,让模型能更好地泛化到未见过的真实雾况,是突破数据瓶颈的关键。最近一些利用对比学习或物理模型作为自监督信号的方法,显示出不错的潜力。
从我个人的工程实践来看,脱离实际场景空谈算法优劣没有意义。在一次安防监控项目中,我们最终选择的方案是:在边缘设备(摄像头端)运行一个极轻量的颜色衰减先验算法,进行初步的实时去雾和增强,保证基本可视性;同时将视频流回传至中心服务器,由一个更强大的物理引导深度学习模型进行二次精细处理,用于关键帧分析和存档。这种“边缘粗处理+云端精处理”的协同架构,平衡了实时性、效果和成本。
去雾技术远未达到终点,它从经典的图像处理问题,演变成了一个连接物理模型、深度学习、计算摄影和领域知识的交叉领域。理解不同架构背后的思想,比单纯调包调用更重要。希望这份结合了原理、实测与经验的总结,能帮助你在面对“去雾”需求时,不再迷茫,而是能够有条不紊地分析、选型和实施。