但是,当背景图像发生长时间的细微变化时,如果一直使用预先存储的背景图像,那么随着时间的增长,累计误差会逐渐增大,最终可能会造成原背景图像与实际背景图像存在较大偏差,导致检测失效。因此,背景差分法中的一个关键要素就是背景更新,自适应的背景图像更新方法往往会大大提高目标检测的准确性及背景差分法的效率。基于像素分析的背景图像更新是常用的背景更新算法之一,该方法在更新背景图像之前,先把背景图像和运动目标分开;对于出现目标的背景区域不进行图像更新,对于其他区域则进行实时更新。因此,该算法所得到的背景图像不会受到运动目标的干扰。但是基于像素分析的背景图像更新算法对噪声具有一定的敏感性,特别是在光线突变时,可能不会实时更新背景图像。背景差分法的优点是算法简单,易于实现。在实际处理过程中,根据实际情况确定阀值之后,所得到结果可以很直观的反应运动目标的位置,大小和形状等信息,能够得到比较精确的运动目标信息。该算法适用于背景固定或变化缓慢等情况,它的关键是如何获得场景的静态背景图像。其缺点是容易受到噪声等外界因素的干扰,如光线发生变化或者背景中的无图暂时移动都会对最终的检测结果造成影响。
2.2程序实现
2.2.1建立各种变量、对象
在对视频中的运动目标进行检测的时候,我们首先需要创建变量,用于后面的读取视频还有结果的显示。
首先,我们需要读取视频路径,在已经有的文件夹可以定义为默认视频路径,需要读取其他的视频,也可以变得很简单,直接将视频拷贝到默认的视频路径文件夹里,然后对应一下文件名,就可以很轻松的实现读取视频的更换。视频文件阅读器的创建时视频读取的第一步。文献综述
接下来,我们需要创建两个视频显示窗口,一个是用来显示原来的视频播放,另外一个是用来显示检测过后的结果,这样更方便于结果的对比,使得检测的结果更加明显易懂。
背景差分法的基础就是有一个相对固定的背景目标用来后期的对比检测。因此,我们需要先进行前景对象的创建还有BLOB分析,前景检测器可以从背景中移动对象,然后输出二进制掩码。像素值为1的,就对应于前景检测器,像素值为0的,对应于背景。前景检测器所检测出来的像素群很可能就是我们所需要的移动目标,然后我们使用BLOB分析来勾勒出运动目标的大体模样,并计算出它的特征,如面积、质心等。
2.2.2建立跟踪器
本设计使用Initialize tracks 函数创建跟踪器,一个跟踪器只对应一个运动目标,这样可以提高目标跟踪的准确性,为后期的电机控制提供更好的信息,当目标数多的时候,可以进一步控制电机的转速与扭矩,这样可以达到控制更有效,目标更明确的目的。对于一直运动的物体,我们也可以进行保存跟踪器,对运动目标进行一直的跟踪,这样,可以在后期的显示中能够很容易的显示出目标的运动轨迹,可以更加直观的显示出目标的运动速度等信息。保存所有正在跟踪的目标,一个目标对应一个跟踪器这样的方法变得更加实用和有效。
目标跟踪器实用结构体的形式,这可以使它的结构更加分明,跟踪效果更加好,具体包括以下几个部分:
(1)id:运动目标的编号;在监控中会同时出现很多个目标,所以我们需要进行对每个运动进行编号,这样可以使得在现实的过程中更加明了。
(2)BBOX:运动目标的边框现实;运动目标需要对它的边框进行标注,使得现实不仅有编号,还有一个明显的边框来辅助现实。