1:例程多目标跟踪:一系列标识基于相对位置关系,当至少一个标识可见可以计算出其他标识在相机坐标系中的位置。
基于simple.c实现的程序:
1):在init函数中,导入多目标配置文件,这个标识文件包含一系列标识和他们在一个固定的坐标系统中确切的位置(包含标识的角点,一系列标识平面的中心,一个任意位置)
这个文件可以从一个全局位置计算出所有标识的转换矩阵。而arMultiGetTransMat(marker_info, marker_num, config)) 不给出每个标识在相机坐标系统中的位置,但是给出在相机坐标系统中一个固定坐标系统的位置,和每一个标识相对于这个固定坐标系统的位置。所以即时不检测到标识,也可以显示在那个标识上的三维目标。
2:在绘制函数中,使用计算出的固定坐标系和标识的位置显示立方体。检测到标识是visible就显示为蓝色,否则,显示为红色。
3:在多标识中,一个重要的结构体:ARMultiMarkerInfoT
ARMultiEachMarkerInfoT * marker
int marker_num
double trans [3][4]
int prevF
double transR [3][4]
第一个参数是多标识的一系列标识,也是一个结构体,和单个的标识信息结构体一致;就相当于单标识的导入标识文件;
第二个参数是标识的数量。
第三个参数是在多标识坐标系中的相机位置;
第四个参数是这个标识是否可视;
第五个参数是最后的位置,我理解为真实相机位置和虚拟相机位置的转换矩阵;而标识相对于虚拟相机的位置的转换矩阵在第一个参数结构体中的转换矩阵。
4:键盘响应:
t:键入一个阈值用于检测标识;意思是阈值可控;
d:开始debug模式,就是清除了颜色,无论是真实图像还是虚拟目标,虚拟目标按照标识信息中的角点位置画一个方框。并在标识上画一个四方线体,没有面。
5:一些函数说明:
argDispImage(dataPtr,0,0);这就是直接显示图像,然后在图像上显示虚拟物体;
argDispImage(dataPtr,1,1);这个除了和上面一样外,还在一个小窗口只显示真实图像,不添加虚拟物体;