混合高斯模型:opencv中MOG2的代码结构梳理
/*
头文件:OurGaussmix2.h
*/
#include "opencv2/core/core.hpp"
#include <list>
#include"cv.h"
using namespace cv;//InputArray 等的定义在cv里面
namespace ourGaussmix
{ class BackgroundSubtractor: public cv::Algorithm
{
public:
virtual ~BackgroundSubtractor();
virtual void operator()(InputArray _image, OutputArray _fgmask, double learningRate);
virtual void getBackgroundImage(OutputArray backgroundImage,OutputArray backgroundImageslow) const;
}; class OurBackgroundSubtractorMOG2 : public BackgroundSubtractor
{
public:
OurBackgroundSubtractorMOG2();
OurBackgroundSubtractorMOG2(int history, float varThreshold, bool bShadowDetection=true);
virtual ~OurBackgroundSubtractorMOG2();
virtual void operator()(InputArray _image, OutputArray _fgmask, double learningRate);
virtual void getBackgroundImage(OutputArray backgroundImage,OutputArray backgroundImageslow) const;
virtual void initialize(Size frameSize, int frameType);
};
} /*
cpp文件
*/
namespace ourGaussmix
{
/****************************
static const 类型的默认参数
*****************************/ struct GaussBGStatModel2Params
{
//存储参数
}; struct GMM
{
float weight;
float variance;
}; /***基类中的虚函数都设为空的***/
BackgroundSubtractor::~BackgroundSubtractor() {}
void BackgroundSubtractor::operator()(InputArray _image, OutputArray _fgmask, double learningRate)
{
}
void BackgroundSubtractor::getBackgroundImage(OutputArray,OutputArray) const
{
} static CV_INLINE bool detectShadowGMM(const float* data, int nchannels, int nmodes,const GMM* gmm, const float* mean,
float Tb, float TB, float tau)
{
/*阴影检测函数内容*/
} /*定义一个结构体用来执行OurBackgroundSubtractorMOG2*/
struct MOG2Invoker
{
/*C++中结构体是一个特殊的类 下面的是构造函数*/
MOG2Invoker(const Mat& _src, Mat& _dst,
GMM* _gmm, float* _mean,
uchar* _modesUsed,
int _nmixtures, float _alphaT,
float _Tb, float _TB, float _Tg,
float _varInit, float _varMin, float _varMax,
float _prune, float _tau, bool _detectShadows,
uchar _shadowVal)
{
/*给结构体的参数赋值*/
} void operator()(const BlockedRange& range) const
{
/*混合高斯模型参数的更新*/
} }; OurBackgroundSubtractorMOG2::OurBackgroundSubtractorMOG2()
{
/*默认构造函数赋值 全部赋予默认值*/
}
OurBackgroundSubtractorMOG2::OurBackgroundSubtractorMOG2(int _history, float _varThreshold, bool _bShadowDetection)
{
/*构造函数赋值 部分自选 其他默认值*/
}
OurBackgroundSubtractorMOG2::~OurBackgroundSubtractorMOG2()
{
} void OurBackgroundSubtractorMOG2::initialize(Size _frameSize, int _frameType)
{
/*初始化函数 分配内存*/
//bgmodel.create( 1, frameSize.height*frameSize.width*nmixtures*(2 + nchannels), CV_32F );
//bgmodelUsedModes.create(frameSize,CV_8U);
//bgmodelUsedModes = Scalar::all(0);
} void OurBackgroundSubtractorMOG2::operator()(InputArray _image, OutputArray _fgmask, double learningRate)
{
/*判断是否初始化并调用initialize*/
//parallel_for(BlockedRange(0, image.rows),
// MOG2Invoker(image, fgmask,
// (GMM*)bgmodel.data,
// (float*)(bgmodel.data + sizeof(GMM)*nmixtures*image.rows*image.cols),
// bgmodelUsedModes.data, nmixtures, (float)learningRate,
// (float)varThreshold,
// backgroundRatio, varThresholdGen,
// fVarInit, fVarMin, fVarMax, float(-learningRate*fCT), fTau,
// bShadowDetection, nShadowDetection));
} void OurBackgroundSubtractorMOG2::getBackgroundImage(OutputArray backgroundImage,OutputArray backgroundImageslow) const
{ } }
这是opencv中混合高斯模型代码的结构梳理 parallel_for的部分没有看懂 整个的结构还是很清晰的 更新部分的代码写在了结构体MOG2Invoker的重载操作符()中,然后在OurBackgroundSubtractorMOG2的重载操作符()中调用MOG2Inovker。为什么这样写不清楚,会效率更高吗?
混合高斯模型:opencv中MOG2的代码结构梳理的更多相关文章
- [zz] 混合高斯模型 Gaussian Mixture Model
聚类(1)——混合高斯模型 Gaussian Mixture Model http://blog.csdn.net/jwh_bupt/article/details/7663885 聚类系列: 聚类( ...
- Opencv混合高斯模型前景分离
#include "stdio.h" #include "string.h" #include "iostream" #include &q ...
- OpenCV混合高斯模型函数注释说明
OpenCV混合高斯模型函数注释说明 一.cvaux.h #define CV_BGFG_MOG_MAX_NGAUSSIANS 500 //高斯背景检测算法的默认参数设置 #define CV_BGF ...
- 运动检测(前景检测)之(二)混合高斯模型GMM
运动检测(前景检测)之(二)混合高斯模型GMM zouxy09@qq.com http://blog.csdn.net/zouxy09 因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新 ...
- 混合高斯模型(GMM)推导及实现
作者:桂. 时间:2017-03-20 06:20:54 链接:http://www.cnblogs.com/xingshansi/p/6584555.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 记录:EM 算法估计混合高斯模型参数
当概率模型依赖于无法观测的隐性变量时,使用普通的极大似然估计法无法估计出概率模型中参数.此时需要利用优化的极大似然估计:EM算法. 在这里我只是想要使用这个EM算法估计混合高斯模型中的参数.由于直观原 ...
- 机器学习进阶-背景建模-(帧差法与混合高斯模型) 1.cv2.VideoCapture(进行视频读取) 2.cv2.getStructureElement(构造形态学的卷积) 3.cv2.createBackgroundSubtractorMOG2(构造高斯混合模型) 4.cv2.morpholyEx(对图像进行形态学的变化)
1. cv2.VideoCapture('test.avi') 进行视频读取 参数说明:‘test.avi’ 输入视频的地址2. cv2.getStructureElement(cv2.MORPH_E ...
- PRML读书会第九章 Mixture Models and EM(Kmeans,混合高斯模型,Expectation Maximization)
主讲人 网络上的尼采 (新浪微博: @Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:10:56 今天的主要内容有k-means.混合高斯模型. EM算法.对于k-me ...
- 混合高斯模型(Mixtures of Gaussians)和EM算法
这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示 ...
随机推荐
- QS2016年全球高等教育系统实力排名 中国排名世界第八亚洲第一
2016年5月18日,QS发布"2016年全球高等教育系统实力排名",中国在此榜单表现优异,排名世界第八亚洲第一. 排名指标 排名指标及计算方法如下: 系统实力:QS大学排名前70 ...
- PHP基础之 数组(二)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- STM32F10xx CAN BUS相关库文件"stm32f10x_can.c"内的库函数解析
一.背景: 还是继续CAN通信,要节省开发时间,使用库函数可大大降低开发周期,并且还能确保寄存器的配置几 乎是万无一失,所以,在此就STM32F10xx的CAN操作库函数的使用做个简析. STM32有 ...
- cf.301.D. Bad Luck Island(dp + probabilities)
D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Jetty安装
下载jetty http://www.eclipse.org/jetty/ 看好jdk 版本 安装 解压压缩包到指定目录,且将其目录路径定义为${JETTY_HOME} 进入${JETTY_HOME ...
- 设置p标签自动换行
<body> <p style="width:20px;height:100px;background-color:#069; word-wrap: break-w ...
- 【C语言入门教程】5.1 函数说明 与 返回值
C 语言是结构化语言,它的主要结构成分是函数.函数被作为一种构件,用以完成程序中的某个具体功能.函数允许一个程序的各个任务被分别定义和编码,使程序模块化.本章介绍 C 语言函数的设计,如何用函数分解程 ...
- 在Mac mini上编译Android源码
参考文章 1.Android 6.0 源代码编译实践 2.编译Android源码致命错误解决方案 实践过程 1.Mac下安装Ubuntu双系统 (1)Ubuntu版本:Ubuntu 15.10 注:实 ...
- Java网络编程学习
服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者相互通信.但有时在某个网络中很难将服务器与客户机区分开.我们通常所说的“局域网”(Local ...
- UICollectionView + AFNetWorking 异步加载,局部刷新.
最近在做的项目需要cell里面的数据需要和后台实时交互.而collectionview reload会整体刷新. //m层 发送通知 [[NSNotificationCenter defaultCen ...