如何将质心从像素转换为现实世界坐标

问题描述

我正在开发一个应用程序,使用 IFM 3D 相机在机器人拾取之前识别零件。目前,我能够使用深度图像的轮廓找到这些对象的质心,并从那里计算这些对象在像素空间中的中心点。

我的下一个任务是将 2D 质心坐标转换为“真实”空间中的 3D 点。我能够训练机器人,使其坐标系位于图像的中心或图像的传统 (0,0) 点(左上角)。

我使用的 3D 相机提供了内在和外在矩阵。我知道我需要使用这些矩阵的某种组合来将质心投影到三个空间中,但以下问题仍然存在:

  1. 我目前对谷歌搜索的理解是内在矩阵用于修复镜头畸变(桶形和针孔翘曲等),而外在矩阵用于将点投影到现实世界中。这个简化的假设正确吗?

  2. 相机如何提供单个外在矩阵?我知道传统上这些矩阵是使用棋盘角方法找到的,但这些矩阵不依赖于相机的高度吗?

  3. 解决方案是否像采用 3x4 外部矩阵并将其乘以 3x1 矩阵 [x,y,1] 一样简单,如果是这样,返回的值是相对于相机中心还是传统的 (0,0) 图像的点。

提前感谢您的任何见解!另外,如果有任何安慰的话,我正在用 python 和 openCV 做所有事情。

解决方法

  1. 没有。我建议您阅读 Hartley 和 Zisserman 的多视图几何中的基础知识,可在网络上免费获得。根据相机型号,内在函数包含不同的参数。对于针孔相机模型,这些是焦距和主点。

  2. 您可以直接将 2D 质心转换为 3D 的唯一原因是您使用了 3D 相机。阅读相机的手册,应该解释如何为您的特定模型给出 2D 和 3D 坐标之间的关系。 如果您只有图像数据,则只能从至少两个视图计算 3D 点。

  3. 不,当然不是。请不要偷懒,开始阅读有关相机投影的基础知识,而不是要求他人解释网络和文献中随处可见的常见基础知识。