一方面为了学习,一方面按照老师和项目的要求接触到了前景提取的相关知识,具体的方法有很多,帧差、背景减除(GMM、CodeBook、 SOBS、 SACON、 VIBE、 W4、多帧平均……)、光流(稀疏光流、稠密光流)、运动竞争(Motion Competition)、运动模版(运动历史图像)、时间熵……等等。
更为具体的资料可以参考一下链接,作者做了很好的总结。点击打开链接http://blog.csdn.net/zouxy09/article/details/9622285
我只要针对作者提供的源代码,加上我的理解最代码捉了做了相关的注释,便于自己对代码的阅读和与大家的交流,如果不妥之处,稀罕大家多多提出,共同进步
ViBe.h(头文件,一般做申明函数、类使用,不做具体定义)
#pragma once
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
#define NUM_SAMPLES 20 //每个像素点的样本个数
#define MIN_MATCHES 2 //#min指数
#define RADIUS 20 //Sqthere半径
#define SUBSAMPLE_FACTOR 16 //子采样概率,决定背景更新的概率
class ViBe_BGS
{
public:
ViBe_BGS(void); //构造函数
~ViBe_BGS(void); //析构函数,对开辟的内存做必要的清理工作
void init(const Mat _image); //初始化
void processFirstFrame(const Mat _image); //利用第一帧进行建模
void testAndUpdate(const Mat _image); //判断前景与背景,并进行背景跟新
Mat getMask(void){return m_mask;}; //得到前景
private:
Mat m_samples[NUM_SAMPLES]; //每一帧图像的每一个像素的样本集
Mat m_foregroundMatchCount; //统计像素被判断为前景的次数,便于跟新
Mat m_mask; //前景提取后的一帧图像
};
ViBe.cpp(上面所提到的申明的具体定义)