使用单个校准相机从2D图像获取世界坐标

时间:2014-11-17 13:42:39

标签: 3d camera-calibration calibration pose-estimation homogenous-transformation

我试图在没有棋盘的情况下从单张图像校准我的相机。为此,我使用了以下使用Tsai方法校准相机的应用程序(http://w3.impa.br/~zang/qtcalib/index.html)。

该应用程序返回内在,旋转和转换矩阵。

之后,我想从2d图像计算世界坐标。因此,用2d坐标(x,y)和矩阵(内向,旋转,平移)来提供我的程序,我想得到3D坐标(X,Y,Z)。

我遵循了一些相对线程(Get 3D coordinates from 2D image pixel if extrinsic and intrinsic parameters are known)的指示,但结果并不像我期望的那样。另外我不知道我的起源在哪里(0,0,0)。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

投影转换是

x = K * T * X

,其中

K:内在的 T:外在的(你的轮换和翻译)。将X转换为摄像机坐标系 x:图像中的像素坐标
X:3D坐标

将2D像素投影到3D与3D空间中的线相比,因此可能存在无限数量的3D点。要获得普通的3D坐标,您必须选择深度值。

您可以决定生成的3D坐标的原点:

  • 摄像机坐标系,[0; 0; 0]位于摄像机中心:
    X' = inv(K)* x

  • 您的棋盘或Tsai-grid坐标系,[0; 0; 0]通常位于其中一个角落:
    X' = inv(T)* inv(K)* x

然而,正如已经提到的,X'更像是一条线。您需要缩放它以获得正确的3D坐标。

有时很难知道仿射变换正在做什么。如果它没有做你想做的事情,快速的工程方法可能是用它的反转来尝试:)

如果这对您没有帮助,您可以传递您的矩阵。