3D坐标到Matlab中的像素坐标

时间:2014-01-19 12:53:47

标签: matlab 3d mapping 2d

我正在编写代码来模拟立体视觉,并发现了3D到2D映射的一些麻烦。我正在查看的对象是围绕轴原点构建的,并且摄像机目标设置为[0 0 0]

相机向上矢量为[0 0 1],因此相机参考系统和世界(物体)参考系统是相同的。要将3D点映射到2D点,我有:

[x/z y/z 1]' = K * P * [X Y Z 1]'

其中[x/z y/z]是使用同源表示法位于[X Y Z 1]的3D点的像素坐标。 K3 x 4校准矩阵(最后一列由零组成),P4 x 4投影矩阵。

由于我还需要模拟校准过程,因此我使用Caltech的Matlab校准工具箱获得了K的典型国际象棋模式(这也是在Matlab中构建的)。 K被发现为:

K = [521 0   409 0;
     0   521 288 0;
     0   0   1   0]

其中焦距根据摄像机视角设置,并且我使用800 x 600命令print拍摄的照片。


这是我的问题:如果在3D视图中我在轴的原点放置了一个标记,并使用放置在[0 -50 -50](例如)的相机拍摄场景照片[0 0 0]如前所述,我在图片中找到原点的像素坐标[415 290]

但是尝试通过K * P * [0 0 0 1]'来计算投影我得到了错误的结果,例如[409 811 1]其中X 几乎相同但是{{1}完全错误(甚至在图片边界之外)。

Y由校准工具箱定义,K由X轴(本例中为45°)和P处的平移定义。

我做错了什么?

这是[0 -50 -50]矩阵(如果它有帮助):

P

0 个答案:

没有答案