高志远, 詹文强, 元海文
(1.广东理工学院 工业自动化系, 广东 肇庆 526100; 2.武汉理工大学 航运学院, 湖北 武汉 430063; 武汉工程大学 电气信息学院, 湖北 武汉 430223)
水面无人船是一种能够在湖泊、江河及海洋环境下自主航行,并完成各种任务的水面运动平台[1]。无人船作为一种智能化、机动化、网络化的水面交通工具,具有价格便宜、灵活机动、环境适应能力强等优点。无人船已经广泛应用于各种场景执行不同任务,可以代替人工在危险情况下执行特殊任务[2]。无人船要在复杂环境下具备自主航行的能力,首先需要实时准确感知自身状态信息和周围环境信息。根据空间位置的不同,水上航行场景可分为天空、陆地和水面三个区域,识别这些区域在无人船视觉图像中的分布,不仅可以增强无人船对周围环境的感知,同时也能通过参考这些信息对自身状态进行感知[3-4]。
针对无人船水上视觉场景感知,一些研究者尝试通过进行水天线的检测,来辅助估计自身俯仰角和横滚角,并通过水天线来优化水上目标检测,因为实际环境中水上目标大部分会出现在水天线附近[5-6]。这些水天线的检测主要针对的是海上航行环境,因为在海上场景中,图像主要由天空和海面区域构成,水面边界只和天空连接[7-8]。而对于一些民用无人船,大部分应用场景为内河和湖泊,水面边界不仅包括与天空的连接,还包括与陆地的连接区域[9]。因此一些研究者针对湖泊区域,提出水岸线检测方法[10-11]。内河和湖泊水上场景复杂,特殊情况下一些算法常常会失效,特别在倒影和水波特别明显的情况下。根据无人船在内河和湖泊中航行时与岸边的距离,可以把场景分为近距离、中距离和远距离三个类别,远距离场景类似海上环境,陆地区域在图片所占区域极小,图像主要由水面和天空区域构成,图像简单,许多算法都能在这种情况下取得较好结果。在中间距离场景,陆地在图像中占有一定区域,水面也出现有水波和倒影构成的复杂纹理,使得许多基于边界和梯度的算法在这种情况下失效。在近距离场景,天空区域缩小成很小的部分,陆地在图像中占更大区域,水面倒影严重,使得基于颜色纹理的算法很难区分水面和陆地区域。
对于内河和湖泊场景,水面区域纹理存在复杂多变性,在复杂环境中直接进行水面区域的检测很难取得稳定有效的结果。为了提高无人船在内河和湖泊航行场景中的视觉感知能力的稳定性和准确性,本文从天空区域入手,提出多信息融合的水上天空检测算法,为无人船进一步的信息处理提供有用信息。为准确有效检测出天空区域,首先采集大量水上场景照片,对水上场景的图像数据进行深入分析。利用水上不同区域在图像中的分布特性,初步估计出水面、陆地和天空在图像所在的位置,然后结合分割算法准确找到天空区域。
无人船在航行过程中,水上场景的天空检测算法流程如图1所示。为了减少图像噪声对算法流程中图像分割结果的影响,采用基于变分的优化算法对图像进行平滑处理。使用基于图的图像分割算法,根据颜色和边界信息,将图像分割成不同区域。同时对水上视觉特性进行分析,将图像从RGB(Red Green Blue)空间映射到HSV(Hue,Saturation,Value)空间,对天空、陆地和水面不同区域的亮度进行统计分析。根据水上视觉特点,对天空区域位置进行初步估计。最后根据图像分割的结果,在图像中准确找到天空区域。
图1 天空检测算法流程图
在后续的分割算法中,希望将天空、陆地和水面分割不同区域,并且分割区域尽可能少,从而减少算法流程的区域合并计算量。但是由于噪声影响,一个具有相同颜色的信息区域可能被分割成不同区域。并且由于天空中的云和水面上的波浪具有复杂的纹理,这将使得图片在这些区域可能被分割为许多细小的区域,降低算法的效率。为此对图像进行分割前,需要进行预处理,减少噪声和局部复杂纹理的影响。
传统的图像去噪算法,例如中值滤波和高斯滤波算法,虽然能取得很好的平滑效果,但是却容易使图像丢失边界细节信息,使图像中的天空、陆地和水面边界变得模糊。需要平滑不同区域内的纹理,使得不同类别区域内像素能尽可能被分割成一个大的区域,同时保留不同区域的结构信息,保证不同类别的像素被分割到不同区域中去。为了达到这个效果,本文提出了基于变分法的图像去噪算法。传统的变分方法是一种基于双向惩罚函数的整体优化模型,其模型可以表示为
(1)
式中:I表示输入图像;下标p表示像素索引;S表示最后优化的输出图像。
(2)
式中:R(p)表示以像素p为中心的局部区域;q为局部区域的像素点;D(p)为像素p局部窗口内的梯度绝对值统计量;wp,q作为一个权值因子,用来表示窗口内其他像素和像素p的空间位置权重关系,可以表示为
(3)
式中:(xp,yp)和(xq,yq)为两像素坐标;σ用来控制局部窗口的空间尺寸大小。
优化过程中尽可能使式(2)的梯度绝对统计值变小,从而使窗口内的像素趋于一致,达到平滑局部丰富多变的纹理的效果。但是当像素位于不同区域边界时,需要保留这些信息。为此提出了梯度相对统计量,其可以表示为
(4)
L(p)直接对窗口内的梯度量进行相加,然后取绝对值。当窗口在同一纹理区域时,假设窗口内颜色亮度值出现周期性规律变化,但是整体保持一致,梯度出现正负交替变化,整体相加后,L(p)最后由于不同项相互抵消而趋近于零。当窗口在不同纹理区域时,由于存在亮度值的跨越变化,L(p)的不同项不能相互抵消,而保持较大的数。为了保留更多边界结构信息,要尽量使L(p)取最大。为此,结合D(p)和L(p)改进规则化项,目标优化函数最后表示为
(5)
利用图论算法,以图像的每个像素作为节点C,像素间关系作为边E,建立节点图G。在算法初始化时,将每个像素作为一个独立区域,然后根据边界信息,将相同小区域不断合并成大的区域,不断迭代,直到所有区域满足算法特定要求。使用区域内差异性因子和区域间差异因子来控制不同区域的合并。其中,区域内差异性因子定义为
(6)
式中:gi(Ci,Ei)表示某块独立区域;Int(C)表示该区域内最大的边界值。区域间差异因子定义为
(7)
式中:Ci和Cj表示两个不同区域;e(via,vjb)表示两个区域相邻的边。其目标是找到两个不同区域相邻边的最小值。对于不同区域,区域内差异性因子Int(·)要小于区域间差异性因子Dif(·)。不同区域的合并条件可以定义为
(8)
式中,MInt(Ci,Cj)表示取两个不同区域内差异最小值。
MInt(Ci,Cj)=min (Int(Ci)+τ(Ci),
Int(Cj)+τ(Cj))
(9)
(10)
式中:τ用来控制分割大小;k为控制常量;σI为图像的整体方差。τ越大,则表示不同区域边界需要非常显著,否则将被合并成一个大的区域,最后将得到大的分割区域。τ通过σI自动控制参数大小,使得算法在不同对比度场景中都能取得很好效果。
将图像从RGB空间转换到HSV空间,对HSV空间每个通道进行分解,得到图2所示结果。从图中可以看到,由于环境不同,以及在拍摄过程中相机为达到最好的拍摄效果做的底层自动化处理,最终得到的色度通道图在颜色相近区域出现剧烈变化,特别是在饱和度低的区域。很难通过色度对不同区域进行区分,特别是天空亮白区域或者岸上的黑暗区域,很容易在色域内进行跳变。而在饱和度图层中,陆地区域由于颜色信息明显,其饱和度在整个图像中值最大,水面由于陆地倒影的影响,也会出现饱和度值比较大的情况。在亮度值中,可以假设自然界光源都来自天空,陆地和水面的光线来自不同方向的反射,因此天空亮度最大。水面由于反射率较高,其亮度略低于天空。而陆地容易吸收照射过来光线,在图像中形成亮度最低区域。因此通过饱和度图和亮度图,可以初步估计出陆地和天空区域。
图2 HSV彩色空间分析
在无人船正常航行过程中,天空区域在图像的最上区域,水面区域在图像的最下区域,陆地区域在图像的中间区域。根据HSV空间对水上场景分析,可以将亮度值较大且在图像最上方的区域作为天空区域,而饱和度最大的区域为陆地区域。虽然受到倒影的影响,水面倒影也可能包括在饱和度值较大的区域,但是本文研究的重点不是陆地检测,其目的是通过预测陆地区域来估计天空区域的边界,因此包含水面倒影区域的陆地检测结果对本文天空检测结果不产生影响。在估计天空区域的空间位置后,下一步需要进一步准确确定天空区域的边界。
通过图像分割算法,将颜色亮度相近的聚成一块区域,分割结果表示为S={s1,s2,…,sn}。通过对图像分析可以知道,天空与陆地或水面的相交边界相对比较明显。本文采用的分割算法,是基于边界的分割算法,对于纹理不是很明显的云,能将大部分天空聚成一块区域,同时根据天空与其他区域分界线,将不同类别区域分割成不同的区域。然后计算每个区域中饱和度和亮度的平均值、中心点位置。将饱和度、亮度值和区域位置作为每个分割区域的特征。对于某一个分割区域si,该分割区域的特征可以表示为xi={xis,xiv,xix,xiy}。xis和xiv分别是si中平均饱和度和亮度,xix和xiy分别是区域中心点位置的横坐标和纵坐标值。然后使用支持向量机(support vector machines, SVM)构建分类器,用来对每个分割区域进行天空区域检测。首先选取几张图像,并分割不同区域,对不同分割区域进行标注,制作训练样本数据{(x1,y1),(x2,y2)…(xn,yn)},xi为输入特征,yi为输出目标,最优超平面为wTxi+b=0,其中i=0,1,…,n,则需要满足以下约束条件:
yi(wTxi+b)≥1-β
(11)
式中,β为松弛变量。
SVM分类器的目标为找到一个分类错误率最小的优化超平面,优化问题可表示为
(12)
式中,C为惩罚系数。
为了验证算法的有效性,本章节设计了三个实验,分别测试算法设计过程的合理性,算法对不同场景的有效性,以及和其他算法效果的比较。
本实验对算法的各过程进行单独研究分析,探讨每个过程对整个算法的作用和影响,以便对算法有进一步了解,实验的结果如图3所示。其中每一列为不同数据,每一行为算法中间各过程的中间结果。图3a为原始图像。图3b是陆地区域定位结果,根据图像HSV空间中的饱和度通道图层,利用聚类方法,将图像分成三类,其中饱和度值最大的区域作为陆地可能性最大区域。由图3b最后一个结果图可以看到,由于岸上反射以及自身水体颜色影响,部分水上也被归类为陆地,但是对最后结果并不影响。图3c是天空区域定位结果,根据图像HSV空间中的亮度通道图层,同样使用聚类方法,将图像分成三类,其中亮度值最大的区域作为天空可能性最大区域。其结果如图3c所示,由于天空亮度分布不均匀,仅仅依靠亮度值,并不能将所有天空区域检测出来。图3d是图像的分割结果,根据边界信息,将图像分割成不同区域。图3e是检测结果,根据HSV空间对陆地和天空区域初步估计和分割结果,最后得到天空区域的准确区域。
a) 原始图像
为了验证无人船在不同场景下的效果,使用距离岸边不同距离的图像数据对算法进行测试,结果如图4所示。
图4 算法在不同场景的效果
当无人船航行在湖泊中不同位置时,算法都能很好地检测出天空位置。在靠近岸边时,陆地在图像中占的区域较大,而天空区域较小。随着离岸边距离不断增大,天空区域所占大小也不断增大。当无人船在湖泊中心时,天空区域达到最大,陆地区域只有很小一部分,而天空边界线可以近似看作一条直线。在不同场景中,无人船相对太阳的方位不同,以及水面出现的纹理不同,这给基于水面的检测方法带来一定难度。而面对天空的检测方法,主要解决的是天空中云、光晕和水雾造成边界不明显带来的问题。本文提出的算法,很好地解决了上述问题,面对不同环境取得了稳定的效果。
本实验与类似工作的相关算法进行对比性能测试,结果如图5所示。每一列为不同的实验数据,每一行为不同算法对应的结果图。图5a为输入的原始图像数据。图5b为采用基于边缘检测的算法来对天空边缘进行检测结果。实验中对该方法进行改进,采用Canny算法提取区域的显著边缘点,然后保留每一列在图像最上面的点作为天空边缘点。检测的显著边缘点在图中用白色显示,而最终的天空检测边缘点用黑色显示。结果表明该方法在复杂场景,比如水面波浪明显的场景,很容易失效。图5c为基于聚类算法的天空检测结果,该方法将图像转换成灰度图像,然后使用基于K-mean的聚类算法来检测天空区域,检测天空区域用纯白显示。在该算法中,对于亮度分布不均匀的宽动态场景,基于聚类方法依然不能很好地检测出天空区域。图5d表示基于亮度的方法的检测结果,该方法将图像转换到HSV空间,然后使用亮度通道图层,根据亮度值将像素平局分为三个类别,选择亮度最大区域作为天空区域,检测天空区域同样用纯白显示。该方法和基于聚类的方法类似,在宽动态亮度不均匀场景,不能有效检测天空区域。图5d为本文提出的方法的检测结果,检测天空区域用纯白显示。结果表明,无论在有波浪倒影的复杂场景,还是场景亮度分布均匀情况,本文所提出的算法依然能取得较好效果。
a) 原始图像
图5b的结果图显示,在大部分天气晴朗、陆地边界清晰情况下,该算法能取得很好的效果。当在有雾情况下,远处陆地边界不明显,很难提取足够多的边界点。在离岸边较近距离处,并不是每一行都有天空区域,并且水面处倒影严重,噪声点影响算法的稳定性。根据图5c和图5d的结果图,无论采用聚类方法,还是基于亮度的方法,当无人船正对太阳时,亮度分布不均匀,天空亮度以太阳为中心呈现圆环梯度变化,同时水面由于反射作用,也有较大的亮度值,最后得到的天空检测结果具有较大误差。而本文提出的方法,则很好地解决了上述问题,取得较好的结果。
为了进一步量化各种算法的效果,由远及近将数据分成四个不同场景,分别统计各种算法的预测精度,其准确性为
(13)
式中:ptp表示准确检测为天空的像素点个数;pfp表示错误地将非天空区域检测为天空的像素点个数。
各算法的检测结果如表1所示。场景1为距离岸边最近的场景,场景2为距离岸边较近的场景,场景3为距离岸边较远的场景,场景4为在湖泊中间距离岸边最远的场景。实验结果表明,不管在什么场景下,本文提出的算法都能取得较好的结果。
表1 不同场景下各算法检测准确性
本文提出一种稳定的天空检测算法,旨在为无人船自主航行提供有用信息。首先,提出基于变分法的图像处理方法,去除图像的细节纹理信息,保留图像的不同区域的结构信息。然后使用基于图的分割算法,将图像分割成不同的区域,这些区域具有相似的颜色信息。其次,对水上场景图像在HSV颜色空间分布进行深入分析,根据饱和度和亮度信息对天空区域在图像中的位置进行初略估计。最后,根据分割结果和初步估计的天空位置信息,准确得到天空区域。实验结果表明,本文提出的算法在不同场景中都能取得较好的效果,验证了算法的有效性和稳定性。这为后续无人船视觉感知提供稳定参考信息,利用天空区域在图像占据的像素大小估计无人船相对岸边的距离,以及天空区域亮度变化特点判断太阳相对无人船的方位。根据天空边界线的位置平移和旋转变化,实时估计无人船的姿态动态变化,可以为惯导等姿态传感器数据的噪声过滤过程提供有用信息。