是否可以通过 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中的公式
让我们考虑没有失真系数的数值形式(与矩阵形式相反)。
我们有u
和v
。x'
和y'
很容易计算。
但是x
和y
不能计算,因为我们可以选择任何非零的z
。
3d 中的线对应 2d 图像中的一个点。
为了解决这个问题,我们为z=1
和z=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),我们可以找到对应的 X
和 Y
点,它是 3d 中的一个点。
从mm
对像素进行归一化后,我们获得了正面平行图像。
(如果我们输入的图像扭曲了,我们应该先去扭曲它)
【讨论】:
以上是关于是否可以通过 2d-3d 点关系获得图像或相机位置的正面平行视图?的主要内容,如果未能解决你的问题,请参考以下文章