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

时间:2011-12-05 00:55:40

标签: math 3d computer-vision augmented-reality artoolkit

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

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

我天真的方法是使用第一个标记作为基点,从前20帧取转换的平均值,然后放置第2个标记,依此类推第3和第4个标记。对于第5个标记,将它放在第4个和第1个之间,将它放在第5个和第1个以及第4个和第5个之间的转换平均值的中间。我认为这种方法偏向于第一个标记放置,但没有考虑到每帧看到超过2个标记的相机。

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

非常感谢任何有关解决此问题的正确方法的帮助。

修改: 有关此问题的更多信息:

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

enter image description here

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

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

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

enter image description here

绿色是实际值,黑色是计算值。平均变换1到2是x:10 y:2。

1 个答案:

答案 0 :(得分:0)

您可以使用least-squares方法查找最适合您所有数据的转换。如果你想要的只是标记之间的距离,这只是测量距离的平均值。

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

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

一般情况下,如果你的身体在移动,那么最佳表现将需要某种动力学模型,应该用它来追踪它随时间的姿势。给定动态模型,您可以使用Kalman filter进行跟踪;卡尔曼滤波器非常适合于集成您描述的数据类型。

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


编辑,根据以下评论:

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

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

想到的新观点:

  • 尝试管理一系列相对转换可能不是解决问题的最佳方法;如你所知,它容易累积错误。但是,它也不一定是坏方法,只要你能在该框架中实现必要的数学运算。
  • 特别是,最小二乘拟合应该与链条或相对姿势环完美配合。
  • 无论如何,对于最小二乘拟合或卡尔曼滤波器跟踪,对测量不确定度的良好估计将提高性能。