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

6
假设我有一组5个标记。我正在尝试使用增强现实框架(例如ARToolkit)找到每个标记之间的相对距离。在我的摄像头中,前20帧只显示前2个标记,因此我可以计算出这2个标记之间的变换。第二个20帧只显示第2个和第3个标记等等。最后20帧显示第5个和第1个标记。我想建立所有5个标记的标记位置的3D地图。
我的问题是,由于视频源的低质量,如何最小化不准确性,考虑到已收集到的所有信息?
我的天真方法是将第一个标记作为基准点,从前20帧中取变换的平均值并放置第2个标记,依此类推处理第3个和第4个标记。对于第5个标记,通过将其放置在第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。

也许在dsp.stackexchange.com上更好? - endolith
1个回答

0

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

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

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

一般而言,如果您的身体在移动,最佳性能需要某种动力学模型,该模型应用于随时间跟踪其姿态。给定动态模型,您可以使用卡尔曼滤波器进行跟踪;卡尔曼滤波器非常适合集成您描述的数据类型。
通过将标记位置包括在卡尔曼状态向量中,您可能能够仅从传感器数据(这似乎是您的目标)推断它们的相对位置,而无需事先要求此信息。如果您想有效地处理任意数量的标记,您可能需要想出一些聪明的方法来变异通常的方法;您的问题似乎设计为避免通过顺序卡尔曼滤波等传统分解方法解决。

根据下面的评论进行编辑:

如果您的标记产生完整的3D姿态(而不仅仅是3D位置),额外的数据将使跟踪对象的准确信息更容易维护。然而,上述建议仍然适用:

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

新想到的要点:

  • 尝试管理一系列相对变换可能不是解决问题的最佳方法;正如您所指出的,它容易积累误差。但是,只要您可以在该框架中实现必要的数学运算,它也不一定是一种不好的方法。
  • 特别是,最小二乘拟合应该可以很好地处理相对姿势的链或环。
  • 无论如何,无论是最小二乘拟合还是卡尔曼滤波跟踪,良好的测量不确定性估计都将提高性能。

谢谢回复, 标记位置是固定的。每帧我只有标记之间的3D变换信息。误差可能是高斯分布的。实际上,我没有标记的位置,但我可以区分一个标记和另一个标记。 - jzz
如果我理解正确的话,您正在进行光学跟踪,最多同时跟踪2个点。我认为这不足以提供完整的3D变换所需的信息——最多只能获取2个标记的3D位置数据,对吗? - comingstorm
我的每个标记实际上都是一个正方形,所以我可以根据参考点的四个角来估算相机相对于每个标记的位置。类似于这个链接:链接 - jzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接