运动结构,根据 2D 图像点对应关系重建 3D 点云

2024-06-24

Use-case


  • 物体绕其中心以不同的速度旋转
  • 固定摄像机正在观察物体
  • 给定 2D 图像点对应关系重建 3D 点云
  • 当物体旋转时,相机可以看到它的不同部分,从而检测到不同的点和对应关系。

Scene


A。 N 张图片
b. N-1 图像对
C。 N-1 个 2D 点对应(两个 2D 点数组)

执行


对于每个 (N-1) 个 2D 点对应关系

  1. 计算相机相对位姿
  2. 三角测量以获得 3D 点
  3. 对于每个 2 3D 点数组,使用 [c] 中给出的 2D 对应关系导出对应关系
  4. 使用导出的 3D 对应@[3] 导出每个对象 3D 点的轨迹,从而为每个对象点/顶点生成单个轨迹

Result:


A (N–2) 3D 点阵列、对应关系、相机姿势和轨迹(每个对象点一个轨迹)

考虑解决问题的方法:


鉴于三角测量结果在一定范围内准确,计算点云。
A. 每个三角测量结果和相机相对平移是
以非齐次坐标表示(每个结果具有不同的比例)。
B. 假设物体结构是固体,因此不会改变,
对于所有相机姿势,每个 3D 点到其中心的距离应该相同。
C. 考虑到 [B],所有三角测量的 3D 点均位于 [A] 和相机平移
可以转换为齐次坐标系。
D. 选择一个相机姿势并变换每个轨迹中的第一个点(定义@[4])
到该相机姿势(通过累积相机的倒数变换
姿势),由此得出,预期点即可。

上述是从 2D 点对应生成点云的正确方法吗?


这是重建物体的正确过程。去年我在我们大学的一个项目中研究了这个主题。我的经验是,用手移动相机来重建物体并不容易。

Matching

首先你必须考虑兴趣点的匹配。 SURF和SIFT对于这一点来说是很好的匹配方法。当物体移动小于 15° 时,您可以考虑使用 USURF,它比普通 SURF 快一点(更多细节请参见 SURF 论文)。在我们的项目中,我们决定在 OpenCV 中使用光流,它看起来有点慢,但对于异常值更稳健。你的物体只是旋转,所以你也可以考虑使用它。

矩阵的评估

接下来是评估新相机矩阵的结果。您是否有可能找出物体旋转了多少(例如步进电机或其他东西)?因此您可以将计算结果与电机的步数进行比较。如果它高于阈值,您就知道计算很糟糕。但要注意的是,有些步进电机的精度不太好,但一些实验可以带来更多信息。

云评价

有一些评估计算云的好方法。最简单的方法是计算云的重投影误差。为此,您只需反转重建并查看计算的图像点距原始对应点有多远。 另一项测试是检查所有点是否都位于相机前面。通过计算,这些点可能位于相机的前面和后面。我知道当两个相机相互靠近并且三角测量也终止时可能会发生这种情况。

第一个图像对

我不确定对于静态相机是否有必要执行此步骤。但首先我们必须计算一个基本矩阵。我们的经验是使用匹配最多的图像对来提取它们,并使用 RANSAC 版本给出最佳结果。但也许您可以尝试放置物体,使其在第一次拍摄时具有最多的兴趣点。

跟随图像对

真正有效的方法是从现有的点云中提取新的相机位置,这些点云是根据之前的旧图像对计算出来的。为此,您之前已经记住了图像的 2D 3D 对应关系。它称为透视点相机姿势估计 (PnP)。

最后我们得到了一些好的和坏的结果。这取决于扫描对象。以下是一些对我有帮助的论文:

模拟世界 http://phototour.cs.washington.edu/ModelingTheWorld_ijcv07.pdf

