在运动目标检测中,为了完善当前构建的背景模型,更好的策略就是更新背景模型。 如果model是当前背景模型,cur是当前帧,则新的模型为:
modelnew = (1-a)*model+a*cur (a为学习率),随着时间的推移,之前的建模图片权重越来越小。Opencv中提供了cvRunningAvg函数,其中调用了accumulateWeighted函数(源代码可参考accum.cpp)。
做了一个实验,在二帧帧差法使用背景更新。二帧帧差法将前一帧作为背景,前后两帧间如果目标运动幅度不是很大,则存在大部分的区域重叠,从而导致检测出来的运动目标存在“空洞”现象。
部分代码如下:
IplImage * pFrame=NULL; //当前帧
IplImage * pFrImg=NULL; //前景
IplImage * pBkImg=NULL; //背景
CvMat* pFrameMat=NULL;
CvMat* pFrMat=NULL;
CvMat* pBkMat=NULL