SolvePnP - 如何使用它?

时间:2014-05-06 11:40:12

标签: opencv computer-vision

我正在使用运动结构进行一些多视图几何重建。到目前为止,我有以下

两个图像作为初始输入 摄像机参数和失真系数 初始输入图像的工作整流管道 创建视差图 从视差图创建pointCloud,迭代视差图并将值取为z(x和y是视差图中像素的像素坐标)(什么不工作是reprojectImageTo3D,因为我的Q矩阵似乎非常错了,但其他一切都很完美) 这给了我一个很好的场景云。

现在我需要在管道中添加更多图像。我已经google了很多,发现方法solvePnP会帮助我。

但现在我很困惑......

SolvePnP将获取3D点和相应的2D图像点的列表,并重建第三,第四个相机的R和T矢量......等等。我已经读过,这些矢量需要对齐,这意味着第一个矢量中的第一个3D点对应于第二个矢量中的第一个2D点。

到目前为止一切顺利。但是从哪里可以看出那些对应?我可以使用此方法reprojectPoints获取这两个向量???或者使用视差图进行深度重建,我的整个想法是错误的? (替代方案:使用之前找到的良好匹配的triangulatePoints)。

有人可以帮我解决这个问题吗?如何使用solvePnP添加更多摄像头,从而将3D点添加到我的pointcloud并改善重建结果?

1 个答案:

答案 0 :(得分:5)

Solve PnP是一个函数,它给出了一个物体的3D模型(比如说棋盘)和现实世界中这个物体的视图,它会给你一个近似的位置和相机的方向相对于对象。

对象的3D模型和视图是相应的3D和2D点的集合。当您知道对象模型(对象的关键点的位置)以及这些关键点在摄像机图像上的位置时,该功能将更有效。

我不是3D图像重建的专家,但似乎使用包含观察到的场景及其关键点的每个后续图像的信息,并且从视图中查找图像上的信息,您应该能够迭代地改进您的模型并改善相机位置的近似值。

如果你有一个视差图,它显示了从两个不同点观察的场景关键点的距离,如果你知道确切的观点,那么使用三角测量确实会更好。或者他们的好近似值(然后你需要用随后的新视图来改进这些近似值)。