实时度量 3D 重建 http://cvg.ethz.ch/mobile/LiveMetric3DReconstructionICCV2013.pdf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运动结构,根据 2D 图像点对应关系重建 3D 点云 的相关文章

  • 验证是否存在唯一字符串的组合

    class Details String name String age String email String location 1 如果有详细信息列表 如下所示List
  • C# 3d 模型查看器

    在 C 中可以查看 3D 模型的最佳工具是什么 我还需要更改模型的纹理 我查看了 XNA 但找不到下载链接 您可以使用 WPF 3d ViewPort 有一个名为 HelixToolkit 的神奇实用程序 您可以在这里找到它 https g
  • 从点集合创建 .stl 文件

    因此 我使用的软件接受轮廓或 stl 文件形式的 3D 对象 我的轮廓沿着 z 平面 每个平面都有一个唯一的 z 我必须修改实验的轮廓 现在轮廓对于每个平面没有唯一的 z 它们现在与 z 0 平面略有角度 这些点代表 3D 对象的边缘 获取
  • Java 服务器和浏览器客户端之间乐观对象复制的解决方案?

    我正在构建一个系统 多个用户需要同时创建 查看和修改一组对象 该系统计划在 Java 服务器和现代浏览器客户端上运行 我可以选择哪些 它需要在网络和服务器中断时具有鲁棒性 用户界面不得阻止修改 修改需要存储在本地并在连接恢复时发布 在正常操
  • 如果我在计算强连通分量时不使用 G 转置会怎样?

    我正在阅读算法导论 在 22 5 强连通分量中 算法 STRONGLY CONNECTED COMPONENT G 定义为 调用 DFS G 计算每个顶点 u 的完成时间 u f 计算 G 转置 调用 DFS G transpose 但在
  • 无限循环:确定并打破无限循环

    你如何判断一个循环是无限循环并且会跳出它 有没有人有算法或者可以帮助我解决这个问题 Thanks 没有通用的算法可以确定程序是否处于无限循环中图灵完备 http en wikipedia org wiki Turing completene
  • 递归分层父子

    我有一个来自数据库的项目集合 该数据库具有parentid值或空 这是我的班级设计 public class Item public int id get set public string Name get set public int
  • 准备与大数据相关的设计和架构问题的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 转置矩阵存储在一维数组中,无需使用额外的内存[重复]

    这个问题在这里已经有答案了 可能的重复 矩阵的就地转置 https stackoverflow com questions 9227747 in place transposition of a matrix 最近参加了技术笔试 通过以下问
  • n维匹配算法

    在这里寻求一些建议 有谁知道在 n 维空间中开始研究匹配算法的好地方 例如 任何约会网站都必须使用某种算法来匹配 2 个人 我读到的是 我们可以将一个人的特征映射到一个 n 维数组中 每个特征都有一个点系统 一旦我们拥有一个人的所有 可用
  • 使用 Opencv 屏蔽水平线和垂直线

    我正在尝试删除该图像中的水平线和垂直线 以便拥有更清晰的文本区域 我正在使用下面的代码 它遵循这个guide https docs opencv org 3 2 0 d1 dee tutorial moprh lines detection
  • React-Three/Fiber 创建 3D 文本

    我正在尝试使用 Threejs React Three Fiber 创建 3D 文本 我使用字体加载器加载字体 如下所示 const font new FontLoader parse Microsoft Tai Le Regular js
  • 如何有效地从连续字符串中提取文字单词? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将没有空格的文本拆分为单词列表 https stackoverflow com questions 8870261 how to split text without spaces into li
  • 拉伸数组

    我有一个形成曲线的样本向量 假设其中有 1000 个点 如果我想将其拉伸到填充 1500 个点 给出不错结果的最简单算法是什么 我正在寻找一些只有几行 C C 的东西 我总是想增加向量的大小 并且新向量可以是当前向量大小的 1 1 倍到 5
  • 连接有序数组的最佳方法是什么?

    我有几个整数数组 每个数组中的元素都是有序的 数组没有重复项 我需要将所有数组合并为一个数组 以便生成的数组仅包含每个数组中存在的元素 例如 我有数组 1 2 3 4 5 2 3 5 1 2 4 5 结果必须是 2 5 实现最佳性能的最佳方
  • 将arm_compute::Image 转换为cv::Mat

    我有很多基于 open cv 的代码 但是 Arm 计算库可以通过多种方式提高性能 因此我想将一些 arm 计算库代码集成到我的项目中 有没有人尝试过在两个相应的图像结构之间进行转换 如果是这样 你做了什么 或者有没有一种方法可以共享指向底
  • “ImageDataGenerator”对象没有属性“flow_from_dataframe”

    我正在尝试为癌症检测 Kaggle 挑战赛构建一个图像分类器 这是我正在使用的代码 train datagen ImageDataGenerator rescale 1 255 validation split 0 15 test data
  • 如何找到包含序列所有元素的最小长度子序列

    给定一个序列 例如S 1 8 2 1 4 1 2 9 1 8 4 我需要找到包含所有元素的最小长度子序列S 没有重复 顺序无关紧要 如何有效地找到这个子序列 注意 有 5 个不同的元素 S 1 2 4 8 9 最小长度子序列必须包含所有这
  • 将列表列表替换为“压缩”列表列表,同时保持顺序

    我有一个列表列表 如我所附的代码所示 如果有任何共同值 我想链接每个子列表 然后我想用列表的精简列表替换列表的列表 例子 如果我有一个清单 1 2 3 3 4 I want 1 2 3 4 如果我有 4 3 1 2 3 I want 4 3
  • 在 C/C++ 中绘制填充椭圆的简单算法

    在SO上 找到了以下绘制实心圆的简单算法 for int y radius y lt radius y for int x radius x lt radius x if x x y y lt radius radius setpixel

