我试图在没有棋盘的情况下从单张图像校准我的相机。为此,我使用了以下使用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)。
我做错了什么?
答案 0 :(得分:2)
投影转换是
x = K * T * X
,其中
K:内在的 T:外在的(你的轮换和翻译)。将X转换为摄像机坐标系 x:图像中的像素坐标将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坐标。
有时很难知道仿射变换正在做什么。如果它没有做你想做的事情,快速的工程方法可能是用它的反转来尝试:)
如果这对您没有帮助,您可以传递您的矩阵。