该篇论文的链接:https://arxiv.org/abs/1905.04161
代码实现:https://github.com/zhangyhuaee/KinD
数据链接:https://pan.baidu.com/s/1ABMrDjBTeHIJGlOFIeP1IQ
点燃黑暗:实用的低光图像增强器点燃黑暗:实用的低光图像增强器
摘要:
在弱光条件下拍摄的图像通常(部分)能见度较差。除了不理想的照明,多种类型的退化,如噪音和颜色失真,由于相机的质量有限,这些退化隐藏在黑暗中。换句话说,仅仅提高黑暗区域的亮度将不可避免地放大隐藏的退化。
该项工作构建了一个简单而有效的网络,该网络受 Retinex 理论的启发,将图像分解为两个组件。一个组件负责光调节(照明),而另一个用于去除退化(反射)。
值得注意的是,我们的网络使用在不同曝光条件下拍摄的成对图像进行训练,而不是使用任何地面真实反射率和照明信息。
1.前言介绍:
在昏暗的光线条件下捕捉高质量的图像一直都是一个挑战。虽然一些操作,如设置高ISO,长曝光和闪光灯,可以适用于这种情况,但他们有不同的缺点。例如,高ISO增加了图像传感器对光的灵敏度,但噪声也会被放大,从而导致低信噪比。长时间曝光仅限于拍摄静态场景,否则很可能会遇到模糊的结果。使用闪光灯可以在某种程度上照亮环境,然而,这经常会给照片带来意想不到的光晕和光线不平衡问题,让照片看起来很不舒服。
在过去的几年里,低光图像增强一直是一个长期存在的问题,并取得了很大的进展,但开发一个实用的低光照图像增强器仍然具有挑战性,因为灵活地照亮黑暗,有效地消除退化,高效这些问题都应该被考虑到。
基于深度学习的方法在去噪、超分辨率等数值底层视觉任务中表现优异,但其中大部分都需要训练数据包含地面实况。对于特定问题,比如低光图像增强,虽然可以确定光强的大小顺序,但是不存在ground-truth真实数据。因为,从用户的角度来看,不同的人/需求所喜欢的光照等级可能是多种多样的。换句话说,一个人不能说什么光的条件是最好的/地面实况。因此,仅将图像映射到具有特定光线水平的版本并不是很合适。
重点:
基于以上分析,我们总结了低光图像增强的挑战如下:
(1)如何从单个图像中有效地估计出光照分量,并灵活地调整光照?
(2)如何在照亮黑暗区域后去除之前隐藏在黑暗中的噪声和颜色失真等退化?
(3)如何训练一个模型,在没有明确的地面真相光条件,只看两个/几个不同的例子情况下增强低光图像?
1.1以前的低光图像增强方案
(1)普通方法:
直观地说,对于全局光线较弱的图像,可以通过直接放大亮度来增强其可视性。但是,如图1的第一种情况所示,包括噪声和颜色失真在内的视觉缺陷沿着细节显示出来。对于包含明亮区域的图像,例如图1中的最后两张,这种操作很容易导致(部分)饱和/过度曝光。以直方图均衡化及其后续为代表的技术,试图将值范围映射到[0,1],并平衡输出直方图,以避免截断问题。这些方法实际上是为了提高图像的对比度。另一种映射方式是伽马校正(GC),它以非线性的方式在每个像素上单独执行。虽然GC可以提高亮度,尤其是暗像素的亮度,但是它没有考虑到某个像素与其相邻像素的关系。普通方法的主要缺点是它们几乎不考虑真实的光照因素,这通常使增强的结果在视觉上很不稳定,并且与真实场景不一致。
(2)基于亮度的方法;
与普通方法不同的是,这类方法都意识到光照的概念。由retinex理论得到的关键假设是(彩色)图像可以分解成两个部分,即反射率和照度。早期的尝试包括单尺度Retinex (SSR)和多尺度Retinex (MSR)。但受限于生成最终结果的方式,他们的输出通常看起来不自然,而且在某些地方过度增强。
Retinex理论认为,人眼观测到的图像S是光照图像L和物体反射图像R的乘积。而R才是物体决定的恒常性的图像;可以通过去除光照影响或者对光照分量进行校正,来达到增强图像的目的。Retinex算法详解
(3)基于深度学习的方法:
随着深度学习的出现,一些底层的视觉任务从深度模型中受益,如去噪、超分辨率、压缩伪影去除、去雾。针对本文的目标任务,在[19]中提出的低光网络(low-light net, LLNet)构建了一个深度网络,作为同时进行对比度增强和去噪的模块。Shen等人认为多尺度retinex相当于具有不同高斯卷积核的前馈卷积神经网络。受此启发,他们构建了卷积神经网络(MSR-net)[20]来学习暗图像和亮图像之间的端到端映射。Wei等人设计了一个深度网络,称为RetinexNet[21],它集成了图像分解和光照映射。请注意,Retinex-Net额外使用了一个现成的去噪工具(BM3D[22])来使反射率组件的输出更清晰。**这些策略都假设存在具有“地面实况”光的图像,而没有考虑到噪声对具有不同光的区域的不同影响。简单地说,在提取光照因子后,暗区在反射率上的噪声水平要比亮区高得多。在这种情况下,采用/训练具有在图像(反射率)上均匀处理的去噪器不再适用。**此外,上述方法并没有明确处理彩色失真的退化问题,但这在真实图像中并不少见。最近,Chen等人提出了一种基于全卷积网络[23]端到端训练的低光图像处理管道(SID),可以同时处理噪声和颜色失真。然而,这项工作是针对raw格式的数据的,限制了其适用的场景。如[23]中所述,如果修改网络以接受JPEG格式的数据,性能会显著下降。
现有的大多数方法有通过伽玛校正来调整光照、指定一个存在良好光照图像的精心构造的训练数据(low-groudtruth图像对数据)、或者利用融合技术。对于伽玛校正,它可能无法反映不同的光(曝光)水平之间的关系。(参数的实际意义不明显)至于第二种方式,需要严格限制在指定的光照水平图像包含在训练数据中。而对于最后一个,它甚至不提供操作选项。(没办法调节光照)因此,需要学习一种映射函数,可以任意将一种光(曝光)级转换为另一种光(曝光)级,为用户提供灵活的调节。
该项工作的主要贡献
该研究为实际解决低光增强问题提供了一个深度网络。这项工作的主要贡献可以总结为以下几个方面:
受视神经网络理论的启发,该网络将图像分解为反射率和照度两部分,将原空间解耦为两个较小的空间。
该网络使用在不同光/曝光条件下捕获的成对图像进行训练,而不是使用任何地面真实反射率和照明信息。
我们设计的模型提供了一个映射功能,可以根据用户的不同需求灵活地调整光线的等级。
该网络还包含一个模块,能够有效地去除通过亮暗区域放大的视觉缺陷。
我们进行了大量的实验,以证明我们的设计的有效性和它的优越性,可以替代目前最先进的技术。
方法
**一个理想的低光图像增强器应该能够有效地去除隐藏在黑暗中的退化,并灵活地调整光照/曝光条件。**我们建立一个深层的网络,用KinD来表示,来达到这个目的。如图2所示,**网络由两个分支组成,分别用于处理反射率和照明。从功能上看,也可以分为图层分解、反射率恢复、光照调节三个模块。**在接下来的小节中,我们将解释关于网络的细节。
2.1考虑和动机
2.1.1层分解
正如第1.1节所讨论的,普通方法的主要缺点来自于光照的盲目性。因此,获取光照信息是关键。如果从输入中很好地提取了光照,剩下的部分将保存细节信息和可能的退化,在这些信息中可以执行恢复(或降解去除)。在retinex理论中,一幅图像I可以被看作是两个成分的合成,即反射率R和照度L,I = R◦L,其中◦为元素级别的操作。此外,以Retinex的方式分解图像,从而将一个退化的低光图像映射到两个更小的子空间,期望更好和更容易正则化/学习。此外,照明图是灵活调整光照/曝光条件的核心。在此基础上,提出了基于retinex的层分解方法,该方法适用于目标任务。
2.1.2数据使用和先验
在光照条件下,没有明确定义的地面实况。(作者的主观意向)此外,真实图像的地面真实反射率和照度图是很难获得的。层分解问题本质上是欠定的,因此附加的先验/正则因子很重要。 假设图像没有退化,某个场景的不同镜头应该具有相同的反射率。(物体对光的反射是固有属性,不因光照变化而变化)光照图虽然可以强烈地变化,但其结构简单且相互一致。(脱离物体反射,光照应该是分布简单的)在实际情况下,在低光图像中体现的退化往往比在明亮的图像中更严重,这将被转移到反射率组成部分。**这启发我们,在明亮光照下的反射可以作为参考(地面实况),为退化的低光图像训练一个修复器。**有人可能会问,为什么不使用合成数据呢?因为它很难合成。这种退化不是简单的形式,并且随着传感器的不同而变化。请注意,反射率(定义良好的)的使用完全不同于使用(相对)明亮的图像作为低光图像的参考
2.1.3 照明引导反射恢复
在分解后的反射率中,光照较暗区域的污染要大于光照较亮区域的污染。从数学角度来看,一个退化的低光图像可以自然地建模为I = R◦L + E,其中E表示污染的组成部分。通过简单的代数步骤,我们有:
˜R代表被污染的反射率,˜E是光照解耦的退化。以加性高斯白噪声的E∼N(0,σ2)为例,˜E的分布更加复杂而且显著与L相关。这是说,反射恢复处理不能均匀的在整个图像上进行,可以用光照映射作为指导。有人可能会问,如果直接从输入I中移除E会怎么样?一方面,不平衡的问题仍然存在。从另一个角度看,内在的细节将会和噪音有差异地混淆。另一方面,与反射率不同的是,由于L的变化,我们不再有合适的参考来进行这种方式的降解去除。类似分析对其他类型的退化也适用,比如颜色失真
2.1.4 随意的照明操纵
不同的人/应用程序喜欢的照明强度可能是有差异的。因此,一个实用的系统需要为任意光照操作提供一个接口。在文献中,增强光条件的三种主要方法是融合、光级约化和伽玛校正。基于融合的方法,固定的融合模式缺乏光调节的功能。如果采用第二种方法,训练数据集必须包含具有目标光照水平的图像,这限制了它的灵活性。对于伽马校正,虽然可以通过设置不同的γ值实现,但它可能无法反映不同的光(曝光)水平之间的关系。本文提倡从真实数据中学习灵活的映射函数,允许用户指定任意的光照/曝光级别。
2.2 KinD Network
在思考和动机的启发下,我们构建了一个深层的神经网络来点亮黑暗,用KinD表示。下面,我们将从功能的角度详细描述这三个子网。
层分解网络
从一个图像中恢复两个组件是一个高度不适定的问题。(适定问题是指定解满足下面三个要求的问题:① 解是存在的;② 解是唯一的;③ 解连续依赖于定解条件,即解是稳定的。这三个要求中,只要有一个不满足,则称之为不适定问题。)由于没有基于地面实况的信息指导,所以具有良好设计的损失是很重要的。幸运的是,我们有不同的光/曝光配置的成对图像[Il, Ih]。回想一下,某个场景的反射率应该在不同的图像之间共享,我们将分解的反射率对[Rl, Rh],调整为相近(理想情况下,如果没有退化,则两者应相同)。此外,光照映射[Ll, Lh]应该是分段光滑和相互一致的。
采用下列定义:
(1) 反射率相似度:
|| · ||2 表示 & 2 范数 (MSE)。
(2)光照平滑度:
其中∇代表包含∇x(水平)和∇y(垂直)方向的一阶导数运算符,||·||1表示&范数。 此外, e是一个小的正常数(在这项工作中为 0.01),用于避免分母为零,并且 | · | 表示绝对值运算符.
该平滑度项用来测量亮度相对于输入的相对结构。
对于 I 中边上的位置,L 的惩罚很小; 而对于 I 中平坦区域的位置,惩罚变得很大。(光照在平滑的物体上分布应平滑)
(3)相互一致性:
(这个损失我的理解是在强化边缘信息,暗光和正常光的光照图梯度和较小或较大时表示此时的光照在平滑物体表面(分布均匀)或者边缘(光照分布差异较大),只有在梯度和不大不小时才惩罚,应该是两者一个梯度大一个梯度小的情况,也就是两个光照图有差异且差异不是特别大(因为有一个特别大也会使损失变小)的区域)
图4描述了函数的性质,其中c是控制函数形状的参数(代码中c取值为10)。从图4可以看出,随着u的增加,惩罚值先是上升,然后下降到0。这个特征很好的拟合了相互的一致性,即较强的双方的边缘应保留,较弱的互边应舍弃。我们注意到,设置c = 0会导致m上简单的一范数损失。此外,分解的两层应该重现输入,这受到重构误差的限制,定义为:
这一项旨在使模型分解出来的反射分量R和光照分量L能够尽可能重建出对应的原图。
因此,层分解网的损失函数为:
层分解网络包含两个分支,分别对应于反射率和照度。反射率分支采用典型的5层UNet[29],之后是卷积层和Sigmoid层。光照分支由两个conv+ReLU层和一个conv层组成,它们连接在来自反射率分支的特征图上(可能会从光照中排除纹理),最后是一个Sigmoid层。详细的层分解网络配置如表1所示。
2.2.2 反射恢复网络:
如图3和图5所示,**来自低光图像的反射率图比来自明亮光图像的反射率图更容易受到退化的干扰。利用更清晰的反射率作为混乱反射率的参考(非正式的地面实况)是我们的原则。**对于寻找恢复函数,目标简单定义如下:
SSIM(··)为结构相似性度量,ˆR对应于恢复的反射。第三个式子致力于质地上的相似度。这个子网类似于层分解子网中的反射分支,但更深。示意图配置如图2所示,详细内容见附录。我们还记得,退化在反射上的分布复杂,且强烈依赖于照明分布。因此,我们将光照信息和退化的反射一起引入到恢复网络中。这个操作的有效性可以在图5中观察到。在两种不同退化(光)级的反射率图中,BM3D的结果可以一定程度的去除噪声(不考虑自然的颜色失真),但模糊效果还是几乎无处不在。在我们的结果中,窗口区域的纹理(例如灰尘/水基污渍)保持清晰和锐利,而在黑暗区域的退化被大量去除,细节(例如瓶子上的字符)得到很好的修复。此外,我们的方法还可以解决颜色失真的问题。反射恢复网络的具体配置如表2所示。
2.2.3 亮度调节网络
由于不存在用于图像的地面实况光照级别。因此,为了满足不同的需求,我们需要一种机制来灵活地将一种光照条件转换为另一种光照条件。我们有成对的照明图。虽然不知道之间的确切关系,我们可以大致计算强度的元素级比率α(Lt / Ls)。这个比例可以作为指标来训练一个调整函数从一个光照条件Ls到另一个标准Lt,如果调整光照的水平更高,则α> 1,否则α≤1。在测试阶段,α可以由用户指定。该网络是轻量级的,包含3个conv层(2个conv+ReLu和1个conv)和1个Sigmoid层。我们注意到指标α是作为输入的一部分扩展到一个特性映射上。(代码中是把这个比值扩展成一个常数通道与输入图像合并变成4通道)以下是照明调节网的损失函数:
ˆL是调整后的光照图。图6显示了我们的学习调整函数和伽马校正之间的差异。为了公平比较,我们通过优化参数γ达到类似的整体光强度。我们考虑了两个不失一般性的调整,包括调亮亮度和调暗亮度。图6 (a)为光源照明,(b)和(d)是经gamma校正后的结果,©和(e)是我们的方法。为了更清楚地显示这种差异,我们绘制了x = 100,200,400(这个地方x代表什么我没搞明白)(感谢评论区指出,x是在原图上取的横坐标位置,也就是下图中图a的那三条线)时的一维光照强度曲线。对于调暗亮度的情况,我们的学习方法在相对明亮的区域比伽玛校正在强度上减少得更多,而在黑暗区域减少得更少或几乎相同。对于调亮的情况,出现了相反的趋势。换句话说,我们的方法在相对较暗的区域增加较少的光照,而在较亮的区域增加更多或相同的光照。这种学习方式更符合实际情况。此外,α比γ方式更方便用户操作。例如,设置α为2意味着将光照*2。(????我怀疑)详细的照明调节网络配置如表3所示。
3 实验验证
3.1 实现细节
参考知识:
1.BM3D算法:用来对反射图的去噪声
2.PSNR :峰值信噪比。PSNR值越大,就代表处理后的图象失真越少。https://zhuanlan.zhihu.com/p/50757421
3. SSIM :结构相似性。SSIM值越高表明质量越好