【OpenCV】高斯混合背景提取

转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7566070

在做火灾检测时尝试了一下用OpenCV中自带的高斯混合背景建模,由于是快速应用,也没推敲太细,日后有机会再研究吧。

如果只是应用,不推敲原理是很简单的。OpenCV自己有一个高斯模型,源代码在安装目录...\opencvsetuppath\src\cvaux的cvbgfg_gaussmix.cpp文件中。

具体算法是根据P. KaewTraKulPong and R. Bowden的论文《An Improved Adaptive Background Mixture Model for Real-time Tracking with Shadow Detection》实现的

源码看起来很简单,除了构造、析构函数,不过几个函数:

[cpp]  view plain copy
  1. //初始化函数  
  2. void BackgroundSubtractorMOG::initialize(Size _frameSize, int _frameType);   
  3. //处理单通道图像  
  4. static void process8uC1( BackgroundSubtractorMOG& obj, const Mat& image, Mat& fgmask, double learningRate );  
  5. //处理多通道图像  
  6. static void process8uC3( BackgroundSubtractorMOG& obj, const Mat& image, Mat& fgmask, double learningRate );  
  7. //重载构造符(在这里转由 process8uC1 或 process8uC3 处理)  
  8. void BackgroundSubtractorMOG::operator()(const Mat& image, Mat& fgmask, double learningRate);  
  9. //释放高斯模型  
  10. icvReleaseGaussianBGModel( CvGaussBGModel** bg_model );  
  11. //更新模型  
  12. icvUpdateGaussianBGModel( IplImage* curr_frame, CvGaussBGModel*  bg_model, double learningRate );  
  13. //建立模型  
  14. cvCreateGaussianBGModel( IplImage* first_frame, CvGaussBGStatModelParams* parameters );  
如果我们不关心具体的参数,都是用默认值的话,很容易就能建立一个高斯背景提取的模型。

[cpp]  view plain copy
  1. //用第一帧初始化模型  
  2. CvBGStatModel* bgModel= cvCreateGaussianBGModel(pInitFrame);  
  3.   
  4. //  
  5. void FireDetector::CheckFireMove2(IplImage *pImgFrame)  
  6. {  
  7.     cvUpdateBGStatModel( pImgFrame, bgModel );  
  8.     // 以左下角为坐标原点  
  9.     bgModel->foreground->origin = bgModel->background->origin = 1;  
  10.     //滤除噪声  
  11.     //cvErode(bgModel->background, bgModel->background);    
  12.     //cvErode(bgModel->foreground, bgModel->foreground);      
  13.     cvMorphologyEx( pImgMotion, pImgMotion, 0, 0, CV_MOP_CLOSE, 3);  
  14.     cvMorphologyEx( pImgMotion, pImgMotion, 0, 0, CV_MOP_OPEN, 1 );  
  15. }  
如果再简化就是
[cpp]  view plain copy
  1. cvUpdateBGStatModel( pImgFrame, bgModel );  
一句话,用新的帧更新背景。

有关高斯背景的原理,日后再补上吧~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值