是否可以通过 2d-3d 点关系获得图像或相机位置的正面平行视图?

Posted

技术标签:

【中文标题】是否可以通过 2d-3d 点关系获得图像或相机位置的正面平行视图?【英文标题】:Is it possible to obtain fronto-parallel view of image or camera position by 2d-3d points relation? 【发布时间】:2012-01-12 16:02:47 【问题描述】:

是否可以使用OpenCV通过2d-3d点关系获得图像或相机位置的正面平行视图?

为此,我有内在和外在参数。我在图像(关系 2d-3d)上还有一组控制点(位于一个平面上)的 3d 坐标。

其实我需要相机的位置和方向,但是如果我能将图像转换为正面平行视图,就不难找到了。

如果无法使用 OpenCV,是否有其他库可以解决此任务?

【问题讨论】:

对了,写与问题无关的cmets好不好? 如果您解决了问题但没有具体答案,您应该自己添加正确答案并接受它,让其他人知道如何处理该问题。这是合适的协议。 好的,谢谢,以后会记住这一点(无论如何我会尝试添加我的正确答案) 我不认为这无关。低 AR 的用户很难得到答案。通过让您知道您的 AR 开始变低并且您可以修复它,我在维护您的诚信并帮助您从我们那里获得帮助 谢谢。我完全同意你的看法,并跟踪你在说什么,但并不总是那么容易理解。 【参考方案1】:

解决方案基于 OpenCV 文档Camera Calibration and 3D Reconstruction中的公式

让我们考虑没有失真系数的数值形式(与矩阵形式相反)。

我们有uvx'y'很容易计算。 但是xy 不能计算,因为我们可以选择任何非零的z。 3d 中的线对应 2d 图像中的一个点。

为了解决这个问题,我们为z=1z=2 取两分。 然后我们在 3d 空间中找到 2 个点,指定线 (x1,y1,z1)(x2,y2,z2)

然后我们可以将R-1 应用到(x1,y1,z1)(x2,y2,z2) 这导致由(X1, Y1, Z1)(X1, Y1, Z1) 两个点确定的线。

由于我们的控制点位于一个平面上(为简单起见,设平面为 Z=0),我们可以找到对应的 XY 点,它是 3d 中的一个点。

mm 对像素进行归一化后,我们获得了正面平行图像。

(如果我们输入的图像扭曲了,我们应该先去扭曲它)

【讨论】:

以上是关于是否可以通过 2d-3d 点关系获得图像或相机位置的正面平行视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何用工业相机进行物件的定位

相机标定

双目相机同目标追踪

OpenCV相机标定与畸变校正

如何理解工业相机的标定

工业相机需不需要标定?