尝试使用"Camera Calibration Toolbox for Matlab"中的外部和内部相机参数,从相机图片中的2D像素坐标重建平面上点的3D坐标。
内部参数:焦距:fc=[1017.21523 1012.54901]主点:cc=[3195000239.50000]
外部参数:翻译矢量:Tc_ext=[4.409693-741.16018 393.057934]旋转矩阵:Rc_ext=[-038632 0.991715-0.0975010.832136 0.015674-0.5554350-0.548230-0.127495-0.826553]
有人能帮我从相机的二维图像中得到平面上点的三维坐标吗?
按照复杂性的增加顺序,有4种情况需要考虑。基本目标是在空间中定位感兴趣的平面。在获得它之后,您可以将它与反向投影像素的光线相交,从而获得解决方案。
- 感兴趣的平面包含棋盘目标,图像是用于校准相机的图像之一。然后,校准例程返回的图像的外部参数[R|T]包含答案,因为目标是该图像上返回的世界到相机坐标变换的XY平面,而世界原点是其中一个角(您可以通过将点(0,0,0)投影到图像坐标中来查看它是哪个角。XY平面(在摄影机坐标中)是由旋转矩阵R的前两列跨越的平面,其原点位于点T
- 感兴趣的平面包含棋盘目标,但其图像不是用于校准的图像之一。你可以把它添加到集合中,重新校准并转到1.,但一个更快的替代方案是(a)在校准时提取角,(b)在Z=0时计算从它们的图像位置到它们在物理目标上的"真实"位置的单应性H;(c) 使用校准中已知的K将H分解为K*[R|T](为此,您使用一种称为"RQ分解"的算法,查找它)。然后转到1
- 校准目标不在图像中,但您可以在图像中识别该平面上的至少4个点,以便其中没有3个点共线,并且它们位于彼此已知的位置。例如,您在图像中看到一个已知边的矩形。然后,就像第2点一样。你可以计算这些物理点和它们的图像之间的单应性,并在知道相机矩阵的情况下提取[R|T]变换。然后转到1
- 以上都没有:对不起,你被卡住了