随机推荐

  • 在 Android webview 中访问相机功能?

    我正在构建一个 Native Android WebView App 其代码托管在远程服务器上 使用 HTML 和 Javascript Web App 具有通过 HTML 表单启动手机摄像头的功能 输入请求
  • 为什么使用虚拟基类会改变复制构造函数的行为

    在下面的程序中a当 B 实际上从 A 派生并且复制 C 而不是 B 的实例时 不会复制成员变量 include
  • 何时以及如何使用龙卷风?什么时候没用了?

    好的 Tornado 是无阻塞的并且速度相当快 它可以轻松处理大量长期请求 但我想这不是灵丹妙药 如果我们只是盲目地使用 Tornado 运行基于 Django 的网站或任何其他网站 它不会带来任何性能提升 我找不到对此的全面解释 所以我在
  • 摆脱 Visual Studio 中的[动态] JavaScript 视图

    由于我大约 2 个月前从头开始安装了 Visual Studio 2010 因此在调试 IE 中运行的 JavaScript 代码时 它的行为略有不同 当我设置断点时 它会打开标题中带有术语 dynamic 的视图的副本 并在其中标记断点
  • Hibernate 子查询 detachedCriteria

    如何在具有多个子查询的休眠中编写子查询 例如 select from project dtls where project id in select project id from project users where user id s
  • Java JComboBox 不兼容类型:无法转换为字符串

    当我尝试在 JComboBox 中添加项目时出现此错误 不兼容的类型 ComboBox 无法转换为 String 这是我将数据从数据库加载到 JComboBox 的方法 public final void loadProducts try
  • 大 O 表示法求 c 和 n0

    我刚刚了解了 Big O 表示法 并且有人问了我一些问题 但是我对如何确定的值感到困惑n0 我必须证明这一点3n 3 20n 2 5是 O n 3 到目前为止我有 3n 3 20n 2 5 lt cn 3 3 c n 3 20n 2 5 l
  • 如何处理 __init__ 对 __setattr__ 的调用?

    我编写了一个类 用于以方便的方式存储参数以进行酸洗 它超载 setattr 方便访问 它还使用列表来记住添加属性的顺序 以便迭代顺序是可预测的且恒定的 这里是 class Parameters object def init self se
  • 无法在 Qt Creator 中检索调试输出

    在 Windows 上的 Qt Creator 中 qDebug 语句不起作用 并且输出窗口中出现以下消息 无法检索调试输出 如何解决 如果多个 Qt Creator 实例处于活动状态 则可能会出现此问题 要解决此问题 只需关闭 Qt Cr
  • 运行 docker 容器时出错“NoClassDefFoundError”

    我正在尝试 dockerize 一个使用 Maven 构建的简单 Spring Boot 应用程序 Dockerfile FROM openjdk latest COPY target backend 1 0 SNAPSHOT jar ap
  • 使用 JavaScript 检测 URL

    我使用以下脚本将特定页面 首次加载时 强制加载到 第三方 iFrame 中 澄清一下 这个 嵌入 是由第三方系统自动完成的 但前提是页面刷新一次 出于样式和其他一些原因 我希望它从一开始就在那里 现在 我想知道这个脚本是否可以通过检测其 父
  • 按钮点击事件是否会被点击手势识别器覆盖?

    我有一个按钮 如果点击该按钮以外的任何内容 我想让该按钮消失 所以我为删除按钮设置了 target action self deleteButton addTarget self action selector deleteButtonTa
  • $routeProvider - 为所有路由注入相同的依赖项

    以下代码 routeProvider when page1 控制器 MyController 解析 策略 StrategyOne 在实例化控制器 MyController 之前等待策略依赖关系得到解决 在我的应用程序中 我有一个返回承诺的函
  • SVG 极坐标渐变

    我是 SVG 的初学者 但我想学习一些技术 简而言之 有没有一种简单的方法来创建这样的东西 我正在考虑创建一个极坐标渐变 然后裁剪它 但是如何生成极坐标梯度呢 即使没有本地方法 也许可以用简单的线性渐变然后使用一些直角极坐标变换来实现 有办
  • UIBezierPath 用不同的笔画画圆

    基本上我需要有一个具有不同颜色笔划的圆圈 大小都相同 例如 1 2 为蓝色 1 2 为红色 图片 对不起 图片太糟糕了 我怎样才能画出这样的东西 有很多方法可以做到这一点 但一种是只绘制两条贝塞尔曲线路径 每一侧各一条 void drawR
  • 基于 SQl Server 2008 中的 2 列的唯一键?

    SQL Server 是否可以拥有基于 2 列的唯一键 我可以在两列中都有重复项 但不能同时存在 MfgID CustNum 1 Cust01 1 Cust02 2 Cust02 1 Cust03 3 Cust03 3 Cust04 1 C
  • 如何在不同的消息元素中显示相同输入字段的 ValidatorException 和 required="true"

    我采取了以下BalusC 启动示例 https stackoverflow com a 7493527 617373并通过添加提交按钮和附加 h messages 并删除f ajax来自h inputSecret s 删除了f ajax由于
  • Gmail REST API - 将邮件标记为已读

    我正在尝试使用 Gmail REST API 将邮件标记为已读 markGmailRead click function var request ajax type POST dataType json headers Authorizat
  • Jetpack Compose MutableLiveData 不更新 UI 组件

    我试图通过包含下载 ID 和进度值的数据对象列表一次显示多个下载进度条 此对象列表的值正在正确更新 通过日志记录显示 但 UI 组件在其初始值从 null 更改为第一个进度值后将不会更新 请帮忙 我看到有类似的问题 但他们的解决方案对我不起
  • 运动结构,根据 2D 图像点对应关系重建 3D 点云

    Use case 物体绕其中心以不同的速度旋转 固定摄像机正在观察物体 给定 2D 图像点对应关系重建 3D 点云 当物体旋转时 相机可以看到它的不同部分 从而检测到不同的点和对应关系 Scene A N 张图片b N 1 图像对C N 1