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

2024-03-17

假设我有一组 5 个标记。我正在尝试使用增强现实框架找到每个标记之间的相对距离,例如AR工具包 http://www.hitl.washington.edu/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 的变换平均值稍微偏离,则即使 2 到 3 的读数非常准确,3 的位置也可能会偏离。这个问题如下图所示:

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


您可以使用最小二乘法 http://mathworld.wolfram.com/LeastSquaresFitting.html方法,找到最适合所有数据的转换。如果您想要的只是标记之间的距离,那么这只是测量距离的平均值。

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

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

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

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


编辑,根据以下评论:

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

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

我想到的新点:

  • 尝试管理一系列相对转变可能不是解决问题的最佳方法;正如您所注意到的,它很容易出现累积错误。然而,只要您可以在该框架中实现必要的数学,这也不一定是坏方法。
  • 特别是,最小二乘拟合应该与相对姿势链或环完美配合。
  • 无论如何,无论是最小二乘拟合还是卡尔曼滤波器跟踪,对测量不确定性的良好估计都将提高性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 截断浮点数而不向上舍入

    我有一个浮点数 我想将其截断为 3 位 但我不想向上舍入 例如 转换1 0155555555555555 to 1 015 not 1 016 我将如何在 Ruby 中做到这一点 您还可以转换为 BigDecimal 并对其调用 trunc
  • 如何创建一个在给定范围内随机打乱数字的 int 数组[重复]

    这个问题在这里已经有答案了 基本上 假设我有一个可以容纳 10 个数字的 int 数组 这意味着我可以在每个索引中存储 0 9 每个数字只能存储一次 如果我运行下面的代码 int num new int 10 for int i 0 i l
  • 为什么更新功能在Unity中的UnityARWorldMap场景的UnityARHitTestExample中不起作用?

    我正在开发 UnityARWorldMap 以创建统一的持久性 因此 我将模型放置在现实世界中 保存它们 然后加载它们 当我单击 WorldMapManager cs 中的 Load 时 UnityARhitTestExample 中的更新
  • 自动适合衣服的算法?

    想象一下 客户要求您设计一款软件 以满足一些相当粗略的规格 如下所示 1 它将面向时尚行业营销 2 用户将是 设计衣服和东西 的人 可能有一个特定的术语 但我没有想到 3 由于各种原因 能够快速制作原型设计并查看它们在模型上的外观会很有用
  • C++ Irrlicht 程序未链接:“未定义对‘__imp_createDevice’的引用”

    我的 Irrlicht 程序无法链接 我使用的编译器是g Code include
  • 在二维空间中从 A 点前往 B 点?

    我正在开发一个项目 需要我计算从可变点 A 到可变点 B 的 0 360 度航向 以使 A 点的物体面向 B 点 现在 我不确定如何实现这一目标 我用谷歌搜索但没有找到任何好的解决方案 在任何情况下 如何计算二维空间中从 A 点到 B 点的
  • 求反射角的弧度

    我正在编写一个简单的 Flash 游戏 只是为了学习 Flash 并提高我的数学能力 但我对弧度感到非常困惑 因为这对我来说是新的 到目前为止 我所做的是使用鼠标 单击并释放 使用弧度向该方向射出一个球 现在我想要发生的是 当球撞到墙壁时
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • LibGDX - 正确使用 Polygon 类

    我创造了Polygon包裹我的飞机的物体 飞机的大小TextureRegion是 256x74 但在游戏中这个尺寸是 70x20 所以 TextureRegion texRegsAirplane TextureRegion split te
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • 确定范围是否重叠

    给定两个具有整数开始时间和结束时间的事件 E1 s1 e1 E2 s2 e2 实现快速布尔检查以查看事件是否重叠 我有解决方案 但我很想看看其他人想出了什么 编辑 好的 这是我的解决方案 e1 gt s2 s1 gt s2 e2 lt s1
  • Java中如何对整数除法进行四舍五入并得到int结果? [复制]

    这个问题在这里已经有答案了 我刚刚写了一个小方法来计算手机短信的页数 我没有选择使用Math ceil 老实说 它看起来很丑陋 这是我的代码 public class Main param args the command line arg
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 按度数在圆上找到一个点?

    假设我们有一个 100x100 坐标系 如下所示 0 0 是它的左上角 50 50 是它的中心点 100 100 是它的右下角 等等 现在我们需要从中心向外画一条线 我们知道线的角度 但需要计算其终点的坐标 您认为最好的方法是什么 例如 如
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 如何通用地减少子集平均值的计算?

    Edit 由于似乎没有人阅读此链接的原始问题 因此让我在这里介绍一下它的概要 正如其他人所问的 最初的问题是 给定大量值 总和将超过数据类型的值Double那么如何计算这些值的平均值呢 有几个答案说要按集合计算 比如取50个和50个数字 计
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 我应该如何格式化 .dat 文件以便制作 3D 矢量图?

    我正在为大学做这个编程任务 我们必须写一个c 计算 3D 空间中某些线圈的磁场矢量的程序 我已经成功编写了这个程序 并且我认为它运行得很好 不过 我想添加一个特殊的东西 这是我的试卷 所以它必须特别好 我想绘制出向量 我习惯打电话gnupl
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1

