《OpenCV混合高斯模型函数说明.doc》由会员分享,可在线阅读,更多相关《OpenCV混合高斯模型函数说明.doc(10页珍藏版)》请在金锄头文库上搜索。
1、OpenCV混合高斯模型函数注释说明一、 cvaux.h#define CV_BGFG_MOG_MAX_NGAUSSIANS 500/高斯背景检测算法的默认参数设置#define CV_BGFG_MOG_BACKGROUND_THRESHOLD 0.7 /高斯分布权重之和阈值#define CV_BGFG_MOG_STD_THRESHOLD 2.5 /=2.5(99%)#define CV_BGFG_MOG_WINDOW_SIZE 200 /学习率=1/win_size#define CV_BGFG_MOG_NGAUSSIANS 5 /k=5个混合高斯模型#define CV_BGFG_MOG
2、_WEIGHT_INIT 0.05 /初始权重#define CV_BGFG_MOG_SIGMA_INIT 30 /初始标准差#define CV_BGFG_MOG_MINAREA 15.f /?#define CV_BGFG_MOG_NCOLORS 3 /颜色通道数/* CV_BG_STAT_MODEL_FIELDS()的宏定义*/ #define CV_BG_STAT_MODEL_FIELDS() int type; /type of BG model CvReleaseBGStatModel release; / CvUpdateBGStatModel update; IplImage*
3、 background; /*8UC3 reference background image*/ IplImage* foreground; /*8UC1 foreground image*/ IplImage* layers; /*8UC3 reference background image, can be null */ 8UC3参考背景图片,可以是空的 int layer_count; /* can be zero */ CvMemStorage* storage; /*storage for foreground_regions?/ 储存前景区域 CvSeq* foreground_
4、regions /*foreground object contours*/前景物体轮廓/*高斯背景模型参数结构体*/typedef struct CvGaussBGStatModelParams int win_size; /等于 1/alpha int n_gauss; /高斯模型的个数 double bg_threshold, std_threshold, minArea;/ bg_threshold:高斯分布权重之和阈值、std_threshold:2.5、minArea:? double weight_init, variance_init;/权重和方差CvGaussBGStatMo
5、delParams;/*高斯分布模型结构体*/typedef struct CvGaussBGValues int match_sum; double weight; double varianceCV_BGFG_MOG_NCOLORS; double meanCV_BGFG_MOG_NCOLORS;CvGaussBGValues;typedef struct CvGaussBGPoint CvGaussBGValues* g_values;CvGaussBGPoint;/*高斯背景模型结构体*/typedef struct CvGaussBGModel CV_BG_STAT_MODEL_FI
6、ELDS(); CvGaussBGStatModelParams params; CvGaussBGPoint* g_point; int countFrames;CvGaussBGModel;二、 cvbgfg_gaussmix.cpp/ cvCreateGaussianBGModel/功能:高斯背景模型变量bg_model初始化赋值CV_IMPL CvBGStatModel* cvCreateGaussianBGModel( IplImage* first_frame, CvGaussBGStatModelParams* parameters) CvGaussBGModel* bg_mod
7、el = 0;/高斯背景状态模型变量 CV_FUNCNAME( cvCreateGaussianBGModel ); _BEGIN_; double var_init; CvGaussBGStatModelParams params;/高斯背景状态模型参数变量 int i, j, k, n, m, p; /初始化参数,如果参数为空,则进行初始化赋值 if( parameters = NULL ) params.win_size = CV_BGFG_MOG_WINDOW_SIZE;/学习率=1/200=0.005 params.bg_threshold = CV_BGFG_MOG_BACKGRO
8、UND_THRESHOLD;/判断是否为背景点的阈值0.7 params.std_threshold = CV_BGFG_MOG_STD_THRESHOLD;/标准阈值2.5 params.weight_init = CV_BGFG_MOG_WEIGHT_INIT;/权重值0.05 params.variance_init = CV_BGFG_MOG_SIGMA_INIT*CV_BGFG_MOG_SIGMA_INIT; /方差30*30 params.minArea = CV_BGFG_MOG_MINAREA;/? params.n_gauss = CV_BGFG_MOG_NGAUSSIANS
9、;/高斯模型个数 else params = *parameters; if( !CV_IS_IMAGE(first_frame) )/如果第一帧不是图像,则报错 CV_ERROR( CV_StsBadArg, Invalid or NULL first_frame parameter ); CV_CALL( bg_model = (CvGaussBGModel*)cvAlloc( sizeof(*bg_model) );/申请内存空间 memset( bg_model, 0, sizeof(*bg_model) ); bg_model-type = CV_BG_MODEL_MOG;/ CV_
10、BG_MODEL_MOG高斯背景模型 bg_model-release = (CvReleaseBGStatModel)icvReleaseGaussianBGModel;/释放内存的函数指针 bg_model-update = (CvUpdateBGStatModel)icvUpdateGaussianBGModel;/更新高斯模型的函数指针 bg_model-params = params; /申请内存空间 CV_CALL( bg_model-g_point = (CvGaussBGPoint*)cvAlloc(sizeof(CvGaussBGPoint)* (first_frame-wi
11、dth*first_frame-height) + 256);/256? CV_CALL( bg_model-background = cvCreateImage(cvSize(first_frame-width, first_frame-height), IPL_DEPTH_8U, first_frame-nChannels); CV_CALL( bg_model-foreground = cvCreateImage(cvSize(first_frame-width, first_frame-height), IPL_DEPTH_8U, 1); CV_CALL( bg_model-storage = cvCreateMemStorage(); /初始化 var_init = 2 * params.std_threshold * params.std_threshold;/初始化方差 CV_CALL( bg_model-g_point0.g_values = (CvGaussBGValues*)cvAlloc( sizeof(CvGaussBGValues)*params.n_gauss* (fi