3

用例


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


场景


  一种。N 图像
  b. 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 点和相机平移
      都可以转换为齐次坐标系。
  D. 选择一个相机位姿并变换每个轨迹中的第一个点(定义@[4])
      到那个Camera Pose(通过累积的Camera Pose的倒数变换
      ),结果,预期的点可以。

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

4

1 回答 1

3

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

匹配

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

矩阵评估

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

云评估

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

第一个图像对

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

跟随图像对

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

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

为世界建模

实时公制 3D 重建

于 2014-05-15T12:27:08.587 回答