Use-case
- 物体绕其中心以不同的速度旋转
- 固定摄像机正在观察物体
- 给定 2D 图像点对应关系重建 3D 点云
- 当物体旋转时,相机可以看到它的不同部分,从而检测到不同的点和对应关系。
Scene
A。 N 张图片
b. N-1 图像对
C。 N-1 个 2D 点对应(两个 2D 点数组)
执行
对于每个 (N-1) 个 2D 点对应关系
- 计算相机相对位姿
- 三角测量以获得 3D 点
- 对于每个 2 3D 点数组,使用 [c] 中给出的 2D 对应关系导出对应关系
- 使用导出的 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(使用前将#替换为@)