准确测量一组基准点之间的相对距离(增强现实应用)

jzz*_*jzz 6 math 3d computer-vision augmented-reality artoolkit

假设我有一组5个标记.我试图使用增强现实框架(如ARToolkit)找到每个标记之间的相对距离.在我的相机中,前20帧只显示前2个标记,这样我就可以计算出2个标记之间的转换.第二个20帧仅显示第2和第3个标记,依此类推.最后20帧显示了第5和第1个标记.我想建立所有5个标记的标记位置的3D地图.

我的问题是,知道由于视频输入质量低而导致距离不准确,如何根据我收集的所有信息尽量减少不准确之处?

我幼稚的方法是使用第一个标记作为基点,从第20帧采取变换的均值和放置第二个标记等第三位和第四位.对于第5个标记,将它放在第4个和第1个之间,将它放在第5个和第1个以及第4个和第5个之间的转换平均值的中间.我认为这种方法偏向于第一个标记放置,但没有考虑到每帧看到超过2个标记的相机.

最终,我希望我的系统能够计算出x个标记的地图.在任何给定的帧中,最多可出现x个标记,并且由于图像质量而存在非系统误差.

任何有关正确处理此问题的方法的帮助将不胜感激.

编辑:有关此问题的更多信息:

让我们说真实世界地图如下:

在此输入图像描述

假设我得到100个读数,用于点之间的每个变换,如图中的箭头所示.实际值写在箭头上方.

我获得的值有一些误差(假设遵循关于实际值的高斯分布).例如,对于标记1至2获得的读数之一可以是x:9.8 y:0.09.鉴于我有所有这些读数,我如何估计地图.理想情况下,结果应尽可能接近实际值.

我天真的方法有以下问题.如果从1到2的变换的平均值略微偏离,即使2到3的读数非常准确,也可以关闭3的放置.此问题如下所示:

在此输入图像描述

果岭是实际值,黑色是计算值.1到2的平均变换是x:10 y:2.

com*_*orm 0

您可以使用最小二乘法来找到最适合所有数据的转换。如果您想要的只是标记之间的距离,那么这只是测量距离的平均值。

假设您的标记位置是固定的(例如,固定到固定刚体),并且您想要它们的相对位置,那么您可以简单地记录它们的位置并对其进行平均。如果有可能将一个标记与另一个标记混淆,您可以逐帧跟踪它们,并使用每个标记位置在其两个周期之间的连续性来确认其身份。

如果您预计刚体会移动(或者如果身体不是刚体,等等),那么您的问题就会困难得多。一次两个标记不足以固定刚体的位置(需要三个)。但请注意,在每次转换时,您几乎同时获得旧标记、新标记和连续标记的位置。如果您已经有了每个标记在身体上的预期位置,那么这应该可以每 20 帧提供一个刚性姿势的良好估计。

一般来说,如果您的身体在移动,则最佳性能将需要某种动态模型,该模型应该用于跟踪其随时间变化的姿势。给定一个动态模型,您可以使用卡尔曼滤波器进行跟踪;卡尔曼滤波器非常适合集成您所描述的数据类型。

通过将标记的位置作为卡尔曼状态向量的一部分,您也许能够从纯粹的传感器数据中推断出它们的相对位置(这似乎是您的目标),而不是先验地要求此信息。如果您希望能够有效地处理任意数量的标记,您可能需要对常用方法进行一些巧妙的修改;您的问题似乎旨在避免通过传统的分解方法(例如顺序卡尔曼滤波)来解决。


编辑,根据以下评论:

如果您的标记产生完整的 3D 姿势(而不仅仅是 3D 位置),则附加数据将使您更轻松地维护有关您正在跟踪的对象的准确信息。然而,上述建议仍然适用:

  • 如果标记的身体是固定的,则使用所有相关帧数据的最小二乘拟合。
  • 如果标记的物体正在移动,则对其动力学进行建模并使用卡尔曼滤波器。

我想到的新点:

  • 尝试管理一系列相对转变可能不是解决问题的最佳方法;正如您所注意到的,它很容易出现累积错误。然而,只要您可以在该框架中实现必要的数学,这也不一定是坏方法。
  • 特别是,最小二乘拟合应该与相对姿势链或环完美配合。
  • 无论如何,无论是最小二乘拟合还是卡尔曼滤波器跟踪,对测量不确定性的良好估计都将提高性能。