【问题标题】:Structure from Motion, Reconstruct the 3D Point Cloud given 2D Image points correspondenceStructure from Motion,给定 2D 图像点对应关系,重建 3D 点云
【发布时间】:2014-05-15 20:27:08
【问题描述】:

用例


  • 一个物体以不同的速度围绕它的中心旋转
  • 固定摄像头正在观察对象
  • 给定 2D 图像点对应关系重建 3D 点云
  • 随着对象的旋转,相机会看到它的不同部分,因此会检测到不同的点和对应关系。


场景


  a. N 图片
湾。 N-1 图像对
C。 N-1 2D Point 对应关系(两个 2D Points 数组)


实施


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

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


结果:


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


考虑解决问题的方法:


鉴于三角测量结果精确到一定比例,请计算点云。
A. 每个三角测量结果和相机相对平移都
      以非齐次坐标表示(每个结果都有不同的比例)。
B. 假设对象结构是实心的,因此不会改变,
      对于所有相机姿势,每个 3D 点到其中心的距离应该相同。
C. 考虑到 [B],[A] 处的所有三角化 3D 点和 Cameras Translations
      可以转换为齐次坐标系。
D. 选择一个相机位姿并将每个轨道中的第一个点(定义 @ [4])
      转换为该相机位姿(通过累积相机位姿的倒数进行转换
      位姿),得到预期点可以。

以上是从二维点对应生成点云的正确方法吗?

【问题讨论】:

  • 你怎么知道在 2 张图像上,哪个点对应于另一个点?以蓝色花瓶为例,你如何区分点?
  • 为了测试,我使用从 3D 对象综合生成的图像作为输入,对于这些我事先知道对应关系。在现实世界中,U 通常使用 SIFT/SURF 来查找 2D 对应关系

标签: algorithm 3d computer-vision 3dcamera


【解决方案1】:

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

匹配

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

矩阵评估

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

云评估

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

第一个图像对

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

以下图像对

真正有效的方法是从现有的点云中提取新的相机位置,该点云是之前从旧图像对计算的。为此,您之前还记得图像的 2D 3D 对应。它被称为 PerspectivenPoint Camera Pose Estimation (PnP)。

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

Modeling The World

Live Metric 3D-Reconstruction

【讨论】:

  • 感谢您的详细回复!!我的长期目标是能够从围绕对象旋转的视频中重建 3D 对象。
  • 实现该目标的第一步是综合生成一个点云(随机 3D 顶点),将其投影到多个 2D 帧上,每个帧都以不同的相机姿势拍摄,然后尝试返回从二维投影到原始点云。
  • OpenCV 具有内置的捆绑调整模块(例如 BundleAdjusterReproj ),这些使用 MatchesInfo 对象来指示一个图像与下一个图像之间的差异,通过代码挖掘似乎 MatchesInfo 结构正在使用单应矩阵(假设平面场景)而不是基本/基本矩阵(非平面场景),话虽如此,OpenCV 捆绑调整模块是否适合 SFM(非规划场景),因此,我可以简单地设置“MatchesInfo::H”吗到基本/基本矩阵,或者,我应该自己实现重投影算法吗?
  • 对不起,迟到的答案。所以我怎么说实现 SfM 算法对我来说并不容易。有很多事情可以通过其他方式变得不同或完全不同。我们考虑它来实现捆绑调整。但我们没有这样做。我怎么知道捆绑调整是一个优化步骤,因此您将计算您的矩阵和您的云或详细信息。我怎么记得有尝试减少重建的重投影误差的实现。因此,对于您自己的估值,您可能需要实施自己的重现错误。捆绑调整将拥有自己的。
猜你喜欢
  • 2020-02-29
  • 2015-06-14
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多