早期:基于先验的方法 此阶段的方法不依赖于深度学习,而是基于对大量无雾和有雾的观察,人工总结出统计规律(先验知识),利用物理散射模型来反推图像的透射率和大气光值。
主要的代表算法是暗通道先验(Dark Channel Prior, DCP)。通过观察发现,在绝大多数没有雾的户外图像的局部区域中,至少有一个颜色通道的像素值是非常低的,这个通道就被称为暗通道。
例如在阴影比如树荫、建筑背光处,三个通道的值都很低;鲜艳的物体如一朵红色花,R通道值很高,G和B的通道值则很低(接近0),黑色的物体如树干、石头,三个通道值都很低。
而雾(大气光)通常是白茫茫的,亮度较高。
如果有雾:原本应该很黑的暗通道,会因为叠加了白色的雾气而像素值升高。 计算逻辑:算法通过计算暗通道的像素值有多高,就能反推出该区域的雾气有多浓(即此处的透射率有多大)。 还原:知道了雾的浓度,可以根据物理公式来将雾减去,还原出清晰的图像。 在数学上,暗通道可以表示为:
J d a r k ( x ) = min y ∈ Ω ( x ) ( min c ∈ { r , g , b } J c ( y ) ) ≈ 0 J^{dark}(x) = \min_{y \in \Omega(x)} \left( \min_{c \in \{r, g, b\}} J^c(y) \right) \approx 0 \\
J d a r k ( x ) = y ∈ Ω ( x ) min ( c ∈ { r , g , b } min J c ( y ) ) ≈ 0 其中J c J^c J c 是图像J J J 的R、G、B的某个通道。Ω ( x ) \Omega(x) Ω ( x ) 是以像素x x x 为中心的局部窗口(通常是15 × 15 15\times 15 15 × 15 的方块)。I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I(x)=J(x)t(x)+A(1-t(x))\\
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x )) 其中I ( x ) I(x) I ( x ) 为观察到的有雾图像。J ( x ) J(x) J ( x ) 为要恢复的无雾图像。t ( x ) t(x) t ( x ) 为透射率,代表光线穿透雾的能力,雾越浓,则t越小。A A A 代表大气光值,通常取整张图中最亮区域的值。I ( x ) A c = J ( x ) t ( x ) A c + 1 − t ( x ) \frac{I(x)}{A^c}=J(x)\frac{t(x)}{A^c}+1-t(x) A c I ( x ) = J ( x ) A c t ( x ) + 1 − t ( x ) 取最小值:对方程两边进行两次取最小操作(第一次是对RGB取最小,一次是对局部窗口Ω ( x ) \Omega(x) Ω ( x ) 取最小):
min y ∈ Ω ( x ) ( min c I c ( y ) A c ) = t ( x ) min y ∈ Ω ( x ) ( min c J c ( y ) A c ) + 1 − t ( x ) \min_{y \in \Omega(x)} \left( \min_c \frac{I^c(y)}{A^c} \right) = t(x) \min_{y \in \Omega(x)} \left( \min_c \frac{J^c(y)}{A^c} \right) + 1 - t(x) y ∈ Ω ( x ) min ( c min A c I c ( y ) ) = t ( x ) y ∈ Ω ( x ) min ( c min A c J c ( y ) ) + 1 − t ( x ) 代入先验:根据暗通道先验,无雾图像J J J 的暗通道趋近0,即J d a r k ( x ) = min y ∈ Ω ( x ) ( min c ∈ { r , g , b } J c ( y ) ) ≈ 0 J^{dark}(x) = \min_{y \in \Omega(x)} \left( \min_{c \in \{r, g, b\}} J^c(y) \right) \approx 0 J d a r k ( x ) = min y ∈ Ω ( x ) ( min c ∈ { r , g , b } J c ( y ) ) ≈ 0 。因此中间一项约为0。
t ( x ) = 1 − ω min y ∈ Ω ( x ) ( min c I c ( y ) A c ) t(x) = 1 - \omega \min_{y \in \Omega(x)} \left( \min_c \frac{I^c(y)}{A^c} \right) t ( x ) = 1 − ω y ∈ Ω ( x ) min ( c min A c I c ( y ) ) 引入常数ω \omega ω 的原因是为了保留少量的雾,使得图片更加自然,保留景深感。
暗通道先验的优点是简单且有效,在很多场景下效果惊人;缺点是对天空失效,因为天空本身就很亮,不符合暗通道趋近于0的假设,所有DCP在处理天空时会容易出现颜色失真,且模型基于理想化的假设,在面对复杂不均匀的真实世界雾霾时,刚性的假设往往会失效,导致泛化能力较差。
相似的算法还有颜色衰减先验(Color Attenuation Prior)和颜色线(Color-Lines)先验,都是基于先验的方法。
此处主要从人工先验转换到数据驱动,利用卷积神经网络的特征提取能力,从大规模的数据集中自动学习雾霾的特征。深度学习方法主要还是分为两个方面,早中期还是以大气散射模型为基础;由于现实中的雾实际上更加复杂,要综合考虑深度、光照等因素,因此后期则直接以端到端模型为主。
以DehazeNet为例,该方法还是以大气散射模型为基础,但是t ( x ) t(x) t ( x ) 和A A A 不再依靠人工规则计算,而是通过训练一个CNN来计算。
该方法通过CNN模型计算出透射率图,即t ( x ) t(x) t ( x ) ,然后将透射率图输入到大气散射模型来恢复无雾图像。
在特征提取层引入了Maxout单元,在第一层卷积以后使用Maxout激活参数,来解决特征学习的单一性和局限性。Maxout是一种分段线性函数,作用是输出k个不同的输入值中的最大值,可以通过学习不同的滤波器参数,自动拟合出类似于“最小值滤波”(暗通道)、“最大值滤波”(最大对比度)等多种去雾特征,网络可以自动学习最有效的雾气特征,而不仅仅依赖于人工假设。 多尺度映射:在网络的第二层使用并行卷积操作。解决了尺度变化的适应性。雾的透射率和景深相关,而图像中的物体的大小和距离是多变的。单一尺度的卷积核难以同时处理微小的细节和巨大的物体,多尺度卷积就能够很好地解决这个问题,从多个尺度提取特征,提高模型对图像缩放和不同大小的鲁棒性。 局部极值操作:在网络的第三层引入最大池化操作,主要是用于对传输图做平滑处理,来防止逐像素计算出的特征可能因为纹理、颜色等变化而产生巨大剧烈波动;除此以外,还能有效地抑制了由白色物体或图像噪声引起的传输率低估误差。 双边ReLU激活函数:通过新的激活函数BReLU,将输出限制在[ 0 , 1 ] [0,1] [ 0 , 1 ] 中,来解决透射率大于1的情况;同时还规避了Sigmoid函数的梯度消失问题,保留了ReLU的局部线性,提升了图像恢复的质量。 这类方法不再纠结于中间物理参数,而是直接学习从”有雾图“到”无雾图“的映射关系,减少了对物理先验的依赖,通常能够获得更高的图像保真度。
以FFA-Net为例,该模型是一个完全的端到端网络,输入有雾图,直接输出无雾图,中间不再显式计算透射率t ( x ) t(x) t ( x ) 与大气光A A A 。
低效处理:之前的网络通常对图像中的每一个像素和每一个特征都“一视同仁”,但是实际上雾在图像中的分布是不均匀的,有些地方的雾比较厚,有些地方仅仅只有薄雾;且不同的特征通道包含的信息重要性不同,有些通道包含更多的边缘纹理,有些地方包含更多色彩。如果不区分对待,则网络就会将资源浪费在简单的区域,在苦难的区域在效果不佳。 浅层信息的丢失:随着网络层数变深,原本图像的细节容易在多次卷积之后丢失。同时保留深层语义和浅层细节就变成了一个难题。 FFA-Net使用了注意力机制和融合来解决以上问题:
注意力:雾气分布不均匀,那么网络应该学会聚焦,侧重雾气较厚的地方。 特征融合:保留中间产生的信息,网络前几层提取的特征和后几层提取的特征应当结合起来,共同确定最后的去雾图像。 浅层特征提取:图像先经过一个简单的卷积层,为后续的深层处理准备。 堆叠的组架构:特征图连续通过三个组架构,每一组都提取出不同层级的特征。 特征融合:三个组架构的输出除了作为下一组的输入意外,还会被汇聚到拼接模块,拼接的特征会通过一个特征注意力模块,这样可以让网络同时保留浅层细节特征和深层语义特征,并且自动学习它们的权重进行融合。 重建与全局残差:融合后的特征再经过最后的卷积层来重建图像。原始输入的图像直接连接到网络的末端,说明整个网络学习的实际上是残差,即如何从有雾的图中减去雾,或者如何修正输入的图片。 细分来看,每个组内由19个基本块串联而成,基本块包含局部残差学习和特征注意力。流程为C o n v → R e L U → C o n v → F A M o d u l e → 与输入相加 Conv \rightarrow ReLU \rightarrow Conv \rightarrow FA Module \rightarrow 与输入相加 C o n v → R e LU → C o n v → F A M o d u l e → 与输入相加 。而特征注意力又主要由通道注意力和像素注意力串联而成:
通道注意力主要解决不同特征通道的重要性不同的问题,例如某些通道可能用于响应浓雾,某些用于响应边缘。通过使用全局平均池化压缩空间的信息,算出每个通道的一个权重值,然后乘以原特征。 像素注意力主要解决雾在图像上分布不均的问题,通过卷积和Sigmoid生成一张和原图一样大的权重图。雾大的地方权重可能大,没雾的地方权重较小。 CNN的劣势就是卷积核视野(感受野)太小,看局部容易将白墙当成雾。而Transformer的Self-Attention天生就能够看全局。
以DehazeFormer为例,该模型在Swin Transformer的基础上改进了归一化方法和将循环移位替换为反射填充,成为了在SOTS indoor数据集上 PSNR指标首次超过40dB的Transformer架构的模型,在去雾这一领域超越了CNN。
CNN的局限性:传统的CNN擅长提取局部特征,但是在捕捉全局上下文方面则较弱,而去雾则非常依赖全局信息。 通用Transformer在去雾领域表现不佳:Swin Transformer直接用于去雾会出现很多问题,因为其很多设计是为了“识别物体”而设计的,并不是为复原像素而设计的: Swin Transformer的LayerNorm会破坏雾的特征,雾的浓度通常与图像的亮度和对比度强相关。如果强行将每个图像块都归一化为一样的分布,相当于把雾的浓度信息丢掉了。 循环移位会带来伪影,为了让不同的窗口进行信息交流,Swin Transformer使用了一种称为循环移位的操作,在去雾这种需要生成高质量图片的任务中,会导致明显的边缘伪影。 针对以上问题,DeHazeFormer主要做出了以下改进:
提出了新的归一化方法来替代LayerNorm:先像LayerNorm一样将数据归一化,然后再将整张特征图的全局均值和全局方差加回去。归一化是为了让网络训练更加稳定,而加回全局均值和方差,这是为了保留”雾的浓度信息“。 使用反射填充替代循环移位,当划分窗口时,如果在边缘不够切分,选择使用镜像反射的方式将边缘补齐,处理完之后再切去,这样能够保证边缘的连续性,不会出现”把图片左边的像素强行拼到右边“这种违背物理空间位置的操作,有效消除了去雾后的边缘伪影。 并行卷积和注意力:在Transformer的注意力机制旁边加了一个并行的深度卷积分支,有效将全局信息和局部信息结合起来,同时兼顾了去雾程度和纹理的保留。 算法的演进,是为了让我们看得更清。从基于统计学的物理先验,到卷积神经网络的局部特征提取,再到 Transformer 的全局上下文感知,去烟算法在精度与泛化性上不断突破天花板。这一路走来,不仅是在通过数学消除图像中的雾霭,更是在探索如何让机器在不确定性中还原真实世界的本来面貌。虽然“完美去雾”在复杂多变的现实场景中仍面临挑战,但随着模型架构的持续创新,那层遮挡在镜头前的“迷雾”正变得越来越淡。
Kaiming He, Jian Sun and Xiaoou Tang, "Single image haze removal using dark channel prior," 2009 IEEE Conference on Computer Vision and Pattern Recognition , Miami, FL, USA, 2009, pp. 1956-1963, doi: 10.1109/CVPR.2009.5206515. B. Cai, X. Xu, K. Jia, C. Qing and D. Tao, "DehazeNet: An End-to-End System for Single Image Haze Removal," in IEEE Transactions on Image Processing , vol. 25, no. 11, pp. 5187-5198, Nov. 2016, doi: 10.1109/TIP.2016.2598681. Qin, X., Wang, Z., Bai, Y., Xie, X., & Jia, H. (2020). FFA-Net: Feature Fusion Attention Network for Single Image Dehazing. Proceedings of the AAAI Conference on Artificial Intelligence , 34 (07), 11908-11915. https://doi.org/10.1609/aaai.v34i07.6865 Yuda Song, Zhuqing He, Hui Qian, and Xin Du. 2023. Vision Transformers for Single Image Dehazing. Trans. Img. Proc. 32 (2023), 1927–1941. https://doi.org/10.1109/TIP.2023.3256763
【斯坦福CS231n 学习笔记13】Robot Learning 2025/06/07 算法, cs231n 372 41分钟阅读