资源简介
基于VIBE的运动目标检测,其根据随机采样原理进行背景建模,检测速度快,准确率高。
代码片段和文件信息
#include “stdafx.h“
#include “hanshu.h“
#include
#include “highgui.h“
#include
#include
using namespace std;
using namespace cv;
static int c_xoff[9] = {-1 0 1 -1 1 -1 0 1 0};//x的邻居点
static int c_yoff[9] = {-1 0 1 -1 1 -1 0 1 0};//y的邻居点
float samples[1024][1024][defaultNbSamples+1];//保存每个像素点的样本值
//初始化
void Initialize(CvMat* pframeMatRNG rng){
//记录随机生成的 行(r) 和 列(c)
int randrc;
//对每个像素样本进行初始化
for(int y=0;yameMat->rows;y++){//Height
for(int x=0;xameMat->cols;x++){//Width
for(int k=0;k //随机获取像素样本值
rand=rng.uniform( 0 9 );
r=y+c_yoff[rand]; if(r<0) r=0; if(r>=pframeMat->rows) r=pframeMat->rows-1; //行
c=x+c_xoff[rand]; if(c<0) c=0; if(c>=pframeMat->cols) c=pframeMat->cols-1; //列
//存储像素样本值
samples[y][x][k]=CV_MAT_ELEM(*pframeMatfloatrc);
}
samples[y][x][defaultNbSamples]=0;
}
}
}
//更新函数
void update(CvMat* pframeMatCvMat* segMatRNG rngint nFrmNum){
for(int y=0;yameMat->rows;y++){ //Height
for(int x=0;xameMat->cols;x++){ //Width
//用于判断一个点是否是背景点index记录已比较的样本个数,count表示匹配的样本个数
int count=0index=0;float dist=0;
//
while((count dist=CV_MAT_ELEM(*pframeMatfloatyx)-samples[y][x][index];
if(dist<0) dist=-dist;
if(dist index++;
}
if(count>=defaultReqMatches){
//判断为背景像素只有背景点才能被用来传播和更新存储样本值
samples[y][x][defaultNbSamples]=0;
*((float *)CV_MAT_ELEM_PTR(*segMatyx))=background;
int rand=rng.uniform(0defaultSubsamplingFactor);
if(rand==0){
rand=rng.uniform(0defaultNbSamples);
samples[y][x][rand]=CV_MAT_ELEM(*pframeMatfloatyx);
}
rand=rng.uniform(0defaultSubsamplingFactor);
if(rand==0){
int xNyN;
rand=rng.uniform(09);yN=y+c_yoff[rand];if(yN<0) yN=0; if(yN>=pframeMat->rows) yN=pframeMat->rows-1;
rand=rng.uniform(09);xN=x+c_xoff[rand];if(xN<0) xN=0; if(xN>=pframeMat->cols) xN=pframeMat->cols-1;
rand=rng.uniform(0defaultNbSamples);
samples[yN][xN][rand]=CV_MAT_ELEM(*pframeMatfloatyx);
}
}
else {
//判断为前景像素
*((float *)CV_MAT_ELEM_PTR(*segMatyx))=foreground;
samples[y][x][defaultNbSamples]++;
if(samples[y][x][defaultNbSamples]>50){
int rand=rng.uniform(0defaultNbSamples);
if(rand==0){
rand=rng.uniform(0defaultNbSamples);
samples[y][x][rand]=CV_MAT_ELEM(*pframeMatfloatyx);
}
}
}
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2753 2012-12-05 15:21 ViBeCode\hanshu.cpp
文件 521 2011-07-23 19:02 ViBeCode\hanshu.h
文件 291 2011-07-20 12:04 ViBeCode\stdafx.cpp
文件 320 2011-07-20 12:04 ViBeCode\stdafx.h
文件 314 2011-07-20 12:04 ViBeCode\targetver.h
文件 4001 2013-04-09 17:03 ViBeCode\vibe.cpp
目录 0 2013-04-09 17:18 ViBeCode
----------- --------- ---------- ----- ----
8200 7
- 上一篇:MAX44009-STM32F1
- 下一篇:4X4X4灯立方C程序
评论
共有 条评论