恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Sea-thru水下图像复原:基于物理模型从原理到工程实践
首页
资讯中心
/
Sea-thru水下图像复原:基于物理模型从原理到工程实践
Sea-thru水下图像复原:基于物理模型从原理到工程实践
发布时间:2026/8/23 3:09:34
1. 从“水下雾霾”到清晰视界Sea-thru 为何与众不同作为一名长期与图像算法打交道的从业者我见过太多试图解决水下图像问题的方案。无论是摄影爱好者还是海洋科研人员从水下带回来的照片和视频十有八九都带着一层挥之不去的“蓝色面纱”或“绿色滤镜”。这不仅仅是颜色失真更是一种由水介质本身带来的、随距离变化的复杂退化。传统的白平衡、对比度拉伸甚至是那些标榜“水下修复”的滤镜往往只能让图片“看起来”好一点却无法真正还原物体本来的颜色和细节更别提为后续的定量分析提供可靠依据了。直到我深入研读了 Derya Akkaynak 和 Tali Treibitz 在 2019 年提出的Sea-thru方法才意识到我们过去可能一直在用解决“大气雾霾”的思路去对付一个完全不同的物理敌人。Sea-thru 这个名字起得很妙它直指核心目标看穿海水。与那些基于深度估计或需要人工标注的深度学习方法不同Sea-thru 是一个基于物理成像模型的非深度学习方法。它的核心思想不是“猜”出清晰图像而是通过数学方法从成像过程中逆向求解出被水吸收和散射掉的光线信息。这就像不是去猜测雾中建筑的形状而是精确计算出雾的浓度和分布然后把它从照片中“减”掉。这种方法最大的优势在于其输出的结果具有物理真实性恢复的颜色理论上就是物体在空气中的真实颜色这对于珊瑚礁健康监测、海底考古测绘、海洋生物分类等需要色彩一致性和可比性的科学应用来说是至关重要的。网络上关于 Sea-thru 的讨论很多但大多停留在“效果惊艳”的层面。在这篇研读笔记里我想和你一起拆解这篇论文的精华。我们不止步于复现它的公式更要弄懂它背后的物理假设为什么合理、它的算法流程每一步在解决什么具体问题、以及在实际应用中我们会遇到哪些论文里没写的“坑”。你会发现这个方法巧妙地将一个复杂的逆问题分解成了几个可求解的步骤其中对距离信息的获取和利用是整个流程的“胜负手”。2. 水下成像的物理困局为什么简单调色行不通要理解 Sea-thru 的革新之处必须先明白我们面对的是一个怎样的问题。水下图像退化主要源于光与水分子的两种相互作用吸收和散射。这和我们熟悉的陆地雾霾有本质区别不能简单套用“去雾”算法。2.1 吸收随波长变化的“滤色片”水对光的吸收不是均匀的。红光长波长在水中的衰减速度远远快于蓝绿光短波长。这意味着即使一个物体是鲜艳的红色只要它距离相机几米远反射回相机的红光就可能被水吸收殆尽你在照片上就只能看到由残余蓝绿光构成的灰暗影像。这种吸收效应是随波长和距离指数衰减的。我们常见的整体偏蓝或偏绿正是这种选择性吸收的结果。传统白平衡试图找一个“灰色参考点”来校正整体色偏但它无法处理这种随空间位置即深度变化的颜色衰减。一个在近处呈现红色的珊瑚和在远处呈现暗蓝色的珊瑚用同一个白平衡参数去校正显然不会同时正确。2.2 散射水下世界的“光雾”散射分为两种。一是前向散射光线在到达相机传感器之前因与水分子、浮游生物等微粒碰撞而改变路径。这会导致图像细节模糊、对比度下降就像在镜头前蒙了一层薄纱。二是后向散射即环境光主要是来自水面的自然光在到达物体表面前就被微粒散射回相机。这部分光从未接触过物体却直接进入了镜头形成一层均匀的“幕布光”veiling light。它是图像整体发白、雾蒙蒙的元凶并且其强度也随距离增加。2.3 关键模型Jaffe-McGlamery 成像方程Sea-thru 方法的基石是 Jaffe-McGlamery 水下光学成像模型。这个模型将相机接收到的信号I(x)在每一个像素点x上分解为三个分量I(x) J(x) * t(x) B(∞) * (1 - t(x))我们来拆解这个公式J(x)这是我们梦寐以求的清晰图像即物体在无水下介质影响时本来的颜色和亮度。t(x)透射率图。它描述的是物体反射光在到达相机的途中有多少比例未被吸收和散射而幸存下来。t(x)是一个介于0到1之间的值并且与波长 λ 和距离 d(x) 相关可以表示为t(x) exp(-β(λ) * d(x))。其中β(λ)是水体衰减系数d(x)是该像素点对应的场景深度。B(∞)背景散射光Backscatter也就是上文提到的后向散射光。理论上在无穷远处d→∞t(x)→0相机接收到的全是B(∞)。它被假设为在局部区域内是均匀的。我们的目标就是从观测到的退化图像I(x)中求解出J(x)。这显然是一个病态逆问题因为t(x)和d(x)都是未知的。Sea-thru 的聪明之处在于它通过一系列巧妙的假设和操作将这个难题转化为了可求解的形式。注意这里有一个至关重要的点也是 Sea-thru 与大气去雾模型如暗通道先验的核心区别。大气去雾中通常假设背景散射光B(∞)是全局常数如天空光且透射率与波长无关。而在水下B(∞)是随波长变化的水下的“环境光”也有颜色且衰减系数β(λ)强烈依赖于波长。忽略这两点就是为什么直接套用去雾算法到水下会失败的原因。3. Sea-thru 算法核心四步走从模糊到清晰的解构之路论文将求解过程清晰地分解为四个顺序步骤。每一步都解决一个子问题并为下一步提供输入。理解这个流程就掌握了 Sea-thru 的命脉。3.1 第一步估计背景散射光 B(∞)既然B(∞)被认为是局部均匀的那么如何从图像中把它“找”出来呢Sea-thru 采用了一种基于图像块统计的鲁棒方法。具体操作与原理图像分块将输入图像I划分为多个重叠或不重叠的小块例如 50x50 像素。寻找最“雾”的块在每个图像块内计算其像素值在 RGB 各通道的方差。为什么是方差因为B(∞)是均匀的散射光如果一个区域完全由B(∞)主导即物体反射光J*t贡献极小那么这个区域的像素值变化会非常小方差也就趋近于零。这样的区域通常对应着图像中距离相机最远、物体细节最模糊的部分如远处的深水背景。估计 B(∞) 值对于每个颜色通道选择方差最小的前k个图像块例如k0.1%总块数将这些块内所有像素的强度值按通道分别排序取其中位数作为该通道B(∞)的估计值。使用中位数而非均值是为了避免图像中可能存在的亮点如鱼鳞反光、人工光源对估计造成干扰。实操心得块大小的选择块太小统计不稳定容易受噪声影响块太大可能无法捕捉到局部均匀的区域。通常选择边长为图像短边1/20到1/30的尺寸是个不错的起点。“无穷远”区域的可靠性这个方法强依赖于图像中存在真正的“背景”区域。如果拍摄的是微距或场景中充满近处物体如密集的珊瑚丛可能找不到合适的低方差块导致B(∞)估计偏高影响后续步骤。这是算法的一个实际局限。3.2 第二步计算相对距离图 d_rel(x)这是整个算法中最精妙也最具挑战的一步。我们需要每个像素点到相机的相对距离而不是绝对距离。Sea-thru 利用了一个关键的物理洞察在清水条件下不同波长的光衰减系数之比是近似恒定的。推导与计算从成像方程出发我们先减去估计出的B(∞)得到I(x) I(x) - B(∞) J(x) * t(x)。考虑两个不同的颜色通道例如绿通道 G 和蓝通道 B。根据透射率公式有t_G(x) exp(-β_G * d(x))t_B(x) exp(-β_B * d(x))那么t_G(x) / t_B(x) exp([β_B - β_G] * d(x))。同时从I(x)我们可知I_G(x) / I_B(x) (J_G(x) * t_G(x)) / (J_B(x) * t_B(x)) (J_G(x)/J_B(x)) * (t_G(x)/t_B(x))。这里出现了物体真实颜色比J_G/J_B。Sea-thru 做出了一个关键假设在自然水下场景中物体表面的光谱反射率在局部是平滑变化的即相邻像素的J_G/J_B比值近似相等。这个假设对于珊瑚、沙地、岩石等大多数自然物是合理的。基于此对上述比值取对数并计算其拉普拉斯算子Laplacian即二阶导数。在局部平滑假设下物体颜色比项的拉普拉斯近似为零。于是我们得到Laplacian( ln(I_G / I_B) ) ≈ (β_B - β_G) * Laplacian( d(x) )由于(β_B - β_G)是一个与空间位置无关的常数我们可以通过求解这个泊松方程恢复出与真实距离只差一个缩放因子的相对距离图d_rel(x)。这个缩放因子就是1/(β_B - β_G)。为什么这一步如此重要它绕开了对绝对距离或物体本身颜色的先验知识需求仅利用图像本身的梯度信息和水体衰减的特性就推算出了场景的几何结构相对深度。这是将物理模型与图像处理结合的神来之笔。踩坑点水体类型假设整个推导依赖于β_B/β_G为常数这仅在均匀水体如开阔的清水海域中成立。在近岸、河口等含有大量悬浮颗粒、叶绿素的水体Type II 水体中衰减系数比可能随位置变化导致距离估计误差。颜色比平滑假设失效对于具有尖锐颜色边界的物体如人工制品、黑白条纹的鱼类局部颜色比不再平滑拉普拉斯不为零这会引入距离图的噪声或错误边缘。3.3 第三步估计水体衰减系数 β(λ)有了相对距离图d_rel(x)我们现在需要确定缩放因子即衰减系数差(β_B - β_G)进而求出各通道的绝对衰减系数β(λ)。论文提出了两种方法方法A利用已知色块如果有如果在场景中放置了颜色已知的标定板如灰度卡或彩色卡那么在这些色块区域J(x)是已知的。我们可以选取两个距离不同的同色色块像素点x1和x2。根据公式I(x1) / I(x2) exp(-β(λ) * (d(x1) - d(x2)))由于d(x1) - d(x2)可以从相对距离图中得到比例关系代入绝对距离差通过标定板实际尺寸推算即可直接解出β(λ)。这是最准确的方法但需要前期布设。方法B无标定情况下的统计估计更常用在没有标定物时Sea-thru 利用自然图像的统计特性。它假设在大量自然场景中物体反射率J(x)的期望值在 RGB 三通道上是相等的即物体平均来说是灰色的。这被称为“灰色世界”假设在水下的变体。计算整张图像或大面积区域I(x)在各通道的均值。根据公式E[I(λ)] E[J(λ)] * E[exp(-β(λ)*d)]并假设E[J(R)] E[J(G)] E[J(B)]。我们可以建立关于β(λ)和d(x)分布的方程。结合从第二步得到的d(x)的分布形状可以通过优化方法迭代求解出最佳的β(λ)值使得恢复后的J(x)在全图平均上接近灰色。操作建议如果进行科学考察强烈推荐使用水下色卡进行现场标定。这不仅能得到更准确的β(λ)还能验证算法结果。在无标定情况下方法B对图像内容敏感。如果场景本身色彩极度不平衡如全是红珊瑚灰色世界假设会失效导致估计的β(λ)有偏差。此时可以尝试手动选取图像中你认为应该是白色或灰色的区域如沙地、石头阴影处作为参考进行局部估计。3.4 第四步求解清晰图像 J(x)至此所有拼图都已就位I(x)已知输入图像。B(∞)已从第一步估计得到。d_rel(x)已从第二步计算得到。β(λ)已从第三步估计得到结合d_rel(x)的比例因子可得到绝对距离图d(x)。t(x) exp(-β(λ) * d(x))可以计算。直接代入逆向成像公式即可求解清晰图像J(x) (I(x) - B(∞)) / t(x) B(∞)这里的B(∞)是作为环境光项被加回的有些实现中会省略取决于你对输出图像的定义。保留它能使结果看起来更自然符合“空气中拍摄但带有水下环境光”的视觉效果。后处理与细节 直接除以上面计算的t(x)可能会在距离很远t(x)接近0的区域导致噪声放大。因此通常需要设置一个透射率下限t0例如 0.1当t(x) t0时令t(x) t0进行平滑过渡。此外计算出的J(x)可能超出显示范围0-255需要进行适当的色调映射如 Gamma 校正来生成视觉舒适的最终图像。4. 从论文到实践复现 Sea-thru 的工程化挑战读懂了论文不等于就能跑出好结果。将 Sea-thru 从公式转化为可运行的代码中间有一系列的工程决策和陷阱。4.1 数据准备与预处理好的输入是成功的一半Sea-thru 对输入图像有一定要求忽视这些要求会导致失败。图像格式必须使用RAW格式或线性化的RGB图像。绝大多数相机输出的JPEG、PNG等格式都经过了伽马校正Gamma Encoding其像素值与场景亮度是非线性关系。而 Sea-thru 的物理模型建立在光强线性叠加的基础上。直接使用伽马校正后的图像会破坏模型的基本假设。操作如果使用RAW文件如 .CR2, .NEF需用 DCRAW 或 LibRaw 等库解码并跳过相机的色彩处理和伽马曲线直接获取线性传感器数据。如果只有JPEG则需要应用近似逆伽马变换如sRGB_to_linear但这会引入误差。相机标定为了获得准确的色彩需要相机的颜色校正矩阵。水下光线本身色偏严重相机的自动白平衡完全不可信。最好在空气中拍摄标准色卡标定出相机在“正确白平衡”下的CCM。在水下拍摄时关闭所有自动白平衡和色彩优化设置采用手动模式或固定色温。拍摄建议避免直射光源尽量使用自然光或均匀的布光。直射的潜水手电筒会在局部产生高光和非均匀的后向散射破坏B(∞)均匀的假设。包含背景区域构图时确保画面中有足够远的、没有细节的“水体背景”以便可靠估计B(∞)。多拍参考如果可能在同一潜点、同一时间拍摄包含水下色卡的照片用于标定β(λ)。4.2 关键参数调优没有放之四海而皆准的默认值论文给出了算法框架但许多参数需要根据具体水质和场景调整。参数/步骤含义调优策略与影响图像分块大小用于估计B(∞)的局部区域尺寸通常为图像尺寸的1/20~1/30。水质浑浊、噪声大时可适当增大块尺寸以平滑噪声。场景细节丰富时可减小块尺寸以更精确捕捉背景区域。选择低方差块的比例 (k)用于计算B(∞)的“最雾”块占比默认0.1%可能偏小。在背景区域不明显的图片中可提高到0.5%~1%。比例过高会引入物体区域像素导致B(∞)估计偏暗。颜色通道对选择计算相对距离时使用的两个通道论文常用绿(G)和蓝(B)通道因为它们在水中衰减差异明显。在非常清澈或特殊水色如富营养化导致的黄绿色水域可以尝试红(R)和绿(G)通道。需要观察I_G/I_B图像的梯度是否主要反映距离变化。泊松方程求解边界条件恢复相对距离时的数学约束通常使用纽曼边界条件梯度在边界处为零。确保求解器的稳定性检查输出的相对距离图是否具有合理的连续性和平滑度没有剧烈的突变。衰减系数初始化方法B中优化β(λ)的起点可以使用已知的清水衰减系数作为初始值如 Jerlov 水体分类中的 I 类水。错误的初始值可能导致优化陷入局部最优。透射率下限 t0防止噪声放大的阈值典型值在0.05到0.2之间。值越小对远处细节恢复越激进但噪声也越大值越大结果越平滑但可能损失远景对比度。需要根据图像信噪比权衡。4.3 常见失败案例分析与调试如果你的 Sea-thru 处理结果颜色怪异、细节模糊或出现伪影可以从以下方面排查结果整体颜色仍然严重偏蓝/绿检查点B(∞)估计值是否过小如果B(∞)估计偏暗意味着算法认为后向散射光很弱那么减去的就少残留的色偏就多。可以尝试增大分块大小或比例k。检查点衰减系数β(λ)估计是否准确特别是红通道的β_R。如果β_R估计过小会导致计算出的红光透射率t_R偏高从而对红光补偿不足。尝试使用方法A色卡重新标定或检查灰色世界假设是否因场景色彩单一而失效。图像出现斑块状伪影或过度增强检查点相对距离图d_rel(x)是否噪声过大这通常源于“颜色比平滑假设”在纹理复杂区域失效。可以尝试对I_G/I_B图像在进行拉普拉斯计算前进行轻微的高斯滤波平滑掉高频的纹理噪声保留主要的深度边缘。检查点透射率下限t0是否设置过小尝试增大t0。远景区域出现彩色噪点这是逆问题固有的“病态性”体现。当t(x)非常小时远景(I - B)/t这个除法会将微小的图像噪声甚至是传感器噪声急剧放大。除了设置t0还可以考虑对最终输出的J(x)在远景区域施加更强的去噪滤波。5. Sea-thru 的局限性与适用边界没有任何算法是万能的Sea-thru 在其假设成立时效果惊人但了解其边界能帮助我们在正确场景使用它或寻找替代方案。均匀水体假设这是最核心的局限。算法假设水体光学性质衰减系数比在整幅图像内是均匀的。这在开阔大洋Jerlov I 类水中近似成立但在近岸、河口、湖泊等二类水体中悬浮物、叶绿素浓度变化会导致假设失效恢复效果下降。自然光照与静态场景模型假设光照来自上方水面且均匀且场景是静态的。对于使用人工光源近距离照明、或拍摄快速游动的生物模型不匹配。计算复杂度与实时性求解泊松方程和优化衰减系数是计算密集型操作处理单张高分辨率图像可能需要数秒到数十秒难以用于实时视频流。对距离信息的依赖算法严重依赖从图像中估计出的距离信息。在缺乏纹理、低对比度或场景深度变化平缓的区域距离估计可能不准导致恢复效果不佳。与深度学习方法对比 近年来基于深度学习的水下图像增强方法如 WaterNet、Ucolor、UIEC^2-Net大量涌现。它们通常通过大量成对退化-清晰或非成对数据训练端到端网络能处理更复杂的水体和非均匀光照且推理速度极快。Sea-thru 优势物理可解释性强恢复颜色具有物理意义光度量无需训练数据在符合其假设的清水场景中色彩还原可能更准确。深度学习优势适应性强能处理复杂水体速度快能联合去噪、增强细节。如何选择如果你的应用强调色彩保真度和物理可解释性如科研定量分析且拍摄环境是相对均匀的清水Sea-thru 是优选。如果你需要处理各种复杂水下视频、追求实时性和整体视觉增强效果深度学习方法是更实用的选择。在我自己的水下图像处理项目中我常常将 Sea-thru 作为一个“基准方法”或“预处理工具”。对于符合条件的数据它的结果令人信服对于不符合的数据其失败模式也能帮助我理解图像的退化机制从而为设计或选择更鲁棒的深度学习模型提供洞见。理解物理模型永远是我们应对复杂现实世界问题的坚实起点。