随机推荐

  • 为什么 .Net 没有 Thread.Start() 的通用版本?

    我想知道为什么 Net 没有启动线程的通用方法 例如 我们启动一个像下面这样的线程 Thread th new Thread SayHello th Start Hello private static void SayHello obje
  • 具有单一选择的列表框,并且单击时也取消选择...?

    我需要一个在第一次单击时选择并在第二次单击时取消选择的列表框 以便任何时候只选择零个或一个项目 当您按住 crtl 时 选择 取消选择是在列表框中实现的 SelectionMode Single 但不幸的是 我的用户都不知道这一点 使用 S
  • 自定义 Django 管理索引页面以显示模型对象

    在 Django 管理索引页面中 通常会列出应用程序及其模型 模型对象如何也列在该索引页中 我不仅想显示应用程序 还想显示其模型对象 应该如何定制呢 我希望我的网站具有相同的功能 并通过对核心 django 系统进行轻微修改来添加它 Ste
  • appium - 如何获取本机 Android 应用程序中元素的背景颜色

    我正在尝试使用自动化应用程序appium 如何获取 Android 应用程序中元素的背景颜色 我尝试使用 element getCssValue background color 但我面临以下异常 java lang ClassCastEx
  • 数据流图构建

    我被要求编写一个程序 在给定抽象语法树的情况下构建输入程序代码的数据流图 我在网上搜索了数据流图的定义 发现在代码段的数据流分析中发生了很多事情 我想知道我到底需要绘制什么来为给定的代码构建数据流图 很感谢任何形式的帮助 给定 AST 要生
  • char类型可以归类为整数吗?

    刚才我读到 char是Java中唯一的无符号整型原始类型 这是否意味着 char 是 Java 中的整型类型之一 和C一样 最近我读到C类型包括标量类型 函数类型 联合类型 聚合类型 标量类型包括指针类型和算术类型 那么算术类型包括整型和浮
  • 查找特定元素之前和之后的元素

    我有一个列表 其中包含我与选项卡一起使用的链接 它看起来像这样 ul li a href First tab a li li a href Second tab a li li class active a href Active tab
  • google/guava 库出现 Spark 错误:java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.refreshAfterWrite

    我有一个简单的spark项目 其中在pom xml依赖只是基本的scala scalatest junit and spark
  • 字符串中的前两个单词 - sql server

    我有这样的字符串 这是一个 hello world 示例 现在我想要该句子的前两个单词作为 SQL Server 中的输出 即这是 另一个例子 原句 完整的单词练习 输出 完整的单词 您可以按如下方式使用查询 DECLARE d nvarc
  • Boyer–Moore 字符串搜索算法的移位规则是什么?

    我一直在尝试理解轮班规则Boyer Moore 字符串搜索算法但还没有理解他们 我读到这里维基百科 http en wikipedia org wiki Boyer E2 80 93Moore string search algorithm
  • 如何在 Eclipse 中使用 PHPdoc

    我们目前正处于一个新项目的开始阶段 希望 这一次 从一开始就尽可能多地发表评论 以帮助未来的发展 我试图找出在 Eclipse 中使用 phpDoc 的最佳实践 但结果非常有限 您能分享一下在 Eclipse 中使用 phpDoc 注释内容
  • 无法将类“java.lang.String”的对象 jar 转换为类“java.util.Map”。从 grails 3.0.10 升级到 3.1.11 时

    我正在将我的应用程序从 grails 3 0 10 升级到 3 1 11 当我运行grails clean命令在读取我的内容时显示以下错误 gradle文件夹依赖项 错误初始化类路径时出错 无法转换对象 file root gradle c
  • 用户控件在面板上拖放

    我正在制作一个图形编辑器 但在拖放时遇到一些问题Panel 椭圆没有占据我放置它的确切位置 我认为它被放置在大小为 150 150 的 UserControl 中 这是一个短片的链接来说明我的意思 http gyazo com abf548
  • Android 会在更新时清理应用程序缓存吗?

    In this document https developer android com training data storage files 谷歌表示 当用户卸载您的应用时 系统会删除您应用的所有内容 内部存储中的文件 但是 当更新应用
  • R6 类的 S4 调度行为不一致

    实际问题 事实不应该是这样吗R6 https github com wch R6类继承自 非正式 S3 类R6允许为该类的签名参数定义 S4 方法吗 由于事实并非如此 那么符合当前 S3 S4 标准或在这种情况下在某种程度上可以被视为 最佳
  • jQuery:自动触发悬停

    我对列表项有一个悬停鼠标输入鼠标悬停设置 如下所示 main nav li a hover function el this leftPos el position left newWidth el parent width magicNa
  • 使用 Apache POI 编辑 Word 文档 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试读取Word文档模板 然后用用户给定的数据替换模板中的变量 不更改模板上的标题或样式 我不确定我正在做的事情是否正确 但是这
  • 使用 ASP.NET MVC 处理/接收从 WebRTC 或任何基于浏览器的捕获机制到服务器的实时视频网络摄像头流

    我们需要从 WebRTC 或来自客户端网络摄像头的任何其他捕获机制 即使并非所有浏览器都支持 但作为 PoC 捕获实时视频流 该实时视频需要由服务器组件 ASP Net MVC Web API 处理 我想服务器上的代码将如下所示 HttpP
  • 更新 Windows 服务

    我有一个用 net VB net 2 0 编写的 exe 我使用 installutil exe 将其安装为服务 我的问题是 每次更新 exe 时是否都需要完全卸载该服务并重新安装 我尝试停止服务并替换 exe 但它似乎没有反映所做的更改
  • 准确测量一组基准点之间的相对距离(增强现实应用)

    假设我有一组 5 个标记 我正在尝试使用增强现实框架找到每个标记之间的相对距离 例如AR工具包 http www hitl washington edu artoolkit 在我的相机中 前 20 帧仅向我显示前 2 个标记 以便我可以计算