6

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

我的问题是,知道由于视频馈送质量低而导致距离不准确,鉴于我收集的所有信息,我如何最大限度地减少不准确?

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

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

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

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

假设现实世界的地图如下:

在此处输入图像描述

假设我为图像中箭头表示的点之间的每个转换获得 100 个读数。实际值写在箭头上方。

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

我天真的方法有以下问题。如果从 1 到 2 的变换的平均值略微偏离,则 3 的位置可能会偏离,即使 2 到 3 的读数非常准确。这个问题如下图所示:

在此处输入图像描述

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

4

1 回答 1

0

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

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

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

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

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


编辑,根据以下评论:

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

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

想到的新观点:

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