沈洋
(上海海事大学信息工程学院,上海 201306)
现今,传统的水上船舶监控方法已经无法满足人们的要求,无人机具有体积小、操作方便等优势,因此基于无人机的水上船舶监控已经成为水上交通管制一个不可或缺的组成部分。其中运动目标检测算法是核心算法,特别是具有良好鲁棒性、实时性能好的算法,对于实现更好的水上交通监管具有重要意义。
常见的运动目标检测的算法有三种,分别是帧差分法、光流法以及背景差分法。帧差分法是将两帧图像相减,然后将得到的差值和特定的阈值进行比较,最终得到运动目标,由于两帧之间的时间间隔较短,所以对于运动缓慢的视频帧而言,相邻两帧之间差别不大,检测效果并不好;光流法检测运动目标的思想是根据光流场的变化,状态理想时,它的检测效果较好,但是一旦光照因素发生变化,就会出现误检的情况,并且它计算量大,对于硬件的要求较高,而且实时性不好;背景差分法是将当前帧的图像和建立好的背景模型做减法运算,所以背景模型建立的好坏与否直接关系到最后的检测结果是否准确,所以背景差分法对背景模型的建立具有很高的要求。
Vibe算法是由Olivier Barnich等知名学者提出的一种像素级背景建模(前景检测)的算法。其他的运动目标检测算法的背景模型的建立都需要多帧图像才能完成,Vibe算法的模型初始化只用了视频图像的第一帧就完成了,从第二帧图像就开始检测运动目标,具有良好的实时性和适应性,但是也存在很多缺陷。例如,在视频第一帧图像就有运动目标的情况下,Vibe算法能够检测出运动目标,同时在原来的位置也会检测出一个虚假的运动区域。另外,当运动目标运动速度缓慢时,该算法会将该运动目标当作背景,检测结果中也会有大量的空洞。对于Vibe算法的各种缺点,本文针对无人机航拍视频中的船舶检测问题,在Vibe的基础上,提出了一种新的低空航拍视频中的船舶检测方法,将传统的帧差算法和Vibe算法进行融合,实现了对无人机航拍视频中的船舶检测,并且准确性、完整性都有所提高。
Vibe算法的背景模型建立与更新首次运用到了随机选择机制和邻域传播机制,是一种基于样本的背景建模方法[1]。Vibe算法为每一个像素建立一个样本集,这个样本集包括该位置过去时刻的像素值和它的邻域位置上的像素值,然后通过对比样本集中的像素和该位置现在的像素值,来判断此像素是前景还是背景,再对背景模型随机的进行更新[2]。Vibe算法的基本原理主要由背景模型初始化、前景检测和背景模型更新这三大部分组成[3-5]。
在Vibe算法的背景模型中,每个背景像素点都有一个属于自己得样本集合,是否属于背景像素点还需要进一步的比较才能确定。具体的思想就是在八邻域模型(如表1所示)中为每个像素点存储了一个样本集,这个样本集由该点过去的像素值和其邻点的像素值的采样值组成,通过对比样本集和新的像素值,来判断该点是背景点像素点,还是前景目标像素点。如果该点是属于背景像素点,那么它和样本集中的像素值应当差别不大。如图1所示,SR(V(x))是X为中心R为半径的圆形区域,V(x)表示X点处的像素值;M(x)={V1,V2,…,VN}为X处的背景样本集(样本集大小为N);通过比较 SR(V(x))与 M(x)交集的个数是否大于给定的阈值#min,如果SR(V(x))与M(x)交集的个数大于或者等于给定的阈值#min,那么就认为X点属于背景点。这就完成了像素点是前景还是背景的判断。
背景模型的更新就是使得背景模型能够跟随实际场景中的背景的变化做实时的更新,例如背景物体发生变化,光照发生变化等。在Vibe算法中,若某点被划分成背景像素点,那么它做背景更新的概率为1/φ。具体的思想为:每一个背景点有1/φ的概率去更新自己的模型样本值,同时也有1/φ的概率去更新它的邻居点的样本值。φ为时间采样因子。这种采用随机选取的更新方法可以是样本值具有平滑的生命周期。由于是随机更新,所以每个样本都有相同的几率被更新,这样一个样本值在时刻t不被更新的概率是(N-1)/N,假设时间是连续的,那么在dt的时间过去后,样本值保持不变的概率是:
可以看出样本更新与时间无关,采样的方式是无记忆的,这也提高了算法的动态适应能力。
表1 V(X)的八邻域模型
图1 模型像素值比较示意图
Vibe算法具有良好的适应性,能够在多种场景下适用,通过Vibe算法的检测原理不难看出,从背景模型的建立,前景目标的检测到最后的背景模型的更新,比较简单,易于实现,实时性较好。但是也存在一些缺点,如果运动目标出现在视频图像的第一帧时,在后续的检测过程中,会出现虚假的运动目标,也就是鬼影。在本文中,当水面受到阳光照射时引起的强反光,以及船舶快速运动产生的水波纹,都会引起大量的错误检测,速度较慢的船舶,检测后也会出现大量空洞。
无人机航拍的视频中的待检测船舶目标大小不一,船体运动缓慢,而且无人机的运动轨迹不定,并且航拍的第一帧图像中就存在船体,因此Vibe算法存在鬼影、误检和目标检测不完整等问题,无法快速准确地完成船舶目标检测。本文在Vibe算法的基础上提出了结合帧差法的改进算法,利用二者做与运算,来确定出前景目标。本文的算法流程图如图2所示,对于航拍的视频连续读取两帧,分别进行Vibe检测,得到前景像素,再将二者进行帧差运算,再确定前景和背景以及哪些是鬼影。也就是利用当前帧的Vibe检测结果和前一帧的Vibe检测结果做差分运算,在进行一轮前景像素点与背景像素点的判定。
在上述算法流程图中,分别将视频中的第(k-1)帧和第k帧利用Vibe算法完成检测,通过当前帧与背景模型的比较结果可以得到背景像素点值为0,前景像素点值为255。再对两帧Vibe算法的检测结果作进一步的比较,如果前一帧(k-1帧)对应的像素值是255,而且当前帧(k帧)像素值还是255时,就应当判断该点是误检点,是鬼影,需要对鬼影进行消除,把该点的像素值做置零处理,而且进行背景更新操作;当前一帧(k-1)帧对应的像素值是0,而当前帧(k帧)对应的像素值为255时,就应当判断该点是前景运动点,作为前景输出。因此得到判断第k帧对应的某个像素点的属性S判断为式(2)所示。
图2
在实际的环境中,检测过程容易受到各种噪声的干扰而影响到检测结果的准确性,最后会使得前景检测出来的二值图片在目标上出现黑点以及背景上会出现白点,即目标检测不完整和误检点。对于这种干扰,小通过开运算使得物体的边缘平滑,然后用闭运算填补船舶内部的空洞,最后通过最小外接矩形完成对船舶的框定。
本次实验所用视频是无人机在黄浦江流域上方拍摄,视频分辨率为1280×720,视频帧率为25帧/s;系统平台是Ubuntu,软件实施平台为OpenCV 2.4.8。
图3和图4给出了垂直拍摄情况下单个船只和多个船只两组实验结果的分析对比。各种检测算法对运动船舶目标的检测情况各不相同。和传统的Vibe算法比较起来,改进算法在准确性、目标完整性方面都有不小的提升。具体的实验结果分析如下:根据图3(2)和图4(2)可以看出对于运动缓慢的船只,帧差法无法提取出完整的目标图像,船舶轮廓严重缺损;Vibe算法的结果由图 3(3)和图 4(3)所示,可以看出,船体轮廓不清晰,内部存在空洞,并且存在一定的鬼影[6-7];图3(4)和图4(4)是本文算法的结果图,如图所示,针对于前两种算法的运动目标不完整和误检测问题做出了改善,填补了内部的空洞,消除了误检点,准确地得到了运动船舶的前景图。最后。图3(5)和图4(5)给出了用最小外接矩形对船舶目标的检测结果。
图3 单个船只垂直拍摄实验结果图
图4 多个船只垂直拍摄实验结果图
本文从对无人机航拍视频中的船舶目标检测的实际要求出发,用前景目标检测算法中最新的Vibe算法为基础,对其在运动目标检测的缺点提出了改进,融合了帧差法,通过开闭运算对得到的前景目标作进一步的优化,将理论算法和实际情况结合到一起,分别对于多个船只和单个船只的视频进行效果测试,实现结果表明,该算法实现了对于基于无人机航拍视频的船舶检测,并且能够消除误检点,同时可以获得更加完整的目标。