如果已知外部和内部参数,则从2D图像像素获取3D坐标

YAH*_*OOO 32 c++ opencv homogenous-transformation camera-calibration pose-estimation

我正在从tsai algo做相机校准.我有内在和外在矩阵,但我怎样才能从该信息中重建三维坐标?

在此输入图像描述

1) 我可以使用高斯消元法找到X,Y,Z,W,然后将点作为齐次系统的X/W,Y/W,Z/W.

2)我可以使用 OpenCV文档方法:

在此输入图像描述

因为我知道u,v,R,t,我可以计算X,Y,Z.

然而,这两种方法最终都会产生不正确的结果.

我做错了什么?

Jav*_*ock 28

如果你有外在参数,那么你得到了一切.这意味着您可以使用extrinsics(也称为CameraPose)进行Homography.姿势是3x4矩阵,单应性是3x3矩阵,H定义为

                   H = K*[r1, r2, t],       //eqn 8.1, Hartley and Zisserman
Run Code Online (Sandbox Code Playgroud)

ķ是相机固有矩阵,R1R2是旋转矩阵,的前两列ř ; t是翻译向量.

然后将t3的所有内容归一化.

r3列会发生什么,我们不使用它吗?不,因为它是多余的,因为它是2个第一列姿势的交叉积.

既然你有单应性,那就投射点.你的2d分是x,y.添加它们az = 1,所以它们现在是3d.投影如下:

        p          = [x y 1];
        projection = H * p;                   //project
        projnorm   = projection / p(z);      //normalize
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我没有得到标准化部分.p/p(z)将所有点的z都设为1.那么如何得到3D点? (3认同)
  • 可能是你写错了列?你可能意味着列(r12 r22 r32)和(r13 r23和r33)吗? (2认同)
  • 如果对象是平面的,则此解决方案为真.对于非平面对象,您需要至少两个姿势来恢复对象框中的3D点. (2认同)
  • Homography仅适用于平面场景,也适用于纯旋转获得的场景.基本矩阵/基本矩阵是一般情况下的方法,但你需要至少两个场景视图,其中两个点都是提到的user2311339.然后,基于每个视图中一对匹配的2D点对三维点进行三角测量. (2认同)
  • 请有人帮助我,我不明白投影/ p(z)的含义是什么?p(z) 的值在哪里?哪个元素? (2认同)