最近出于学习的需要,阅读了关于水下图像增强的论文《Color Balance and Fusion for Underwater Image Enhancement》,并且尝试着按照论文中所介绍的步骤使用matlab来实现,由于本人对图像处理初次接触,感觉做出来的效果一般,本文对论文提及的步骤进行简略介绍,代码是按照论文步骤写的,并不十分完善,此论文主要用于学习交流,欢迎大家阅读分享并提出宝贵意见。
光的水下传播
Jaffe-McGlamery图像模型,在水下介质中,一般像平面上的点上的总辐照度入射有三个主要分量:直接分量、前向散射和后向散射。直接分量是被目标物体直接反射到成像平面上的光分量,可表示为:
前向散射是由于光线在进入相机镜头的过程中发生了随机偏差。后向散射是由于人造光(如闪光)撞击水粒子,并反射回相机。表示为:
忽略前向散射分量,简化水下光学模型为:
论文提出的图像增强方法采用了两步策略,结合白平衡和图像融合来改善水下图像,而不需要借助于光学模型的显式反演。
总体流程介绍
该论文提出的图像增强方法采用了两步策略,结合白平衡和图像融合来增强水下图像。
白平衡的目的是补偿由颜色的深度选择性吸收造成的颜色投射,而图像融合的目的是增强场景的边缘和细节,以减轻由于后向散射造成的对比度损失。
白平衡
现有的白平衡算法基本都是基于一定的假设和先验条件。常见的白平衡算法有Max RGB、Gray World、Gray Edge。其中灰色世界算法对于合理失真的水下场景具有良好的视觉效果。然而,对极度恶化的水下场景进行更深入的研究发现,大多数传统方法的性能都很差。它们不能消除颜色的变化,通常看起来是蓝色的。最好的去除蓝色调的方法是灰色世界,但是我们观察到这种方法有严重的红色伪影。这些伪影是由于红色通道的一个非常小的平均值,导致该通道在出现红色的位置上的过度补偿(因为灰色世界通过其平均值来分割每个通道)。
论文中提出的白平衡算法基于以下四个观察/原则:
论文中提到某些水质恶劣的图片,可能需要对红色和蓝色通道补偿,所以作者在代码实现时,定义了一个阈值K,若绿色通道与蓝色通道的比值大于K,则对红色通道和蓝色通道均进行补偿;否则,只对红色通道进行补偿。
锐化与Gamma变换
Gamma变换:一般而言,白平衡水下图像往往显得太亮。
锐化:非锐化掩模
典型的掩模公式:S = I +β(I-GI),较小的β不能锐化I,但过大的β会导致过饱和区域,具有较亮的高光和较暗的阴影,论文使用的掩模公式:S=(I+N{I-GI})/2
融合过程中的权重
金字塔建立及融
多尺度分解基于拉普拉斯金字塔。金字塔表示将图像分解为带通图像的和。
两个金字塔具有相同的层数,并且在每层上独立地执行拉普拉斯输入与高斯归一化权重的混合:
处理前(左)与处理后(右)对比图