在做火灾检测时尝试了一下用OpenCV中自带的高斯混合背景建模,由于是快速应用,也没推敲太细,日后有机会再研究吧。
如果只是应用,不推敲原理是很简单的。OpenCV自己有一个高斯模型,源代码在安装目录...\opencvsetuppath\src\cvaux的cvbgfg_gaussmix.cpp文件中。
具体算法是根据P. KaewTraKulPong and R. Bowden的论文《An Improved Adaptive Background Mixture Model forReal-time Tracking with Shadow Detection》实现的
源码看起来很简单,除了构造、析构函数,不过几个函数:
//初始化函数
void BackgroundSubtractorMOG::initialize(Size _frameSize, int _frameType);
//处理单通道图像
static void process8uC1( BackgroundSubtractorMOG& obj, const Mat& image, Mat& fgmask, double learningRate );
//处理多通道图像
static void process8uC3( BackgroundSubtractorMOG& obj, const Mat& image, Mat& fgmask, double learningRate );
//重载构造符(在这里转由 process8uC1 或 process8uC3 处理)
void BackgroundSubtractorMOG::operator()(const Mat& image, Mat& fgmask, double learningRate);
//释放高斯模型
icvReleaseGaussianBGModel( CvGaussBGModel** bg_model );
//更新模型
icvUpdateGaussianBGModel( IplImage* curr_frame, CvGaussBGModel* bg_model, double learningRate );
//建立模型
cvCreateGaussianBGModel( IplImage* first_frame, CvGaussBGStatModelParams* parameters );
如果我们不关心具体的参数,都是用默认值的话,很容易就能建立一个高斯背景提取的模型。
//用第一帧初始化模型
CvBGStatModel* bgModel= cvCreateGaussianBGModel(pInitFrame);
//
void FireDetector::CheckFireMove2(IplImage *pImgFrame)
{
cvUpdateBGStatModel( pImgFrame, bgModel );
// 以左下角为坐标原点
bgModel->foreground->origin = bgModel->background->origin = 1;
//滤除噪声
//cvErode(bgModel->background, bgModel->background);
//cvErode(bgModel->foreground, bgModel->foreground);
cvMorphologyEx( pImgMotion, pImgMotion, 0, 0, CV_MOP_CLOSE, 3);
cvMorphologyEx( pImgMotion, pImgMotion, 0, 0, CV_MOP_OPEN, 1 );
}
如果再简化就是
cvUpdateBGStatModel( pImgFrame, bgModel );
一句话,用新的帧更新背景。
有关高斯背景的原理,日后再补上吧~
分享到:
相关推荐
用opencv自带的混合高斯模型提取视频前景,由于空间有限,只能上传c++代码,建立工程后复制即可使用
一个混合高斯模型的domo vs2008+openCV2.3.1测试没有问题 使用的时候要传进去视频的路径 win32控制台参数不知道怎么传的童鞋可以百度 高斯函数的数量设置为3就可以应付大部分场景了
提取监控视频中的车辆,以便于数出车辆数目。。。。。。。。。。。
是opencv 混合高斯模型的原函数,并进行了修改可以实现前景提取并进行背景建模
基于混合高斯背景建模的目标运动意图分析,通过混合高斯背景建模进行前景提取,自己写高斯模型,并非通过OPENCV函数库
刚学习高斯混合模型,收集了些资料方便大家共同学习。 这里包括一些相关的论文 和博客链接,同时附上一段基于opencv的c++代码
利用改进的高斯混合模型对前景目标的提取有较好的作用,这是基于OpenCV的C++程序,请安装OpenCV库进行调试
包含hpp文件和cpp文件,内有描述函数的具体调用方式。视频增稳通过光流+卡尔曼实现,然后对于增稳后的视频,通过混合高斯背景建模,提取前景目标
利用高斯混合背景差分从视频中提取前景并获取其轮廓
采用opencv3.1开发的基于混合高斯模型的运动目标提取
本例的开发环境是vs2008,用的是基于opencv的开发工具包,可以实现效果较好的前景提取技术
使用vibe背景建模算法完成对运动目标的前景提取,这是一种2011年才提出的一种新的背景建模算法,相对于opencv里面的经典混合高斯背景建模速度快了一倍,其算法比混合高斯背景建模跟简单,同时前景的提取效果也好一点...
基于opencv+vs2008开发的混合高斯MOG优化的视频前景提取
内含代码可以检测运动物体,采用高斯混合模型算法提取前景
利用opencv封装的2种GMM函数实现的前景目标提取,同时带blob连通域标记。
利用opencv的混合高斯建模,检测运动的目标,并标示出来,当目标进入指定区域 ,进行报警。
9.4.2 混合高斯背景建模. 345 9.4.3 混合高斯背景建模实现 346 9.4.4 混合模型MOG2 成员参数设定. 348 9.4.5 KNN 模型背景建模实现. 349 9.4.6 GMG 模型背景建模实现 351 9.5 级联分类器——人脸检测.. 353 9.5.1 ...
混合高斯模型GMM,背景/前景提取,有详细的EM算法推导过程,GMM源代码(C++,opencv)付注解,有关GMM的相关论文两篇