技术领域
[0001]本发明涉及一种图像处理算法,具体说是一种基于雪模型和深度学习融合的图像去雪算法。
背景技术
[0002]通常,坏天气会造成图像退化,进而降低计算机视觉系统的鲁棒性。同时,坏天气也会对人类的视觉带来一定的麻烦,例如,人在雨雪天气中开车,很容易造成交通事故。坏天气条件一般分为两类:静态(雾、霾)和动态(雨、雪),静态坏天气通常由漂浮于空中的小颗粒造成,它们主要降低了图像的清晰度。动态的坏天气通常由随机运动的大颗粒造成,它们使图像部分遮挡。所以静态坏天气条件下图像的复原主要是提高图像的清晰度,而动态天气条件下图像的复原主要是补全被颗粒遮挡的部分。
[0003]近年来,许多去雨和去雾算法已经被提出,因为雪花特征的复杂性,例如各种各样的大小、形状、不均匀的密度、分布和低的透明度,相比于雾和雨的去除,雪的去除更加困难。Xu Jing等人使用引导滤波器获得引导图来引导雨雪的去除。引导滤波器的超参数通常适用于一种类型的雪,这些参数可能适用于低透明度的雪,但它们对于不透明的雪是无效的。Soo-Chang Pei等人分析了雨雪图像的颜色和频率特征,认为雨雪位于高频和明亮的区域。该方法首先提取图像的高频部分,然后使用强度先验检测雨雪,最后,通过引导滤波器恢复雨雪图像。这种方法仅使用亮度先验来检测雨雪,很可能将背景中亮的区域误检为雨雪。Zheng Xianhui等人也假设雨雪分布在图像的高频部分。该方法利用引导滤波器将高频部分分解为背景边缘和雨雪,并将低频部分作为引导图像来引导去雨雪。这些方法都假设雪继承了雨的特征,例如:频域分布,色彩空间和边缘特征,而忽略了雪的独有特征,如透明度、形状、尺寸、轨迹和分布。因此,这些基于先验的去雨雪方法只能去除一些窄的雪条纹和半透明的雪花,它们通常不能够去除宽而不透明的雪花。近年来出现了一些基于深度学习去雨的算法,而这些方法同样只能去掉半透明和窄的雪花。
发明内容
[0004]针对上述技术不足,本发明的目的提供一种基于雪模型和深度学习融合的图像去雪算法,算法从雪的模型出发,设计了一种新的检测和去除雪的深度学习网络。该方法不仅可以去除雪图像中半透明的雪花,也可以相当程度上去除宽而不透明的雪花。
[0005]本发明为实现上述目的所采用的技术方案是:一种基于雪模型和深度学习融合的图像去雪算法,包括以下步骤:
[0006]根据雪的成像过程建立雪模型I
s=S+K*I
b;其中I
s是带雪图像,S是反映雪花位置和透明度信息的雪花层,I
b是去雪后的无雪背景层图像,K为背景衰减系数,K=1-τ/T,其中T为相机曝光时间,雪花通过某一像素的时间为τ;
[0007]采集图像、合成雪花,并合成带雪图像
存储至数据库;
[0008]建立由雪花检测子网络、雪花去除子网络串联组成深度去雪网络:采用残差学习网络构建雪花检测子网络,将数据库中的带雪图像
不断输入雪花检测子网络获取反映雪花位置和透明度信息的雪花层估计值
采用密集连接的U网络构建雪花去除子网络,将数据库中的带雪图像
雪花检测子网络输出的雪花层估计值
输入雪花去除子网络用于训练网络、输出去雪后的各个无雪背景层图像估计值
[0009]计算深度去雪网络的损失,获取优化的深度去雪网络;
[0010]采集实际下雪图像输入至优化的深度去雪网络,得到处理的去雪后的无雪背景层图像。
[0011]所述雪模型I
s=S+K*I
b的推导过程如下:
[0012]通常雪花降落通过某一像素的时间远小于相机的曝光时间,因此相机拍摄到的下雪图像是快速运动的雪花和雪花遮挡的背景信息共同作用的结果假设相机曝光时间为T,雪花通过某一像素的时间为τ,在拍摄时间[τ,τ+T]内,雪花通过某一像素的过程中,被雪花影响的像素点光强E
d是由背景光强E
b和雪花光强E
s共同组成,如下式:
[0013]
[0014]由于拍摄过程中背景光强E
b几乎是静止的,所以E
b可以认为是一个常数,这样上述方程可以简化为:
[0015]
[0016]其中,
是雪花通过某一像素时的亮度,可以描述为动态的雪花层S,TE
b是在不受雪花影响时曝光时间T内背景的真实光强;因为相机的响应是线性的,即雪花和背景的亮度与它们的最终成像结果之间是线性关系;所以可以将上述方程进一步简化为:
[0017]I
s=S+I
b-τE
b
[0018]其中,S是雪花层,它反映了雪花的位置和透明度信息,I
b是去雪后的无雪背景层图像,最后两项τE
b可以合并为背景的衰减项,上式进一步简化为:
[0019]I
s=S+K*I
b
[0020]其中,I
s是带雪图像,S是反映雪花位置和透明度信息的雪花层,I
b是去雪后的无雪背景层图像,K为背景衰减系数,K=1-τ/T。
[0021]所述采集图像、合成雪花,并合成带雪图像
包括:
[0022]拍摄有雪景且没有雪花的真实无雪背景图像
将合成雪花层S
i叠加至背景图像生成带雪图像
其中,i为图像序号,i=1,……,N。
[0023]所述合成雪花层S
i为采用不同的密度、形状、大小、透明度的白色粒子作为雪花。
[0024]所述采用了残差学习网络构建雪花检测子网络,包括:
[0025]采用包含3个10层的残差学习模块,各残差学习模块之间通过1*1的卷积来调整通道数,每个残差学习模块的通道数都是上一残差学习模块的2倍,每个残差学习模块包含5个残差块,每个残差块由两层3*3的卷积层构成,两层之间采用了残差的连接方式。
[0026]所述采用密集连接的U网络构建雪花去除子网络,包括:
[0027]收缩路径由三个下采样模块构成,该下采样模块包含Dense block、批标准化和池化层,用于分别获取特征图;其中批标准化包含标准化操作和带Relu激活的卷积操作,池化层是对原始输入的图像进行步长为2的降采样操作;
[0028]扩展路径由三个对应的上采样模块构成,每个上采样模块由反卷积层、Denseblock和批标准化组成;首先,反卷积层与对应收缩路径上的特征图进行融合,然后送入Dense block进行卷积,最后通过一层1*1的卷积层将任意数目的特征向量转换为3维的去雪后的无雪背景层图像I
b。
[0029]所述计算深度去雪网络的损失,获取优化的深度去雪网络,包括:
[0030]采用逐像素加权的MSE损失作为深度去雪网络的整体损失L(Θ),如下式所示:
[0031]
[0032]其中,
和
分别表示第i张图像去雪后的无雪背景层图像估计值和雪花层估计值,
是第i张图像的真实无雪背景层图像,S
i是第i张图像的合成的雪花层,λ
1是无雪背景图损失的权重,λ
2是雪花层损失的权重,Θ是深度学习网络中的参数,λ
3是其权重,N代表训练集中包含的图像总数,整个训练过程是通过误差反向传播来不停的更新网络使损失函数达到最小。
[0033]所述深度去雪网络的整体损失L(Θ)的计算是通过惯性优化器和随机梯度下降法来优化目标损失函数来计算的。
[0034]本发明具有以下有益效果及优点:
[0035]1.本发明方法针对雪图像中较难去除的宽而不透明的雪花,根据雪的物理成像过程,推导了一个简化的雪模型,根据模型设计了一个新的深度去雪网络来去雪。相比于其它传统去雪方法,该方法可以去除不同类别的雪花,并较好地保留了背景细节,有更好的去雪效果。
[0036]2.本发明方法是面向传统的可见光图像,基于简易物理模型并且结合深度学习强大的拟合能力。使得该方法适用范围更广,并且提升了图像去雪效率,提高了各类视觉系统在雪天气中的鲁棒性。
附图说明
[0037]图1雪花成像过程示意图;
[0038]图2雪数据集示意图;
[0039]图3整体网络结构图;
[0040]图4残差学习示意图;
[0041]图5雪花检测子网络;
[0042]图6 U-Net利用示意图;
[0043]图7Dense block连接示意图;
[0044]图8 U-DenseNet网络结构图;
[0045]图9合成雪图像去雪效果对比图;
[0046]图10真实雪图像去雪效果对比图。
具体实施方式
[0047]下面结合附图及实施例对本发明做进一步的详细说明。
[0048]1.雪模型
[0049]本文从雪花通过某一像素的过程出发,推导了一个简化的雪模型。通常,雪花降落通过某一像素的时间远小于相机的曝光时间,因此相机拍摄到的下雪图像是快速运动的雪花和雪花遮挡的背景信息共同作用的结果。如
图1所示,假设相机曝光时间为T,雪花通过某一像素的时间为τ,在拍摄时间[τ,τ+T]内,雪花通过某一像素的过程,被雪花影响的像素点光强是由背景光强和雪花光强共同组成,即图像中受雪花影响的像素处的光强如下式所示。
[0050]
[0051]由于拍摄过程中背景几乎是静止的,所以E
b可以认为是一个常数,这样上述方程可以简化为:
[0052]
[0053]其中
是雪花通过某一像素时的亮度,可以描述为动态的雪花S,TE
b是在不受雪花影响时曝光时间T内背景的真实光强。因为相机的响应是线性的,即雪花和背景的亮度与它们的最终成像结果之间是线性关系。所以可以将上述模型进一步简化为:
[0054]I
s=S+I
b-τE
b
[0055]其中S是雪花层,它反映了雪花的位置和透明度信息,I
b是无雪的背景层。最后两项可以合并为背景的衰减项,上式进一步简化为:
[0056]I
s=S+K*I
b
[0057]其中K为背景衰减系数,K=1-τ/T。
[0058]对于上述方程的求解,给定I
s,求解S和I
b属于不适定问题,可以将该问题转化为最大后验概率估计问题:
[0059]
[0060]其中P
b(B),P
s(S)分别为背景和雪花先验。在传统方法中,这些先验可以是高斯模型、稀疏编码和低秩。在深度学习算法中,这些先验是通过训练数据来拟合,并自动地内嵌到网络中。
[0061]2雪数据库
[0062]雨雪天特殊的气候条件决定了拍摄有雪图像对应的无雪图像是非常困难的,但是有监督的深度学习需要大量的带标签数据,因此为了得到一个带标签的数据库,我们合成了一个雪图像数据库。为了使合成的数据更接近真实的下雪图像,首先从网络下载和拍摄有雪景但是没有雪花的真实无雪背景图像
然后采用不同密度、形状、大小、透明度白色的粒子制作合成雪花层S
i,叠加生成带雪图像
其中,i为图像序号,i=1,……,N。雪数据集包含了2000组下雪、背景和雪花图像,其中训练集包含了1700组,测试集包含了300组。
图2显示了部分数据库中的下雪图像。从上到下每一行分别代表小雪、中雪和大雪。
[0063]3深度去雪网络
[0064]根据雪模型,雪花和背景是通过一种线性的组合得到下雪的图像。通常给定下雪图像后,雪花图像和背景图像都是未知的,因此雪花模型的求解是一个不适定问题。那么深度学习网络就需要同时估计这两个未知量,因此本文采用两个功能模块来同时检测和去除雪花,并且采用串联的网络结构使雪花检测和去除可以互相促进。为了准确地学习雪图像和无雪图像之间的差异,雪花检测子网络采用了残差学习网络。去雪子网络采用了密集连接的U网络。U-net可以较好地保留图像的细节,DenseNet特征复用的特点可以提升去雪网络的准确性。文中简称该联合检测和去除雪的网络为RS-UDNet,其结构如
图3所示。
[0065]3.1雪花检测子网络
[0066]雪模型中S是动态雪花,它不仅包含了雪花的位置、形状等低层信息,还含有分布、透明度、密度等高层信息。所以动态雪花的检测,既要检测到低层信息也需准确估计高层信息。通常,卷积神经网络的底层提取低层信息,高层提取语义信息,并且网络层数越多,提取的特征越丰富和抽象。但是简单地通过增加网络层数来提取高层的语义信息,会导致梯度消失、爆炸和退化等问题。为此本文通过引入正则化和正规化中间层来预防梯度消失和爆炸。
[0067]退化问题是随着网络层数的增加,在训练集上的准确度达到了饱和或下降。为了解决退化问题,网络使用了残差学习的思想。如果深层网络后面的层是恒等映射,那么模型就退化为一个浅层网络。直接让一些层拟合一个恒等映射函数H(x)=x是比较困难的,如果把网络设计为H(x)=F(x)+x,就可以转换为学习一个残差函数F(x)=H(x)-x,只要F(x)=0,就构成了一个恒等映射H(x)=x,拟合残差通常会更加容易。残差学习示意图如
图4所示。
[0068]为了准确地估计雪花图像,检测子网络采用了30层的残差网络来检测雪花。如
图5所示,该网络包含了3个10层的残差学习模块,各学习模块之间通过1*1的卷积来调整通道数,每个模块的通道数都是上一模块的2倍,每个模块包含5个残差块,每个残差块由两层3*3的卷积层构成,两层之间采用了残差的连接方式。
[0069]3.2雪花去除子网络
[0070]检测完雪花后,需要对雪花区域进行复原,为了在复原的同时较好地保留背景细节,本文采用由Dense block组成的U-Net来去除雪花。
[0071]U-Net是一种结构形似字母U的深度学习网络,其结构示意图如
图6所示。U-Net网络主要有两部分组成:收缩路径和扩展路径。收缩路径主要是用来捕捉图像中的语义信息,而扩展路径则主要是为了对图像中所关注的部分进行精准定位。通过把收缩路径上提取到的高像素特征与扩展路径上新的特征图进行融合,实现了精准定位和最大程度的保留前面降采样过程一些重要的特征信息。
[0072]Densen block是一种最大化网络所有层之间信息流的网络,其结构示意如
图7所示。它将网络中所有层都进行了两两连接,使网络中每一层都接受它前面所有层的特征作为输入,即任意层l的输入和输出间的关系可以表示为如下关系式:
[0073]x
l=H
l([x
0,x
1,...,x
l-1])
[0074]其中[x
0,x
1,...,x
l-1]表示将前面所有层的输出串联到一起,H
l表示第l层的映射函数。Dense block采用密集的连接方式使网络在反向传播时每一层都会接受其后所有层的梯度信号,所以不会随着网络深度的增加使靠近输入的卷积层的梯度变得越来越小,减轻了训练过程中梯度消散的问题。同时,由于大量的特征被复用,所以使用少量的卷积核就可以生成大量的特征,最终使模型的尺寸比较小。
[0075]本文将U-Net和Dense block相结合设计了一种U-DenseNet网络作为去雪子网络。该网络利用U-net来更好地保留图像细节,而DenseNet将低层特征复用到高层提高了去雪的准确度,所以将它们结合后缓解了去雪过程中由于去雪过度导致背景细节丢失和去雪不彻底之间的矛盾。U-DenseNet的网络结构如
图8所示,U-DenseNet收缩路径由三个下采样模块构成,该模块包含了Dense block、批标准化和池化层,其中批标准化包含了标准化操作和带Relu激活的卷积操作,池化层是对原始图像进行步长为2的降采样操作。U-DenseNet扩展路径由三个对应的上采样模块构成。每个模块由反卷积层、Dense block和批标准化组成。首先,反卷积层与对应收缩路径上的特征图进行融合,然后送入Dense block进行卷积,最后U-DenseNet网络通过一层1*1的卷积层将任意数目的特征向量转换为3维的输出图像。
[0076]3.3网络优化
[0077]网络采用逐像素加权的MSE损失作为损失函数,如下式所示:
[0078]
[0079]其中
和
分别表示第i张图像去雪后的无雪背景层图像估计值和雪花层估计值,
和S
i分别是第i张图像的真实无雪背景层图像和合成的雪花层,λ
1,λ
2和λ
3是平衡各损失间的权重,Θ是深度学习网络中的所有参数,N代表了训练集中包含的图像总数。整个训练过程就是通过误差反向传播来不停的更新网络使损失函数达到最小。训练时为了防止过拟合和梯度消失等问题,对数据通过旋转、裁剪和变换操作进行了增强,并在多数的卷积层中都使用了泄漏、参数正则化和正规化操作。
[0080]整个网络采用Tensorflow框架来实现,并通过惯性优化器和随机梯度下降法来优化目标函数。训练过程中使用均值为0,方差为0.01的正太分布初始化所有的网络参数;惯性优化器的惯性系数为0.9;网络参数衰减系数为10
-6;初始学习率为10
-2,每迭代50次下降0.1,直到网络收敛。
[0081]4实验与结果
[0082]为了说明RS-UDNet去雪的有效性,本文对网络在合成数据集上做了定量的分析实验,在真实图像上做了定性的实验,并且与最新的去雨雪算法做了比较。
[0083]4.1合成图像对比实验
[0084]为了定性地评估去雪的效果,我们与Fu和Zhang的方法进行了对比,并采用峰值信噪比(PSNR)和结构相似性(SSIM)作为评判基准。PSNR和SSIM可以较好地衡量估计的无雪图像和真实无雪图像之间的差异。表1显示了在三种不同大小的雪图像和整个测试数据集上测试的结果,从表中可以看出本文算法的去雪效果是最好的,PSNR值比Fu算法高出2dB,SSIM比Fu的算法高出0.06。为了直观地显示去雪的效果,随机从测试集中选择了一张小雪、中雪和大雪的去雪图像,如
图9所示,图中显示了不同算法去雪的视觉效果,并在左上角标注了PSNR和SSIM值。从图中看出本文算法可以去除不同类别的雪花,并较好地保留了背景细节。Fu和Zhang的方法虽然能去掉部分半透明的雪花,但是对全遮挡和尺寸较大的雪花几乎不能去除。
[0085]表1不同算法在数据集上的PSNR和SSIM比较
[0086]
[0087]4.2真实图像对比实验
[0088]为了进一步证明网络在真实的雪图像上的去雪效果,我们收集了一些真实的下雪图像,并在这些图像上对本文算法和Fu和Zhang中的算法进行了对比。
图10显示了不同算法去雪的效果,从图中可以看出我们的算法可以去除不同形状、大小和透明度的雪花,而其它算法通常只能去除半透明的雪花。