我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>培训教程

ARToolKit教程:跟踪稳定性

文章来源:第三维度 作者: 发布时间:2013年07月18日 点击数: 字号:

    来源:第三维度

    在前面几节,我们已经看了怎样创建一个简单的 ARToolKit 程序。现在我们想要介绍ARToolKit 的一个重要的特点:历史函数。在 bin 目录下找到 simpleTest2 程序,运行它。

    你可以看到与图 1 相似的屏幕抓图。

ARToolKit教程:跟踪稳定性
图 1 simpleTest2 程序

    也许这个和 simpleTest 程序没有立即表现出不同。然而,如果移动模板靠近摄像头(如图 2 所示),按下键盘‘c’键,就出现了不同。在一种情况下,方块看起来很稳定;在另一种情况下,方块像是有点微微的抖动。前一种情况就是我们使用了历史函数,在后一种情况下没有使用。

ARToolKit教程:跟踪稳定性
图 2 历史函数没有使用时更近距离的观察出现抖动

    使用历史函数

    打开 example/simple2 目录下的 simpleTest2.c 程序。在主循环 mainloop 函数中可以找到下列函数调用:

ARToolKit教程:跟踪稳定性

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

    ARToolKit 提供了另外一个同样具有历史性的函数,但用在探测阶段。我们已经介绍过这个函数:arDetectMarker。相对应的、没有使用历史信息的函数是 arDetectMarkerLite。

    和前面一样,使用历史信息会降低精确度,但是提供了更为稳定的图像,而且速度稍快些。

    用下列代码代替 arDetectMarker:

ARToolKit教程:跟踪稳定性

    重新编译 simpleTest2,放置标识卡使它面对着摄像头(如图 3)。你会发现方块确实“跳”。

ARToolKit教程:跟踪稳定性
在图 3 没有使用历史函数时近距离的观察出现抖动

    跳动的效果的原因是没有上一帧的信息,标识的位置不够好,使探测时不够有效。如果有一个的大小、位置和上一帧的标识的几乎一样的标识,即使模板匹配不是很成功,这个标识仍被视为是和上一帧的标识一样。

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料