• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: 其他
  • 标签: VIBE  背景建模  

资源简介

基于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


评论

共有 条评论