混合高斯模型: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一样,给定的训练样本是,我们将隐含类别标签用表示 ...
随机推荐
- python 100例 (持续更新)
1.题目:列表转换为字典. 程序源代码: 1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 4 i = ['a', 'b'] 5 l = [1, ...
- android 读取SQLite android could not open the database in read/write mode错误
由于AndroidManifest.xml文件中uses-permission没有设置权限问题 <uses-permission android:name="android.permi ...
- XDU 1161 - 科协的数字游戏II
Problem 1161 - 科协的数字游戏II Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 112 ...
- Lexicography(数学推论>>求按字典序排第k个排列)
Lexicography Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit ...
- CPU核数跟多线程的关系
一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的? 今天就这一问题查了一些资料,现整理如下: 要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键 ...
- java之BASE64加解密
1.简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 注:位于jdk的java.util包中. 2. ...
- 使用VNC登录Linux
###服务器是否配置了VNCSERVER,可以在命令行下敲入以下命令查看: [root@localhost: ~]#rpm -qa |grep vnc ###配置VNC 1. 机器IP为:10.0.0 ...
- linux 下开放端口问题
Linux安装Tomcat后本地可以正常访问,可是这时Tomcat还不能被外界访问需要在Linux默认防护墙上打开8080端口 打开 /etc/sysconfig/iptables [root@l ...
- 寻找下一款Prisma APP:深度学习在图像处理中的应用探讨(阅读小结)
原文链接:https://yq.aliyun.com/articles/61941?spm=5176.100239.bloglist.64.UPL8ec 某会议中的一篇演讲,主要讲述深度学习在图像领域 ...
- Ubuntu下编译安装OpenCV 2.4.7并读取摄像头[转]
主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...