张思雨
(陆军炮兵防空兵学院 合肥 230031)
近年来,随着航空摄影技术的快速发展,航拍图像的数据量也在迅猛增加。航拍图像已广泛应用于地理勘测、军事侦察、农业、环境保护和资源勘查等领域。然而航拍设备容易受到云层的影响,使地物信息受到云层遮挡。根据国际卫星云气候项目流量数据(International Satellite Cloud Climatolo⁃gy Project-Flux Data,ISCCP-FD)显示,地球表面的年平均云量约为66%[1]。云层遮挡降低了航拍图像的利用率,严重影响了研究人员后期的图像识别和分析等工作。因此,有效地对航拍图像进行云检测并减少或剔除云覆盖的影响具有十分重要的意义。
航拍图像的云检测属于图像分割范畴,尽管人们在图像分割方面已取得了大量的研究成果,但目前尚无通用的分割理论,现有算法大多数都是针对某类具体问题。航拍图像数据量较大、下垫面的纹理结构信息比较复杂,已有的自动图像分割方法[2~4]和交互式图像分割方法[5~6]均无法直接运用于航拍图像的云检测。
现有云检测方法的对象一般是多光谱卫星数据,根据云对不同波段的反射特性,设定合适的阈值进行云检测[7]。然而大多数航拍图像只有红黄蓝(RGB)三个通道,没有其他辅助波段信息,因此不能直接用于航拍图像的云检测。文献[8]基于双边滤波算子提出逐步细化的航拍图像云检测方案,然而,双边滤波算子不适用于提取任意尺度的细节,所以当增大平滑参数进行多次迭代时,不能较好地保持边缘,会导致梯度反转等问题[9]。而且,双边滤波不能较好处理边界模糊的情况,所用到的多尺度双边滤波计算代价较高,虽然已有加速双边滤波的方法[10~11],但这些方法一般采用下采样和量化策略,不可避免地会对结果造成影响。文献[12]提出基于边缘敏感递归滤波的云检测方法,检测效果较好,但算法的构成过于复杂。文献[13]结合Sobel和LOG算子构建云层细节图像,降低了检测错误率,但有时会对主云区旁边的薄云和半透明云区造成漏检。
针对以上分析,本文提出一种基于阈值递归选取和引导滤波的航拍图像云检测算法。首先采用改进的转换模型将航拍图像从RGB颜色空间转换到HSI(H,hue,色调;S,saturation,饱和度;I,intensi⁃ty,亮度)空间,得到云区显著图作为下一步阈值选择的输入图像,拉大云区和非云区的差异;然后基于最大类间、类内方差比法对云区显著图进行阈值递归选择,综合航拍图像中云区的统计特征,得到初始云区;最后利用引导滤波优化薄云检测,通过形态学闭运算修正小型孔洞得到最终云区。实验表明,本文算法结果较好地检测出了薄云和半透明云区,更接近于人眼实际观测结果。
由于HSI色彩空间最符合人的视觉系统感知,因此首先将航拍图像从RGB色彩空间转换到HSI空间。根据大量统计[8],在亮度I分量上赋以权重,对传统的几何推导转换公式作以改进,设
式中R、G、B对应红、黄、蓝三个通道的像素值。则HSI的计算公式为
式中H、S、I对应色调、饱和度和亮度。
航拍图像中的云区一般亮度I较高,饱和度S较低,为了突出云区和非云区的差异,计算二者的归一化差值P= | (I-S)/(I+S)|,将其值归一化到[0,255],作为下一步阈值选择方案的输入图,如图1所示。可以看出,P特征在强化主云区的同时,较好地保持了薄云区域的边界。
图1 航拍图像的不同光谱特征
基于P特征图,选择合适的阈值即可初步分割云区和非云区,一般采用基于最大类间方差的Otsu方法[14],但该方法没有考虑到类内方差的影响,所得的阈值会有一定的偏差,为了避免这一问题,本文提出基于最大类内、类间方差比的递归阈值选取方法。首先给定一个初始阈值,将图像分成两类C1和C2,计算它们的方差、灰度均值和总体均值μ:
其中Nci表示属于该类的像素值个数,N表示图像的整体像素个数。两类对象在图像中的出现概率类内方差σ2in为
则选择的阈值T的计算公式为
把初步云区与非云区的类间方差和面积差作为递归的结束条件[12]。设第i次递归后,云区面积和非云区面积分别为Ai0和Ai1,可得二者的归一化面积差:
可以看出,随着递归的进行,∆Ai会逐渐增大,而类间方差则逐渐减小,基于此认识设定结束参数 Ei:
设结束参数为E,当Ei≥E时,结束递归。若E值设置过大,会导致云区检测成非云区,若过小,则会出现云区检测不彻底的情况,经文献[12]大量实验分析,E=0.52时检测效果最好。
基于P特征图,定义初步云区如下[13]:如果P特征图中像素点n满足当T≤100时,Pn≥100,或当 100≤T≤150时,Pn≥T ,或当 T≥150 时,Pn≥150,满足以上条件的像素点的集合即为初步云区。
文献[8]统计了500张航拍图像的亮度和色调分布后发现:航拍图像中云色调的值域为[50,80],且95%的云像素的亮度值都不小于100。基于此认识,去除初步云区中不满足上述条件的像素点,优化初步云区。
通过上一步检测一般能得到视觉上比较容易辨认的云区,对于薄云和半透明云区检测,本文引入引导滤波处理这一问题。
经大量实验数据统计发现:薄云的亮度值约为厚云的30%~50%[15]。且薄云一般出现在主云区的附近,同时伴有半透明云区的出现,可能会出现漏检现象。本文通过引导滤波[16]优化薄云的检测效果,引导滤波和双边滤波都具有保边特性,但在细节上效果更好。引导滤波认为函数上一点与其邻近部分的点成线性关系,那么一个复杂的函数就可以用很多局部的线性函数表示,当要求该函数上某一点的值时,只需计算所有包含该点的线性函数的值并做平均即可。
本文采用快速引导滤波[17]加速传统引导滤波的计算过程,将上节得到的初步云区作为输入图像,原始航拍图像为参考图像,设置窗口半径为60,规则化参数为0.001,采样率为15,得到的输出图像如图2所示,可以看出细致云检测对薄云的检测效果更为理想,检测出了初步云检测没有识别到的云区,降低了漏检率。
从图2(d)可以看出,细致云检测结果存在一些小型孔洞和琐碎细节,我们利用形态学运算处理这一问题。形态学运算是基于形状的一系列图像处理操作,通过将结构元素作用于输入图像来产生输出图像。
图2 引导滤波优化薄云检测
基本的形态学运算是膨胀和腐蚀,膨胀运算能填充边缘或0像素内部的孔,腐蚀运算能提取骨干信息,去掉孤立的0像素。对于本文情况,采用先膨胀后腐蚀(闭运算)的操作去掉云掩膜中的小型孔洞,得到最终的云检测结果。
为了验证本文算法的效果,以文献[13]和文献[8]作为对比算法,选取文献[8]提供数据库中的两幅图像作为实验图像进行对比试验,尺寸分别为600×400和1024×768,检测结果如图3、图4所示。同时,本文还选取了一张实拍图像进行实验,实拍图像来源于航拍飞机拍摄的江西省彭泽县图像,因为原图尺寸过大,截图到427×300像素进行实验,结果如图5。
在图3中,文献[13]的结果出现大量的错检情况,文献[8]则错误的把本为独立的团云连接起来,且存在部分漏检现象,本文算法的检测精度更高;在图4中,文献[13]的下半部分结果还比较令人满意,但在顶部出现大面积粘连,文献[8]的检测结果比较粗糙,相比而言,本文算法的结果更为精细;在图5的实拍图像对比实验中,文献[13]出现大量错检情况,尤其是把图像左侧的裸地错检为云区,文献[8]对主云区旁边的薄云和半透明云区出现漏检,本文算法则准确地检测到了薄云和半透明区域。综上,在视觉主观评价上,本文算法优于对比算法。
图3 第一组云检测对比
图4 第二组云检测对比
图5 实拍图像检测对比
为了进一步客观衡量本文算法的有效性,采用错误率(Error Rate,ER)作为评价指标定量分析各个算法的精确度,公式如下:
式中CN为被漏检的云像素,NC为误检为云的非云像素,PN为图像的像素总数,结果如表1。可以看出,本文算法在错误率上的表现皆优于对比算法。
表1 不同算法的错误率对比
对于现有航拍图像云检测算法中易出现的漏检和错检问题,本文提出一种基于阈值递归选取和引导滤波的云检测方法。首先结合基于递归的最大类内、类间方差比法和前人的统计特征得到初始云区,然后采用引导滤波进一步细化薄云和半透明云的检测,最后利用形态学闭运算排除了云区掩膜的小型孔洞,实验结果的错误率更低,更符合人的视觉检测效果。下一步工作将收集大量有云航拍图像,采用机器学习的方法学习云区和非云区的特征,进一步提高检测效率和精度。