程序说明:单目标粒子滤波跟踪程序
1. 新建空的 Win32 控制台应用程序;
2. 根据 OpenCV2.2 和 GSL 要求配置 VC++目录和链接器的附加依赖项。
Defs.h
库文件和宏定义。
1. 新建头文件 Defs.h;
2. 添加程序包含文件和宏定义:
a) 包含文件:标准 C、OpenCV 和 GSL;
b) 宏:真假、最值和绝对值;
c) 宏:Observaon:HSV 直方图中 H、S、V 分量的 bin 数目,H、S、V 的最大值,S 和 V 的低阈值,分布参
数;
d) 宏:Parcles:转换模型的高斯采样标准差(建立粒子初始分布),转换模型(二阶自回归模型)参数;
e) 宏:跟踪主程序:命令行参数,粒子数目,窗口名称,输出目录和扩展名,最大输出帧数。
Parcles.h/Parcles.c
粒子滤波的相关定义,函数原型和实现。
1. 新建头文件 Parcles.h,源文件 Parcles.c;
2. 在 Parcles.h 中包含 Observaon.h,在 Parcles.c 包含 Defs.h,Uls.h 和 Parcles.h;
3. 定义粒子结构:当前 x、y 坐标,当前缩放比,前一 x、y 坐标,前一缩放比,初始 x、y 坐标,粒子描述的区域
初始宽和高,粒子描述的区域直方图指针,粒子权值;
4. 在 Parcles.h 声明各函数,并在 Parcles.c 中加以实现。
particle* init_distribution(CvRect region, histogram* histo, int n)
初始化粒子和其分布。
参数 - region:粒子采样的目标区域
参数 - histo: 目标区域直方图指针
参数 - n: 分配的粒子数目
返回 - 初始化的粒子集(数组首地址指针)
1. 定义粒子集,分配空间;
2. 利用目标区域起始点(左上角)和区域宽、高计算出区域中心(x,y);
3. 对于每一个粒子:
a) 初始、前一、当前坐标置赋为(x,y);
b) 前一和当前缩放比置赋为 1.0;
c) 宽、高赋为目标区域宽、高;
d) 直方图指针赋为目标区域直方图指针;
e) 权值赋为 0;