本发明涉及一种图像增强方法,具体说是一种基于retinex理论和深度学习的低照度图像增强方法。
背景技术:
近年来,随着计算机视觉技术的广泛应用,图像增强作为计算机视觉领域中的基础研究工作变得越来越重要,其中的低照度图像增强又是图像增强领域中的重要研究课题之一。低照度图像增强指的是通过图像处理、模式识别等技术对视觉传感器在低照度环境下产生的退化图像进行恢复。现阶段,基于不同的理论方法,低照度图像增强问题已经被很多研究者所研究,各种去模糊、去噪和亮度调整技术已被提出,但图像增强技术还面临着很多挑战。此外,低照度图像往往伴随着图像的退化和细节的缺失,这也给图像恢复工作带来了很多困难。
技术实现要素:
本发明解决其技术问题所采用的技术方案是:一种基于retinex理论和深度学习的低照度图像增强方法,包括以下步骤:
基于retinex和深度学习的低照度图像增强方法,包括:
采集多场景图像,对同一场景分别采集正常照度静态图像、低照度动态多帧图像,并建立图像配对集合;
基于retinex方法结合联合损失函数建立图像增强网络模型,包括三个模块:图像分解模块对图像进行编码得到反射特征编码及照度隐藏编码,照度调整模块对图像照度自动调整,图像重建模块实现图像内容的恢复和重建;输入采集的图像迭代训练网络模型的参数、优化网络模型;所述该模型能自动调节照度实现对低照度图像的重建使其逼近正常照度图像,从而克服低光环境下增强图像的噪声、色彩失真及图像细节恢复失效。
所述图像分解模块包括:
反射编码器,包括下采样层和残差层,用于提取低照度图像的特征图;
照度编码器,包括下采样层、池化层和全连接层,用于获取低照度图像的照度编码向量。
所述反射编码器的下采样层包括三层卷积层,每个卷积层包括卷积核、实例归一化、激活函数;所述残差层包括若干个残差块,每个残差块中包括第一卷积核、实例归一化、relu激活函数和第二卷积核,其中的两个卷积核的参数相同;
所述照度编码器的下采样层包括三层卷积层,每个卷积层包括卷积核,激活函数;所述池化层采用自适应均值池化。
所述反射编码器、照度编码器的映射关系如下公式:
h=e(x)=σe(wx+be)
其中,h表示编码器生成的隐藏向量或者特征图,x表示网络的输入图像,σe表示非线性映射关系,采用relu激活函数;w表示权重矩阵,be表示偏置。
所述照度调整模块为三个全连接层组成的多层感知机;
多层感知机的输入为照度编码向量,输出为亮度参数,用于对照度编码维度进行非线性变换,将照度编码向量映射到图像重建模块中的自适应实例归一化参数中去,并通过反向传播对照度调整模块进行反馈优化。
所述图像重建模块包括残差层、上采样层;
残差层中残差块的数量与反射编码器中的残差块数量相同,残差块中采用自适应归一化层用于接收亮度参数,对低照度图像的特征图进行亮度的自适应调节;
上采样包括3层上采样层,每个上采样层包括2倍上采样、卷积核和relu激活函数,用于图像恢复重建。
所述当每次图像重建后需要计算联合损失函数,从而判断图像重建的质量、优化网络参数;若联合损失函数的计算值未达到预设阈值则重新输入另一场景的配对图像继续迭代计算;
所述联合损失函数为反射损失、重构损失、颜色损失的加权,总损失为:
其中,n为输入图像的数量,λ1,λ2,λ3分别为重构损失、颜色损失、反射损失的权重;通过三个损失的约束,实现重建图像中的去除噪声、恢复局部细节和纠正颜色偏差;
反射分量的细节和结构损失的计算公式如下:
其中,分别为第i张正常曝光图像n和低照度图像的l的反射特征,||·||1表示l1范数,对两者进行l1正则化约束,结构相似性ssim损失函数;
重构损失的计算公式如下:
其中,表示第i张正常曝光图像,d表示解码器的非线性映射关系,表示第i张低照度图像的反射特征,||·||2表示l2范数;
颜色损失的计算公式如下:
其中,(·)p表示第p个像素点,∠(,)表示以rgb颜色为三维向量,像素点之间的颜色损失为两种颜色向量之间的夹角,总的颜色损失为所有像素点的颜色损失之和,两幅图像间颜色偏差越大损失函数越大。
本发明具有以下有益效果及优点:
2.本发明方法提出了一种端到端的改进的卷积自编码网络框架,该框架通过图像分解模块将图像进行分解,并经过照度调整模块和图像重建模块对亮度进行调整和图像重建,而且设计了一种结合重构损失、颜色损失和反射损失的联合损失函数来保证训练的准确性,确保了算法的稳定性,一定程度上解决了低照度图像增强算法所面临的挑战。
3.本发明方法在对低照度图像增强方面要优于现有的算法,且表现稳定,在自适应增强图像亮度、颜色校正和噪声去除方面效果尤为突出。
附图说明
图1是同一场景下多种曝光图像序列;
图2是不同补偿曝光生成的图像序列;
图3是物体成像过程示意图;
图4是retinex算法流程图;
图5是卷积自编码器算法流程;
图6是网络架构概述图;
图7是残差块示意图;
图8是训练过程中损失函数收敛性图;
图9是多种算法lol数据集室内场景下图像增强处理后的可视化效果对比图;
图10是多种算法低照度图像的图像增强处理后的可视化效果对比图;
具体实施方式
下面结合实施例对本发明做进一步的详细说明。结合附图对方法步骤进行说明。
方式二:通过设置不同的补偿曝光,连续拍摄三张不同补偿曝光的图像,该方式同时改变了光圈、快门、感光度等影响图像成像质量的条件,通过设置-5,-2,1(针对环境光较低的场景下,需要提高正常曝光的亮度)和-6,-3,0两种补偿曝光模式,同时设置高速连续拍摄三张的方式来拍摄图像序列,拍摄效果如图2所示。
经过人工的筛选和整理之后,我们采集的数据集中包含了200组不同的场景,共计约1000幅低照度曝光图像,每张图像都有相应的正常曝光图像,并且每个场景下都包含着多曝光图像序列。值得注意的是,在数据集中同场景下多个曝光图像可以对应于一个正常曝光参考图像。由于这些不同的曝光图像之间有着近乎一致的内容和细节,这有利于之后提出的深度学习算法能够学习出不同曝光之间的映射关系,从而学习出照度的模型,这对于提升算法的性能有着很大的帮助
2.低照度图像增强网络模型
2.1.模型理论基础
retinex理论的物理基础是物体对不同谱段的光有着不同的反射率,而不是由反射光强的绝对值所决定,因此,物体的色彩不被非均匀性光照所影响,具有一致性。
(1)首先算法的输入图像为s(x,y)的灰度图,其与反射分量r(x,y),照度分量l(x,y)关系如下公式所示,其中是点乘的关系。
(2)由于这个公式的计算量比较大,所以一般在计算时会转化到对数域,这样可以大大减少计算的复杂度,得到如下公式。
s'(x,y)=log(s(x,y))=log(r(x,y))+log(l(x,y))(2)
(3)然后利用高斯核原始图像进行卷积,得到滤波后的低频分量d(x,y),如下公式所示,其中f(x,y)是高斯核。
d(x,y)=s(x,y)*f(x,y)(3)
(4)并将各分量转换到对数域中,接下来将对数域下的原图像减去对数域的低频分量得到对数域的重建图像g(x,y)。公式如下所示。
g(x,y)=s'(x,y)-log(d(x,y))(4)
(5)最后将得到的对数重建图像取反,获得重建的图像r(x,y),公式如下。
r(x,y)=exp(g(x,y))(5)
通过上述单尺度retinex的操作,可以对图像进行增强。但是由于算法的局限性,很难在提升动态范围的同时保护颜色不失真,在此基础上,后人又提出了多尺度的retinex算法,但仍然是采用固定参数的滤波器(比如高斯滤波器)进行特征(照度分量)提取。由于数据的复杂性,基于单一理论的方法往往不能够很好的应对低照度图像增强,并且固定参数的滤波器也无法提取复杂数据中所包含的多样性特征。一个可行的方式是利用具有较强特征提取能力的深度学习网络代替传统的高斯核进行照度特征和反射特征的提取,由于其参数可以经过网络的反向传播进行更新,所以可以自适应的增强图像。通过这种方式,将卷积核设计问题转变为如何设计网络的设计和约束的问题,利用网络能够自适应的从大数据中学习到有用的特征,可以在一定程度上弥补了传统retinex方法的不足。
本发明采用网络结构是基于卷积自编码器。卷积自编码器一种经典的深度学习模型,也是现在在深度学习领域应用较多的自编码器类型,它通过卷积网络对图像进行压缩,生成隐藏变量或者特征图,然后通过反卷积对图像进行恢复。卷积自编码网络从训练数据中学习如何分解图像特征,具有强大的非线性的拟合能力,可以代替retinex方法对图像进行分解。其损失函数是最基础的重构损失,即重构图像与输入图像之误差函数,具体的算法流程图如5所示。
2.2.基于卷积自编码的低照度图像增强网络模型
基于retinex理论的图像增强可以分为图像分解、照度调整、图像重建三个部分,以此为基础,结合自编码网络,本发明提出一种改进卷积自编码网络的低照度图像增强模型,具体结构如图6所示。该网络框架由编码器和解码器组成,编码器用于图像的分解,解码器用于照度的调整和重建。模型主要有两条支路,分别是反射分量支路和照度分量支路。基于retinex理论的思想,从功能上可以将网络分为图像分解、照度调整和图像重建三个模块。反射分量支路由反射编码器和图像重建模块组成,照度分量支路由照度编码器和照度调整模块组成。模型的输入为低照度图像和正常曝光图像,输出为重建图像。为了让模型更精确的对图像进行分解和重建,提出了一种联合损失函数。训练时分别通过反射损失、重构损失、颜色损失对反射分量和重建图像进行约束。
2.2.1图像分解模块设计
类似于图4所示的retinex算法过程,目前大多数基于retinex方法还是采用单独估计照度方式实现图像增强。如果图像增强算法只对反射分量和者照度分量其中之一进行估计,那么并不能在整体上对图像分解进行约束,这会对之后照度调整和图像重建的准确度造成影响,以至于这些方法的噪声去除能力较差,不能够很好地自适应的提升图像亮度。
基于上述描述,在本发明提出的网络结构中设计了一种同时对反射分量和照度分量分解的网络模块。该网络模块分别由照度编码器和反射编码器构成。与大多数基于深度学习的方法采用的自编码器结构不同的是,传统的自编码器只是有下采样层和上采样组成,而本发明提出框架中图像分解模块中,反射编码器结构由下采样层和特征提取层组成,特征提取层可以对反射特征进行进一步的提取,从而使得网络可以获得更丰富内容和结构信息。特征提取层由残差结构组成(如图7所示),这种结构可以使得网络的层数更深,同时减少梯度消失的情况。
已有的方法虽然取得了不错的成果,但是这些算法在处理低照度图像增强问题时还面临着对噪声抑制较差的问题,这是因为没有对反射分量进行约束的结果。这些噪声主要是由于受到环境光较为昏暗的影响,拍摄的图像发生退化所产生的。当在图像分解的过程当中,一个退化的低照度图像可以被表示为:
其中e代表退化(噪声)的部分,il、rl、l分别为低照度图像、反射分量、照度分量。根据噪声的特性,其属于细节特征,所以上式经过代数运算,可以表示为:
其中表示包含噪声的反射分量,表示退化图像在反射分量上的噪声。式(7)表明,在分解真实环境下低照度图像时,噪声分量更容易被分解到反射分量当中。受此启发,如果想要更好的估计反射分量,则需要知道正常曝光图像的反射分量,以此来指导反射分量的分解。如图6紫色箭头所示,我们利用这个先验知识在反射编码器中引入了正常曝光图像,对其进行反射分量的提取,再通过设计合理的损失函数可以对参与图像重建的低照度反射分量进行有效的约束。
图像分解模块设计的原则是根据retinex理论对图像进行分解,分解之后的反射分量主要保留着图像的细节和结构等信息(例如,边缘、角点等信息),而照度分量保留着亮度分布信息。为了能更好的对上述特征进行分解,分别设计了反射分量编码器和照度分量编码器。由于反射分量保留图像信息的特点,反射分量编码器不能破坏其空间特性,其输出应为二维形式的特征图。照度编码器提取出照度特征并将其编码为隐藏向量,用其来代表该幅图像的照度,并在图像重建时用于调整图像的亮度,其特征的大小为16维。值得注意的是在两个编码器中的下采样层不能够采用相同的结构,因为这两者所包含的信息类型不同。此外,在整个照度编码器的部分不能采用归一化的方式,因为归一化会破坏原始图像的均值和方差的信息,这会影响照度特征的提取。
编码器的映射关系如下公式所示:
h=e(x)=σe(wx+be)(8)
其中h表示编码器生成的隐藏向量或者特征图,x表示网络的输入图像,e(·)表示编码器的非线性映射函数,σe表示非线性映射关系,本发明采用relu激活函数,w表示权重矩阵,be表示偏置。
图像分解模块实现细节如表1和表2所示,其中down_conv表示下采样卷积层,res表示残差块结构。反射编码器由下采样层,残差层组成。为了实现特征降维,下采样部分由3层卷积组成,每个卷积层有4*4卷积(conv),实例归一化(in),激活函数(relu)三部分组成。经过下采样卷积之后,特征的大小会缩小一倍,通道数量会扩大一倍,以保证信息的总量不变。残差层由5个残差块组成,每个残差块中由卷积、实例归一化、relu激活函数和卷积所构成,其中的两个卷积核的参数相同,且经过残差层后的特征图的大小和通道数量保持不变。在该模块中引入实例归一化层的目的对为了加快模型的收敛,同时起到正则化的作用,防止模型过拟合。
表1反射分量编码器网络
照度编码器由下采样层、池化层和全连接层所构成,其中下采样层由三层卷积层构成,每个卷积层由4*4卷积(conv),激活函数(relu)组成,这里不加入归一化层,因为在图像在归一化的时候,会消除掉数据本身的均值和方差,这些均值和方差包含着照度分布的信息。采用池化层的目的是为了适应后面的全连接层的输入尺寸,所以我们采用了自适应均值池化,卷积核大小为1*1。最后为了得到照度编码,加入了全连接层,具体实现方式是采用1*1的卷积核代替全连接层的功能,这样可以有效的减少参数量,并且配合自适应池化可以不受输入特征大小的限制。
表2照度分量编码器网络
我们的每个卷积层中采用的填充操作都为镜像填充,镜像填充指的是卷积核所处的区域的值与所接触相同大小的图像部分的值是镜像关系。
2.2.2照度调整模块设计
在增强局部和全局低照度图像时,低照度图像增强算法面临的问题不同,这需要算法本身具有照度调整的自适应性,所以为了自适应的调整图像的照度,我们提出网络结构中设计了一种照度调整模块。如图6的照度调整模块所示,照度调整模块由多层感知机构成,多层感知机的输入为照度编码向量,输出为自适应归一化层的参数。多层感知机的作用是对照度编码维度进行非线性变换,其输出的维度归一化层中参数数量相同。与以往方法不同的是,不是直接在照度特征图上进行调整,而是通过将照度编码向量映射到与图像重建模块中的自适应实例归一化(adain)参数中来实现照度的自适应调整。自适应实例归一化的缩放、平移参数γ,β是可学习的,这是网络可以实现照度调整的关键。通过这种方式将照度信息融入到整体网络的训练当中,并通过反向传播对其整个照度分量支路进行指导,从而实现图像亮度的调整。如表3所示,多层感知机的结构由三个全连接层组成,其中h为照度编码向量,fn表示全连接层,view表示维度的转换。
表3照度调整模块
2.2.3图像重建模块设计
图像重建模块是反射分量支路能够恢复重建的图像的关键,其输入为低照度图像的反射分量和归一化层参数,输出为重建图像。目的是为了根据反射和照度信息重建图像,重建图像的大小与输入图像分辨率相同。其本质上属于反射分量的解码器,为了保持自编码器的对称性,结构上与反射编码器近乎相同,顺序相反。
图像重建模块的映射关系被表示为:
r=d(h):=σd(wth+bd),(9)
其中r表示重构图像,d(h)表示编码器的非线性映射,σd表示解码器的激活函数,wt为表示隐藏层与输出之间的权重,bd表示偏置。
如表4所示图像重建模块由残差层、上采样组成,其中ref为反射分量、adain为归一化层参数、up_conv为上采样卷积层。残差层中残差块的数量与反射编码器中的残差块数量相同,且为了实现亮度的调整,残差块中采用了自适应归一化层用于接受亮度参数。上采样部分通过3层上采样层来实现,每个上采样层由2倍上采样、卷积核和relu激活函数所构成。
表4图像重建模块
2.2.4联合损失函数
在retinex理论中,图像的分解是一个不适定问题,找到一个合理的先验来指导损失函数的设计是必要的。假设图像没有产生退化,在同一场景下无论光照如何变化,拍摄的图像分解出的反射分量应该是相同的,但图像的照度分量是变化的,所以难以设计一个较好的约束去限制照度分量的分解。在真实环境下,由于设备的限制,低照度图像经常会发生退化,并且环境光越暗,拍摄的照片退化得越厉害,会产生大量的噪声。如之前所述,这些退化也属于细节信息,所以这些噪声也会被分解到反射分量当中。在图像发生退化时,引入正常曝光的反射分量来抑制噪声。反射分量保存着细节和结构信息,所以分别设计了细节损失和结构损失。
反射分量的细节和结构损失被设计如下公式所示:
其中分别为第i张正常曝光图像n和低照度图像的l的反射特征,||·||1表示l1范数,对两者进行l1正则化约束,让两者细节信息保持一致,同时也限制了低照度反射分量的噪声。即使在图像退化的情况下,两者之间也应该有着近似的结构,因为一般的噪声对结构的破坏更小,为了让两者保持结构保持一致,我们加入了结构相似性ssim损失函数,两者之间的结构相似性越大反射损失越小。通过有针对性的设计,反射损失函数可以有效的抑制噪声,提高细节恢复的能力,使恢复的图像边缘等结构信息更加真实。
经过解码器之后,生成重建图像rec,为了能够更好的约束重建图像,让其能够与正常曝光图像保持一致,应用了l2损失,公式如下所示。
其中表示第i张正常曝光图像,d表示解码器的非线性映射关系,表示第i张低照度图像的反射特征。||·||2表示l2范数。该损失函数是图像能够重建和提高亮度的关键,在整体上保持与正常曝光图像的一致性。其次,为了解决常见的色偏问题,还需要以真实图像为引导对重构的图像进行颜色的矫正,颜色损失函数设计如下:
其中(·)p表示第p个像素点,∠(,)表示以rgb颜色为三维向量,像素点之间的颜色损失为两种颜色向量之间的夹角,总的颜色损失为所有像素点的颜色损失之和,两幅图像间颜色偏差越大损失函数越大。因为损失是在颜色空间中计算,所以合理的衡量了重构图像与正常曝光图像之间的颜色偏差,提高了算法矫正颜色偏差的能力。
综合各部分的损失函数,模型的总损失为:
其中n为输入图像的数量,λ1,λ2,λ3分别为重构损失,颜色损失,反射损失的权重,三个权重的值分别λ1=1,λ2=0.03,λ3=0.1。通过三个损失的约束,组成了一个能够解决重建图像中的噪声、局部细节恢复失败和颜色偏差问题的联合损失函数。
3实验过程
我们分别在lol数据集(室内图象低照度数据集)和新建立的室外多重曝光低照度数据集上进行了测试。同时,将所提出的算法与目前最先进的算法进行了比较,包括具有色彩恢复功能的msr的算法msrcr,自然色保留增强算法npe,基于去雾算法的dong方法,基于融合的方法mf,基于照度估计的方法lime,基于照度估计和多曝光融合的bimef方法,同时对反射分量和照度分量进行估计的srie方法,基于深度学习的方法retinex-net和glad-net。关于评价指标,使用峰值信噪比(psnr)和结构相似性(ssim)对以上所有算法进行了可视化对比和量化分析。
3.1实验环境配置
本次实验的硬件平台的配置为cpu处理器intel(r)xeon(r)cpue5-2640v4@2.40ghz,内存128g,显卡nvidiageforcetitanxp,显存12g。软件环境为ubuntu18.04,深度学习框架pytorch,版本1.0。cuda版本为9.0,cudnn版本为7.2。实验的软件开发环境为pycharm2019和matlab2017。
3.2实验参数设置
模型的输入为低照度图像和正常曝光图像,输出为预测的重建图像。训练的批次(batchsize)为16,迭代次数为1000次,裁剪图像块的大小为256*256。本发明采用了自适应动量优化器adam来代替传统的梯度下降算法,它可以对不同的参数计算不同的学习率,并且该算法对内存的需求较小,梯度的一阶矩指数衰减系数β1为0.9,二阶矩指数衰减系数β2为0.999,网络初始学习率为0.001。
3.3训练数据处理
实验采用的是室内场景下的lol数据集和室外场景下的多重曝光低照度数据集。lol数据集为低照度增强算法经常采用的数据集,数据集上有500组低照度图像对。采用与已有算法相同的数据集划分方式,取数据集中的485对作为训练集,15对图像作为测试数据。室内低照度数据集有200组低照度图像序列,将其中的170组作为训练集,30组作为测试集,每一组有多幅低照度图像对。
现阶段,由于深度模型往往有着大量的参数需要训练,最大的模型参数量可达到百万级,要使得网络能够更好的拟合,则需要足够的样本数据作为支撑。但普通研究者通常不能够获取大量的数据,一般只能制作或者获取中等规模的数据进行研究,所以对数据进行增强十分必要。即使对于需求数据量较小的小型网络,数据增强也有着减少网络过拟合,提高算法的泛化性的作用。常见的数据增强方法包括图像裁剪、旋转、翻转、平移、缩放等操作。首先,本方法中采用了裁剪操作,通过该操作将输入随机的裁剪出多幅256*256大小的块。然后,通过随机的翻转、平移、缩放操作,同时保证输入的低照度图像与正常曝光图像数据的操作一致。通过数据增强,既对数据进行了扩充,又增加了算法的鲁棒性。
3.4训练过程分析
3.5室内低照度数据集对比实验
表5在lol数据集上的量化比较
3.6室外低照度数据集对比实验
图10展示了不同方法在室外低光照场景下的恢复结果,图像右上角给出了该幅图像的psnr/ssim指标。图中(a)为输入的低照度图像,(l)为对应的真实图像(正常曝光图像),(b)-(j)为其它对比方法的结果,(k)为本发明所提方法的结果。(b)bimef方法和(c)srie方法峰值信噪比psnr较低,说明存在较大的噪声,同时它们恢复结果的暗区域(图像的下半部分)并没有被增强,亮度提升的效果也不明显。(d)dong方法增强结果上的字体比较模糊,颜色存在偏差。另外,(e)融合算法mf的恢复图像中暗部区域也没能被全部增强,还有残余的低光区域。(f)lime的恢复效果较好,但是图像的颜色过于饱和,色彩上偏差过大。(g)npe方法的结果偏暗,同时也存在着噪声。(h)msrcr方法结果整体上颜色偏绿。两种深度学习的方法(i)和(j)在颜色都存在着明显的偏差,见图10中的红框中的蔬菜型图标,且(j)中图像存在着严重的模糊。本发明方法重建的图像更为清晰,颜色偏差和噪声较小,图像更接近于自然。综合来说,本发明方法在室外低照度场景下有着很好表现效果,一定程度上解决了增强局部低照度图像所面临的自适应亮度调整和局部细节恢复的问题。表6为在室外低照度数据集上平均量化指标的比较。
表6在室外低照度数据集上的量化比较
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰应视为本发明的保护范围。