资源简介
粒子滤波目标跟踪算法,可以直接编译运行,基于颜色直方图特征
代码片段和文件信息
// TwoLevel.cpp : 定义控制台应用程序的入口点。
//
/************************************************************************/
/*参考文献real-time Multiple objects Tracking with Occlusion Handling in Dynamic Scenes */
/************************************************************************/
// #include “stdafx.h“
#include
#include
#include
#include
# include
#include
using namespace std;
#define B(imagexy) ((uchar*)(image->imageData + image->widthStep*(y)))[(x)*3] //B
#define G(imagexy) ((uchar*)(image->imageData + image->widthStep*(y)))[(x)*3+1] //G
#define R(imagexy) ((uchar*)(image->imageData + image->widthStep*(y)))[(x)*3+2] //R
#define S(imagexy) ((uchar*)(image->imageData + image->widthStep*(y)))[(x)]
#define Num 10 //帧差的间隔
#define T 40 //Tf
#define Re 30 //
#define ai 0.08 //学习率
#define CONTOUR_MAX_AREA 10000
#define CONTOUR_MIN_AREA 50
# define R_BIN 8 /* 红色分量的直方图条数 */
# define G_BIN 8 /* 绿色分量的直方图条数 */
# define B_BIN 8 /* 兰色分量的直方图条数 */
# define R_SHIFT 5 /* 与上述直方图条数对应 */
# define G_SHIFT 5 /* 的R、G、B分量左移位数 */
# define B_SHIFT 5 /* log2( 256/8 )为移动位数 */
/*
采用Park and Miller方法产生[01]之间均匀分布的伪随机数
算法详细描述见:
[1] NUMERICAL RECIPES IN C: THE ART OF SCIENTIFIC COMPUTING.
Cambridge University Press. 1992. pp.278-279.
[2] Park S.K. and Miller K.W. 1988 Communications of the ACM
vol. 31 pp. 1192–1201.
*/
#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define MASK 123459876
typedef struct __SpaceState { /* 状态空间变量 */
int xt; /* x坐标位置 */
int yt; /* x坐标位置 */
float v_xt; /* x方向运动速度 */
float v_yt; /* y方向运动速度 */
int Hxt; /* x方向半窗宽 */
int Hyt; /* y方向半窗宽 */
float at_dot; /* 尺度变换速度 */
} SPACESTATE;
bool pause=false;//是否暂停
bool track = false;//是否跟踪
IplImage *curframe=NULL;
IplImage *pBackImg=NULL;
IplImage *pFrontImg=NULL;
IplImage *pTrackImg =NULL;
unsigned char * img;//把iplimg改到char* 便于计算
int xinyin;//跟踪时输入的中心点
int xoutyout;//跟踪时得到的输出中心点
int WidHei;//图像的大小
int WidInHeiIn;//输入的半宽与半高
int WidOutHeiOut;//输出的半宽与半高
long ran_seed = 802163120; /* 随机数种子,为全局变量,设置缺省值 */
float DELTA_T = (float)0.05; /* 帧频,可以为30,25,15,10等 */
int POSITION_DISTURB = 15; /* 位置扰动幅度 */
float VELOCITY_DISTURB = 40.0; /* 速度扰动幅值 */
float SCALE_DISTURB = 0.0; /* 窗宽高扰动幅度 */
float SCALE_CHANGE_D = (float)0.001;
评论
共有 条评论