ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

低光照图像增强全解析:传统方法与深度学习路线对比

低光照图像增强全解析:传统方法与深度学习路线对比 1. 低光照图像增强为什么突然火了低光照图像增强这个方向其实在计算机视觉里算是个老话题了但这两年热度一直在线刷论文的频率明显比前几年高不少。核心问题很直白在光线不足的环境下拍出来的照片要么太暗、要么噪声大、要么颜色偏得没法看怎么把这些图处理成清晰、自然、可用的图像。你可能觉得这有什么难的把亮度拉起来不就行了真没那么简单。直接提亮会让暗部噪声一起放大颜色也会失真高光区域还会过曝。这背后牵扯到成像模型、光照估计、噪声建模、色彩恢复一堆问题所以才有那么多论文在反复折腾。这篇综述速读系列的第一篇我先把低光照图像增强的整体技术脉络梳理一遍包括这个任务为什么难、经典方法大概分几类、各自的思路和问题在哪里以及常用的数据集和评价指标。后续再针对具体的技术分支逐篇展开比如基于深度学习的方案对比、真实场景数据集的分析等。读这篇内容适合谁刚入门这个方向的研究生、要落地图像增强功能的工程师或者做摄影后期工具的产品经理应该都能从中拿到一些有价值的信息。我会尽量把论文里的核心逻辑讲清楚不堆公式但会告诉你每类方法的思路和边界在哪里。2. 为什么低光照图像这么难处理先说一个容易忽略的事实低光照图像的问题不只是“暗”。把一张暗图的直方图拉宽你会发现三个典型问题同时存在——噪声被放大、色彩发生偏移、细节纹理丢失。拿噪声来说图像传感器在暗光下的信噪比本来就低CMOS的暗电流和读取噪声都会变得更明显。一旦用全局提亮的方式去处理暗部区域的噪声会被成倍放大出现那种密密麻麻的彩色噪点。这个问题在手机夜景模式里其实很常见你放大看暗部就会发现无数彩色的“雪花”。再说色彩偏移。低光照环境下环境光的光谱分布往往和白天差别很大比如路灯是暖黄色、月光是冷蓝色相机的白平衡算法很难正确还原。很多增强算法只关注亮度通道完全不管色度通道结果就是处理完的图像整体偏蓝或者偏黄观感很差。细节丢失则是另一个维度。暗部区域的灰度值很接近很多纹理信息都被量化噪声淹没了直方图会挤在低灰度区间。这时候单纯做对比度拉伸区别不大因为信息已经没了算法只能靠“猜”或者“编”来补细节这就引出后面要讲的一大堆方法。还有一个不那么显眼的坑曝光不均匀。真实的低光照照片往往不是整体暗而是暗部和高光区域同时存在比如夜景里远处霓虹灯很亮、近处地面很暗。如果用一个全局映射把所有像素都拉亮高光区必然过曝。所以低光照增强不能只看亮度分布还要考虑空间上的光照变化这就是为什么基于全局映射的传统方法很快就遇到了天花板。3. 传统方法的核心思路和绕不开的问题3.1 直方图均衡化及其变体最朴素的做法是直方图均衡化Histogram Equalization, HE。思路就是把灰度直方图从集中在暗区变成均匀分布让图像的对比度更高。直观理解就像把一个班里成绩都集中在40分的学生强行按排名摊成0到100分都有这样分数差距拉开了但绝对水平并没有真正提升。HE的缺点很明显对噪声敏感容易过度增强而且处理完的图像看起来很不自然有一种“塑料感”。后来陆续出现了CLAHE限制对比度自适应直方图均衡化、BBHE保持亮度的双直方图均衡化等变体主要思路是把图像分块处理并对对比度拉伸幅度做限制避免把噪声也一起放大。这类方法跑得很快在低算力设备上很实用但效果上限很低。因为算法本身没有对“光照”和“反射”做物理建模只是重新分配灰度值遇到复杂光照场景基本就力不从心了。3.2 Retinex模型照亮一切的基础说到低光照增强绕不开Retinex理论。这个理论的核心思想非常优雅人眼感知到的图像可以分解为光照分量和反射分量。光照分量代表环境光的分布反射分量代表物体本身的属性颜色、纹理增强的本质是估计光照分量把它从图像里“剥离”出来然后对光照做调整再和反射分量重新合成。打个比方一块白布在暗房里拍出来是灰的在阳光下拍出来是亮的。Retinex就是要区分出来颜色信息白布是反射分量亮度变化灰vs亮是光照分量然后把光照提上去让白布在暗房的照片也显示出白色。基于Retinex的经典方法有单尺度RetinexSSR、多尺度RetinexMSR、带颜色恢复的MSRCR等。这类方法比直方图均衡化效果自然不少但也会产生光晕效应——在光照剧烈变化的边缘比如窗户边框光照估计不准会留下一个明显的亮圈。更深层的问题在于Retinex分解本身是一个病态问题。给定一张图光照和反射的拆分方式有无数种传统方法通常依赖各种先验比如光照是平滑的、反射是稀疏的来约束解空间。这些手工设计的先验在复杂真实场景下并不总是成立所以效果比较依赖调参。3.3 基于物理模型的增强另一条路线是从成像模型反推。最常用的是大气散射模型的变体这个模型本来是用在去雾上的成像强度 场景辐射 × 透射率 大气光 ×1 - 透射率。低光照图像在某些层面上和雾图有相似性——对比度低、色彩灰暗只不过成因不同所以有研究者把去雾方法直接迁移过来。比较有代表性的是Dong等人在2011年的工作把低光照图像先做反转再当成雾图来做去雾最后再反转回来。这个思路挺有启发性但效果只能说一般因为低光照和雾的物理成因毕竟不同反转后的“伪雾”和真实雾还是有不小差别。物理模型方法的优点是可解释性强每一步都有明确的物理含义但缺点也很直接模型是简化过的真实场景的光照和大气条件远比模型复杂误差会一步步累积。所以这类方法在学术上有价值实际落地比较少。4. 深度学习方法有哪些流派深度学习起来之后低光照图像增强基本被神经网络统治了。整体可以分成三大流派基于监督学习的、基于半监督/无监督学习的、基于特定任务联合优化的。每种流派背后都有典型的论文和设计思路我逐个展开讲。4.1 有监督学习的开局与困局最早期的深度学习方案直接端到端训练一个CNN输入暗图、输出亮图用成对的暗图/亮图数据来监督。LLNet是比较早的工作之一用堆叠的稀疏自编码器做增强。真正的分水岭是2018年的RetinexNet它把Retinex理论塞进了网络结构里一个分解网络DecomNet把输入图像分解成光照图和反射图然后用一个增强网络处理光照图最后合并输出。这样做的好处是网络结构本身带有物理意义效果比纯黑盒CNN更可控。但RetinexNet的核心痛点也很明显——它需要成对数据。低光照图像增强的数据集构建本身就非常难你没法让同一个场景在完全相同的光照条件下同时拍一张暗图、一张亮图因为拍摄时间不同、手抖、物体移动都会引入干扰。合成数据倒是容易做给亮图手动调低亮度再加噪就行但合成数据和真实暗光场景之间的域差距太大模型在合成数据上训练得再好到真实照片上还是拉胯。这就是有监督方法面临的核心矛盾。4.2 无需配对数据的半监督与无监督路线为了解决配对数据难获取的问题研究者开始探索不依赖配对数据的方法。一个代表性工作是EnlightenGAN。它采用GAN架构用全局-局部判别器来区分增强结果和真实亮图同时加入了色彩恒常性损失和感知损失来约束输出质量。不需要严格成对的数据只在循环一致的框架下学习映射关系这在实际应用中友好很多。另一个思路是零参考Zero-Reference方法以Zero-DCE为代表。这个方法的网络结构其实不复杂核心贡献在于设计了几个不需要参考图就能计算的无参考损失函数空间一致性损失让相邻像素的亮度变化趋势保持一致曝光控制损失把亮度向期望的曝光水平靠拢一般设为0.6左右色彩恒常性损失用灰度世界假设约束三个颜色通道的比例光照平滑损失防止光照图出现剧烈跳变。这四个损失函数配合一个轻量网络就能在不同光照条件下做增强而且是逐像素动态调整的效果很自然。Zero-DCE系列后来还出了增强版本引入了感知损失和颜色损失实际效果又提升了一截。无监督方法最大的优势是训练数据好收集——随便拿一批亮图就行了不需要配对。但代价是增强效果的上限受损失函数设计约束遇到极端低光照场景有时候会翻车。4.3 特定任务联合优化与真实数据的回归第三派思路不再孤立地做“增强”这一步而是把增强和目标任务捆绑在一起。比较典型的是做人脸检测的——直接对暗图做人脸检测效果很差一是有专门的暗光人脸检测数据集和算法把检测器设计成能在暗图上直接提取特征或者把增强网络和检测网络联合训练让增强的结果更适合检测器使用。低光照目标检测、夜间语义分割、暗光OCR都属于这类范畴。另一个关键变化是真实数据集的回归。前面提到合成数据有域差距所以这几年陆续出现了用长曝光、短曝光配对方式采集的真实低光照数据集比如MIT的See-in-the-Dark系列。这类数据集的构建方式是固定相机拍一张短曝光暗图和一张长曝光亮图作为参考尽量把拍摄间隔缩到最短来减少动态物体影响。用真实数据训练的优势很明显模型在真实场景的泛化能力大幅提升。但真实数据集的采集成本很高而且不同场景对“增强”的目标定义不同——有人希望增强后亮度尽量接近长曝光参考图有人希望保留夜景氛围标准本身就有主观性。5. 数据集和评价指标算法好坏的尺子5.1 常用数据集一览低光照增强常用的数据集我列成表格说说各自的特点数据集类型规模特点与适用场景LOL真实配对500对左右室内外场景暗图/亮图通过曝光时间差异获取经典基准MIT Adobe FiveK真实配对5000张专业摄影师手动调图作为GT主要用于图像增强与色调映射SID真实配对5094个场景索尼/富士相机短长曝光配对极暗光偏向RAW域处理LIME无GT真实暗图只有暗图用于无参考评价适合测试增强算法主观效果DARKFACE真实暗图约6000张人脸检测专用低光照数据集暗光人脸检测benchmark常用选数据集要结合你实际的任务。如果做学术刷指标LOL是标配如果做手机拍照算法SID这种RAW域的更贴近真实pipeline如果是做视频监控或安防场景DARKFACE或自己采的数据会更有说服力。5.2 有参考与无参考评价指标增强算法的评价指标分两类有参考需要GT亮图和无参考只有暗图输入。有参考指标最常用的是PSNR峰值信噪比和SSIM结构相似性。PSNR衡量的是像素级误差SSIM衡量的是亮度、对比度、结构三个维度的相似性。还有个基于感知的指标是LPIPS它用深度网络特征的距离来度量图像感知差异和人的主观感受相关性更高现在的论文基本都会报这个指标。但PSNR和SSIM有个公认的毛病它们和人眼感受的相关性并不好。一个算法PSNR刷得高肉眼看起来反而可能偏色、不自然。所以论文里一般都要搭配可视化结果做主观对比不然没法说服人。无参考指标主流是NIQE和BRISQUE它们假设自然图像有一些统计规律增强后的图越符合这些规律分数越高。零参考方法的论文里会特别依赖这类指标因为没有GT只能用统计模型来评价。但无参考指标的问题也不少很多时候一个明显偏红的图NIQE分数反而很高所以只能作为参考不能全信。6. 现实场景里的坑和我的建议看完这么多方法你可能会问实际项目里到底该选哪条路根据我做过的落地经验先说几个真实的坑。第一个坑是算力限制。很多低光照增强模型在论文里效果很好但用的是高分辨率输入加上多层网络推理耗时不低。如果目标是手机或嵌入式设备上的实时处理像Zero-DCE这种轻量模型勉强能跑但效果上限有限RetinexNet那类重量级网络基本告别移动端。落地前一定先明确目标分辨率和帧率再倒推选型别等模型训完了才发现跑不动。第二个坑是评价指标的迷惑性。之前有个项目我们团队把算法PSNR刷得比baseline高了好几个dB但产品经理拿着样张直接否了——因为暗部细节恢复是好了但人脸肤色偏得离谱。后来我们加入了色彩损失和感知损失重新训练PSNR反而掉了一点但主观效果和用户评分都上去了。做增强算法的优化目标一定要结合实际使用场景不能只盯指标。第三个坑是合成数据的过拟合。用合成数据训练出来的模型看起来在测试集上很能打一旦拿到真实夜景视频里就原形毕露不是发绿就是颗粒感爆炸。个人建议是训练阶段以合成数据为主没问题但一定要在真实场景数据上做微调哪怕真实数据只有几十张效果提升都会非常明显。那到底怎么选我按场景给一个简单参考学术研究、刷基准指标用LOL数据集选有监督方法作为baseline逐步加模块改进这是最容易出成果的路径。移动端实时处理优先考虑Zero-DCE这种轻量设计方案或者干脆用CLAHE加轻量去噪模块传统方法和深度方法结合的性价比最高。高画质后处理如摄影App建议用EnlightenGAN或基于Transformer的增强模型计算量大但画质上限高色彩还原更自然。视频监控等暗光检测任务不要单独做增强步骤直接把增强网络和检测网络联合优化或者去掉增强环节改用暗光鲁棒的特征提取结构端到端的最终性能通常会更好。7. 后续系列会聊什么这篇是综述的第一篇聊的方向偏宏观——任务难点、方法分类、数据集、评价指标以及路线选型的大体判断。很多细节我只是一笔带过没有深入解析后面我会围绕几个关键主题逐个展开。下一期可以聊基于深度学习的低光照增强方法做一次横向对比把RetinexNet、EnlightenGAN、Zero-DCE、SCISelf-Calibrated Illumination等代表性模型放到同一评测框架下跑一遍PSNR、SSIM、LPIPS和推理速度看看哪些方法是“指标好看但不好用”哪些是“效果能打而且能落地”。之后还可以单独拆解Zero-DCE的损失函数设计细节看看那几个无参考损失是怎么想出来的或者用真实数据集做一次增强效果的主观评测找出评测指标和肉眼感受的偏差到底在哪。欢迎关注这个系列也可以留言告诉我你现在遇到的具体问题比如是训练数据不够还是增强结果不自然我会优先安排。
返回列表