李从利, 张思雨, 韦哲, 薛松
(陆军炮兵防空兵学院, 安徽 合肥 230031)
航拍图像在采集过程中容易受到不良天气的影响,云层是常见的污染源之一。薄云会使地物信息变得模糊,厚云则完全遮蔽了云层下的地物,严重影响了航拍图像的后续应用,因此航拍图像的云去除工作具有十分重要的意义。
在过去的几十年中,学者们已经提出了大量的云去除方法,这些方法可以分为3类:基于多光谱的方法[1-3]、基于多时相的方法[4-7]和基于图像修复的方法[8-10]。基于多光谱的方法利用波段本身的空间结构和不同波段之间的光谱相关性,重建云层覆盖区域的信息,但前提要求相对较高,需要冗余频带,而且在一般情况下,厚云存在于所有波段,所以这种方法不适用于去厚云。基于多时相的方法利用多张同一场景、不同时刻的无云区域参考图像,通过信息替换或重建云覆盖区域的信息,但会涉及图像配准和辐射差异等问题,算法构成复杂。Lin等[6]提出了一种基于块的全局最优信息重构方法,将参考图像的梯度嵌入到云覆盖区域中,利用泊松方程重建云区域的信息,这种方法能够产生较好的去云效果,但是基于泊松方程重建的结果会受到边界条件的影响;Zhang等[7]提出了一种融合多传感器和多时相数据的去云方法,但在异构区域会出现重建精度降低的现象。由于航拍图像一般只有可见光波段,而且在军事侦察等实际应用时受限于客观条件,难以获得多时相辅助数据,因此基于多光谱和多时相的去云方法不适用于航拍图像去云。由于被厚云遮挡区域几乎不含信息,基于图像修复的方法将这些区域视为缺失像素,图像修复中最常用的是图像修补方法。图像修补利用其他区域的信息,在缺失区域上合成具有视觉真实和语义上合理的像素,主要可分为两类:1) 利用低层次特征的扩散传播和块填充来修复图像;2) 基于机器学习。第1类方法中最有代表性的图像修补方法是Criminisi等[11]提出的基于样本块匹配的修复算法,该算法结合了纹理合成和扩散填充的优点,可修复较大孔洞的缺失信息,但此算法受限于单张图像,当找不到相似块时算法就无法正常进行,因此只适用于补全背景以低频信息和重复性纹理为主的图像;Hays等[12]利用互联网上存在的大量图片来提供素材,弥补了Criminisi算法找不到相似块的缺点,但不能保证参考图像的语义正确,还存在不同图像光照等条件不同带来的视觉差异问题。第2类方法尤其是近年来,得益于大数据获取手段和图形处理器(GPU)的普及,深度学习在图像处理和计算机视觉领域取得了长足发展。利用深层卷积神经网络(CNN)可以学习缺失区域与其他部分之间复杂的函数关系,但仅利用前馈CNN往往只能得到模糊的结果。2013年Szegedy等[13]首次提出深度学习对抗样本的概念,使得深度学习模型在对抗样本上变得脆弱。进而2014年Goodfellow等[14]提出一种无监督学习的训练方法- 生成对抗网络(GAN),该网络由生成器和鉴别器组成。生成器用于合成缺失部分,而鉴别器则模拟人眼对图像质量的判决,GAN的两部分在与对方的对抗中提升性能,使高层次的识别问题和低层次的像素生成问题统一起来。GAN使得学习图像数据集的分布以及缺失部分的函数关系变得容易,近年内成为国内外学者们的研究热点[15-18]。但是由于GAN的不稳定,容易出现过拟合现象,且GAN生成模型的结果缺乏有效算法加以分析,2016年Radford等[19]针对GAN不稳定学习方式进行了重要架构设计和CNN的特定优化,提出了深度卷积生成对抗网络(DCGAN),将卷积网络引入到生成式模型当中来做无监督的训练,利用卷积网络强大的特征提取能力来提高生成网络的学习效果。
在上述工作基础上,2016年Pathak等[20]提出上下文编码器,利用CNN来学习图像中的高层特征,结合海量数据库和高层特征,指导生成图像的缺失部分,能修复图像中缺失的较大孔洞。但有时该方法的修复结果缺乏精细的纹理细节,在边界周围会产生可见的伪迹,该方法选用的原始GAN也存在训练不稳定和较难收敛的缺点。
航拍图像与陆基拍摄图像相比,其目标呈现结构信息弱、纹理和细节分辨力低。而CNN具有强大的图像特征提取能力,DCGAN结合了GAN和CNN的优点。因此本文采用基于DCGAN的图像修复方法去除厚云,将航拍图像中的厚云覆盖区域视为图像修复工作中的缺失部分,使用DCGAN替换原始GAN,提升网络训练的稳定性和生成结果的质量;为抑制生成图像的噪声,借鉴并改进了文献[20]的损失函数,增加了总变差损失[21]生成联合损失函数。同时,为消除生成区域与背景间的颜色差异,又引入泊松图像编辑[22],较好地保留了修复区域的细节特征。与文献[26-28]方法在航拍图像上的对比实验证明,本文方法能得到较为理想的云区修复效果,为航拍图像的去云工作提供了新的技术途径。
本文设计的用于去云DCGAN结构,其训练过程采用GAN+CNN方式,与Rasmus等[23]提出的梯形网络学习方法类似,属于半监督学习。网络结构如图1所示,生成器G的输入为受云污染的图像z,输出预测图像G(z),然后和真实无云图像放到鉴别器中进行比较,经过不断地训练,使得生成器生成的图像不断逼近真实图像。
图1 去厚云方法框架图Fig.1 Framework of thick cloud removal
网络训练是一个二元极小极大博弈的过程,鉴别器D不断学习真实无云图像和生成图像的区别并区分真假,而生成器也尽可能地学习真实图像的特征去欺骗D,公式为
(1)
式中:Z为被云污染图像的集合;χ为对应的无污染原图的集合;D(x)和D(G(z))分别为鉴别器D对原图像和修复图像的分类标签值;为期望值。(1)式为联合优化,即D将x识别为真(1),将G(z)识别为假(0),而G则阻止D做出正确判断。G和D的性能最终都会提高,G最终能生成接近真实的无云污染图像。
在训练时先固定生成器、训练鉴别器,而后交替迭代进行。
在网络设置上,生成器G基于编码器- 解码器模型,鉴别器D基于CNN. 表1和表2分别给出了生成器和鉴别器的详细信息,其中Conv、Transconv、BN、s2和p1分别代表卷积、转置卷积、批标准化、步长为2和填充补0操作,Conv4×4表示用大小4×4的核进行卷积操作,同理Transconv4×4表示相同大小的核进行转置卷积操作,Fully-Connected 1000表示1 000个神经元的全连接层,Relu[24]、tanh和LeakyRelu[19]代表激活函数。
表1 生成器的网络结构
表2 鉴别器的网络结构
为了避免特征映射中的信息丢失,本文取消所有池化层,在鉴别器使用步幅卷积、生成器使用转置卷积进行替换,增加训练的稳定性;BN将特征层的输出归一化到一起,可以加速并稳定训练过程,但在所有层上直接运用BN会导致样本振荡和模型不稳定,通过在G的输出层不采用BN可以防止这一问题;在鉴别器中使用LeakyRelu而不是Relu,防止出现梯度稀疏。
生成器G的编码器模型用学习图像数据集的低维特征表示,在编码器模型完成时加上一个输出为1 000个神经元的全连接层,随后接入一个结构对称的解码器模型,将学习到的特征映射到样本标记空间。鉴别器D是一个二分类器,输入为生成图像和真实图像,用CNN逐层降采样,通过一个全连接层输出判别为真或假。通过多次实验,采用每训练5次生成器、训练1次鉴别器的训练策略,可以更好地平衡GAN训练的稳定性。
使用生成图像和真实图像在云区范围内之差的L2范数(重建损失)作为整体内容约束,捕获受污染云区的整体结构及其与背景的一致性,公式为
(2)
(3)
在图像修复过程中,噪声会被放大,给复原结果带来影响,因此需要在最优化问题模型中添加一些正则项来保持图像的光滑性。这里引入总变差损失Ltv[25]:
(4)
综上所述,本文采用的联合损失函数为
Ltot=λrecLrec+λadvLadv+λtvLtv,
(5)
式中:λrec、λadv和λtv分别为对应损失函数的极值,通过交叉检验,λrec和λadv分别取0.999和0.001,λtv取1×10-6.
通过本文方法虽然可以得到较为合理地云区填充效果,但有时会在生成区域和其背景之间产生一些颜色差异或边界伪迹,使用泊松图像编辑作为后处理方法来避免这个问题,其主要思想是把原图的梯度信息赋予到目标图像上,通过插值重新构建出目标区域内的像素。
泊松方程[22]可表示为
(6)
本文方法流程如图2所示。
图2 本文方法流程示意图Fig.2 Flow chart of the proposed method
方法步骤如下:
1)人工模拟云区掩膜,按(2)式作用于训练样本,模拟含云图像,与不含云样本输入生成器(见表1)和鉴别器(见表2);
2)按(5)式构建的损失函数进行训练,更新生成器和鉴别器的参数;
3)训练结束,将真实含云的测试图像进行云检测,得到云区掩膜,按(2)式作用于图像,输入已训练好的生成器中,得到中间去云结果;
4)将中间结果按(6)式进行泊松图像编辑处理,得到最终结果。
本文采集了83张尺寸为7 360像素×4 912像素的合肥地区航拍图像,将其分割成尺寸为256像素×256像素的小图像,再根据土地利用类型将小图划分为11 468张建设用地、14 023张土壤、11 170张植被和7 195张水体图像作为数据集分别进行网络学习,训练集和测试集按8∶2的比例任意分割。数据集已经公开,地址为https:∥pan.baidu.com/s/1crVAG3PamwInOTFMfauFbg,可供下载使用。所采用的实验平台:操作系统Windows 10,编程软件Python 3.6,GPU Quadro K2200,CPU Xeon E5-1620.
厚云的存在完全遮挡了地面景物信息,因此本文用掩膜直接在原图上覆盖一块区域模拟被厚云污染图像,如图3(b)所示;另外,为了学习到图像中的更多高层特征,还模拟了中心区域掩膜作为预训练,如图3(a)所示。本文只考虑图像中只有一朵云的情况,且其尺寸不超过图像的1/4.
图3 两种掩膜策略Fig.3 Two kinds of region masks
在训练时,首先训练中心掩膜图像作为初始模型,在这种情况下,网络倾向于学习边界附近的低层图像特征,这不足以生成更为精细的图像,生成的图像具有明显的边界效应。完成中心掩膜图像的训练后,保存模型的检查点,在此基础上再进行模拟厚云掩膜训练,提高特征学习的泛化能力。总共进行了200轮训练,批尺寸为25(随机抽取)。
表3为建筑用地数据集训练过程,第2列为输入图像,第3列是生成图像。训练初始阶段,图像修复质量较差;训练200轮后,修复质量已明显提高。图4为训练200轮的第1幅图局部放大,此时人眼已难辨认生成图像的真假。可见,随着训练的继续,网络模型不断优化,生成器的预测图像越来越接近真实样本,鉴别器判别真假样本的能力越来越强。
表3 建筑用地数据集训练过程
Tab.3 Building land data set training process
图4 建筑用地数据集的输入和生成结果Fig.4 Input sample and generated result of building land data set
在将测试图像进行云去除之前,先对图像进行云区自动检测,这样无需手动标注,提升了方法的准确性和实时性。
经过云检测的图像输入DCGAN模型,得到初步修复结果,但图像会在生成区域和其背景之间产生一些颜色差异或边界伪迹,这里使用泊松图像编辑作为后处理方法,如图5所示。
图5 泊松图像编辑结果Fig.5 Result of Poisson image editing
为了验证本文方法的有效性,选取了两类经典的非学习修复方法(文献[26]方法、文献[27]方法)和一类基于机器学习的修复方法(文献[28]方法)进行对比实验。本文的优化算法采用文献[29]算法,学习率为0.000 2. 在训练时,使用随机翻转数据增强操作增加数据量。
为了便于对比,本文使用了两种模拟云掩膜随机掩盖4类测试样本,用本文方法及对比方法进行去云,部分结果如表4和表5所示,表中第3行和第5行是对应的放大图像。需要注意的是,文献[28]方法的结果均出现无序纹理,没有实现云区的有效填充,原因是本文的数据库是航拍图像,地面纹理特征复杂,样本不满足独立同分布。
表4 建筑用地和土壤的结果对比
Tab.4 Comparison of processed results of building land and soil
表5 植被和水体的结果对比
表4中第1组对比是一个运动场,模拟云区遮挡了绿色场地中的红色半圆。文献[26]方法的结果错误地把上方矩形区域中的纹理特征填充到缺失部分,文献[27]方法的结果在圆形轮廓的左上部出现尖状突起,本文方法完整地填充了缺失的半圆。在表4的土壤对比中,文献[26]方法和文献[27]方法的结果使道路变窄,而且文献[27]方法的结果较为模糊,本文方法的结果边缘衔接更自然。表5的第1组是植被图像的对比,所用到的图像在中间部分有一块没有植被,其他对比方法只是简单地用学习到的植被纹理补充缺失的部分,忽视了语义特征,从原图可以发现云区污染区域的中间没有植被,两侧的植被没有连在一起。本文方法意识到了这一点,通过学习图像的高层语义特征,给出了更符合原图信息的修复结果。表5的第2组是水体图像的修复对比,文献[26]方法扩大了水草的面积,文献[27]方法的结果模糊了水草信息,本文方法较为完整地修复了水草信息。综上,本文方法结果的主观表现优于其他对比方法。
为了衡量本文方法的效果,采用峰值信噪比 (PSNR)和结构相似性 (SSIM)[30]两种图像质量评价指标定量分析去云效果,结果如表6所示。PSNR值越大、SSIM值越接近于1,说明两幅图像越相似,即恢复图像越接近于真实图像。从表6中可以看出,本文方法的总体参数表现优于其他对比方法。
表6 去云效果参数对比
为进一步验证方法的有效性,本文又对40幅真实的航拍云污染图像(256像素×256像素)进行了对比实验,限于篇幅,选择了3幅含有不同大小和形状云区的图像进行了对比,结果如表7所示。
表7 航拍含云图像去云结果对比
Tab.7 Comparison of processed results of aerial image
由于航拍含云图像无对应的无云图像作为参考,对真实航拍云污染图像去云效果的评价,只能采用无参考的图像质量评价方法。本文采用自然图像无参考质量评价算法(NIQE)[31]和改进的自然图像无参考质量评价算法(IL-NIQE)[32]两项指标作为评价依据,并对其评价结果用3个参数指标加以表征:皮尔森线性相关系数(PLCC)、斯皮尔曼相关系数(SROCC)、均方根误差(RMSE)。其中PLCC和RMSE可度量算法的准确性,SROCC则为算法单调性度量,反映了算法测试值与平均主观得分差(DMOS)值一致的程度。PLCC和SROCC值越大,算法测试值与DMOS值相关性越好,RMSE越小,模型测量误差越小。实验结果如表8所示。
表8 无参考图像质量评价结果对比
由表7和表8可发现,本文修复方法不仅在视觉主观感知上优于其他对比方法,而且相较于其他3种方法,SROCC和PLCC均取得了最大值,RMSE取得了最小值,评价结果与主观感知相一致,验证了本文方法的有效性。
此外,本文对4类方法在不同的数据集上进行了运行时间比较,共测试500幅图像,每类方法对1幅图像修复的平均运行时间如表9所示。
表9 方法运行时间结果对比
由于文献[26]方法采用的是图像金字塔重建的修复方法,所以耗时最长;文献[28]方法尽管也是机器学习方法,但需要进行二次优化,因此耗时较长;文献[27]方法的耗时主要在sift配准环节,性能较佳;而本文方法尽管训练耗时长,但实际运行时无需再优化,只需神经网络的前向运行和泊松编辑处理,具有较高的运算效率,所需时间最短。
本文尝试将航拍图像中的厚云去除和图像修复工作中的缺失部分复原联系起来,提出了一种基于DCGAN的航拍图像修复去厚云方法。DCGAN生成器采用编码器- 解码器模型,鉴别器为卷积神经网络,以对抗损失作为损失函数;进而引入泊松图像编辑平滑修补边界;在自建数据集上的对比实验验证方法的可行性。实验结果表明:相比于传统的重建恢复方法,DCGAN模型能够有效地学习图像的高层语义特征;总变差损失函数的加入以及泊松编辑处理有助于平滑图像及其边界,提高图像质量;DCGAN模型前向运算速度快,有助于实际应用。
由于图像修复理论和深度学习技术的发展,下一步对网络结构和损失函数进行优化,在搜集大量真实含云图像样本的基础上引入新方法加以实验对比。