你能否使用OpenCV的solvePNP函数解决等距投影图像问题?

34

使用OpenCV的solvePNP函数是否可以处理等距图像?我有一张等距图像,其中有四个点(红色点)及其像素坐标,然后我有4个对应的世界坐标点,例如[(0, 0, 0), (2, 0, 0), (2, 10, 0), (0, 10, 0)],如何估算相机位姿?

enter image description here

我尝试使用OpenCV的 solvePnp,但它需要棕色相机模型的内参,所以无法工作。这对于球形相机可以实现吗?


3
尝试将“等距投影图像”转换为具有相应针孔相机模型的多个子图像?快速搜索,找到了这个:等距投影到针孔相机的示例。还可以查看OpenMVG,那里应该有一些有用的信息:球面相机模型和解决PNP问题 #1557球面图像到针孔图像的转换 #621 - Catree
你已经解决了吗?如果你解决了,能否分享一下你的解决方案? - Jenia Golbstein
直接解决需要考虑球形图像形成,而不是针孔 - 因此,除非您按照@Catree所写的那样操作,否则PnP直接无法工作。 - Yuri Feldman
定义一个虚拟针孔相机并将其用作替身。将点转换为其框架。这是一种技巧,因为只要您的点在视野的180度范围内适合得很好,它就能正常工作。 - Christoph Rackwitz
2个回答

2

首先,您需要计算相机的固有参数,即焦距、光学中心和畸变参数,然后才能计算相机的姿态。由于您的图像似乎是宽角镜头,因此应按此处所述使用cv.calibrateCamera()。在cv.calibrateCamera()方法中启用CV_CALIB_RATIONAL_MODEL标志,以计算畸变参数,因为您的图像具有较大的畸变。

现在是棘手的部分 为了获得高质量的无畸变图像,在校准相机后,您应该使用一个覆盖整个图像的棋盘图案,以便准确计算畸变参数,因为最大的径向畸变位于图像边缘。 另外,为了准确计算solvePnp参数,您应在整个图像中选择红点


0

使用solvePnPRansac和OpenCV 文档进行相机三维重建。


1
你能举个例子吗? - Jenia Golbstein
1
我没有演示示例,但您可以在网上搜索,查看:https://www.programcreek.com/python/example/110736/cv2.solvePnPRansac - Cătălin George Feștilă
这不是针对全景图像的。 - Jenia Golbstein
你问道:如何估计相机的姿态?那个姿态是什么?“姿态”是什么意思?请参考以下链接获取类似的估计示例:http://mrcal.secretsauce.net/tour.html#opencv8-model-solving。更多信息请查看:http://mrcal.secretsauce.net/mrcal-python-api-reference.html。 - Cătălin George Feștilă

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接