【ARToolkit】历史函数增加稳定性降低精确性

      我们知道,在ARToolkit里面,先由摄像头捕获真实世界的视频,然后传给计算机,计算机再匹配标识卡,如果找到了就计算相对矩阵,调整模型的位置和方向,最后显示在出来。

      其中,在显示的时候,如果将物体靠近摄像头,按下‘c’键,就会出现不同,一种是很稳定,另一种图像则会出现抖动,这其中重要的一个原因就是是否使用历史函数,历史函数可以增加稳定性,更快的出现图像,但是会降低精确性,以simpleTest.c为例,在mainloop函数中


函数 arGetTransMatCont 使用以前的图像帧的信息来减小标识卡的抖动。利用函数 arGetTransMat,计算标识的位置时只用到了当前的图像帧的信息。使用历史函数时,结果 的精确性会降低,因为历史信息的使用增加了精确性的损耗。 

在探测阶段ARToolKit 提供了另外一个同样具有历史性的函数,用来确保稳定性,这个函数就是arDetectMarker,在simpletest.c中,在探测阶段没有使用历史信息的函数是 arDetectMarkerLite,我们使用下列代码来在 arDetectMarkerLite处代替arGetTransMatCont ,来增强稳定性,但是会降低精确性,是图形处于‘跳动’状态


重新编译simpletest,使标识卡对准摄像头,在探测阶段,会发现图形处于‘跳动’阶段。图像边缘出现轻微的抖动,

产生跳动的原因则是没有上一帧的信息,标识的位置不够好,使探测时不够有效。所以使用历史函数能得知上一帧的信息,可以实图像更稳定。

猜你喜欢

转载自blog.csdn.net/qq_38643064/article/details/79936541