gpt4 book ai didi

opencv - 查找将3D局部坐标映射到全局坐标的转换矩阵

转载 作者:行者123 更新时间:2023-12-02 16:07:18 30 4
gpt4 key购买 nike

我正在为我的深度相机编码一个校准算法。本相机输出一个通道的2D图像,其中包含图像中每个物体的距离。

根据该图像,并使用相机和失真矩阵,从相机的 Angular 来看,我能够创建3D点云。现在,我希望将这些3D坐标转换为全局/世界坐标。但是,由于我无法使用像棋盘这样的任何图案来校准相机,因此我需要另一种选择。

所以我在想:如果我提供一些地面点(在摄影机视角中),我将定义一个平面,该平面在全局视角中应使Z坐标接近零。因此,我应该如何继续找到使平面水平的转换矩阵。

Local coordinates ground plane, with an object on top

我尝试使用OpenCV的solvePnP,但没有给我正确的转换。我还考虑过使用OpenCV的estimateAffine3D,但是我不知道全局坐标应映射到哪里,因为提供的接地点不需要放在任何特定的图案/形状上。

提前致谢

最佳答案

您需要的是通常所说的外部校准:将3D摄像机参考系与“世界”参考系相关联的刚性转换。通常,这是通过在世界参考框架中找到已知的 3D 点及其在图像中对应的 2D 投影来完成的。这就是SolvePNP所做的。

为了在最小化均方根误差的意义上找到两组3D点之间的最佳旋转/平移,解决方案是:

  • 理论:https://igl.ethz.ch/projects/ARAP/svd_rot.pdf
  • 较简单的解释:http://nghiaho.com/?page_id=671
  • Python代码(来自更简单的说明网站):http://nghiaho.com/uploads/code/rigid_transform_3D.py_

  • 因此,如果要从摄像机参考系转换 3D 点,请执行以下操作:
  • 如您所建议的,定义一些在世界参考框架中具有已知位置的3D点,例如(但不一定)定义为Z = 0。将坐标放入Nx3矩阵 P 中。
  • 获取相机参考系中的相应3D点。将它们放在Nx3矩阵中 Q
  • 从上面第3点定义的文件中,调用 antique_transform_3D(P,Q)。这将返回3x3矩阵 R 和3x1 vector t

  • 然后,对于世界参考系 p 中的任何3D点,将其作为3x1 vector ,可以使用以下方法获得对应的摄像机点 q :

    q = R.dot(p)+t

    编辑:未指定世界中点的3D位置时回答

    的确,要使此过程正常运行,您需要知道(或更好地指定)世界参考框架中各点的3D坐标。如评论中所述,您仅知道这些点在平面中,而在平面中没有坐标。

    这是一个可能的解决方案:
  • 在相机参考系中选取选定的3D点,我们称它们为 q'i
  • 使平面适应这些点,例如https://www.ilikebigbits.com/2015_03_04_plane_from_points.html中所述。其结果将是法线 vector n 。要完全指定平面,还需要选择一个点,例如 q'i 的质心(平均值)。
  • 由于这些点肯定不会完全位于平面中,因此可以将它们投影到平面上,例如How to project a point onto a plane in 3D?中所述。我们将这些投影点称为 qi
  • 此时,您具有一组3D点 qi ,它们位于理想平面上,该平面应与地面紧密对应(在世界坐标系中z = 0)。但是,坐标在相机参考系中。
  • 现在,我们需要指定此地平面中的x轴和y轴的原点和方向。您似乎没有任何标准,因此可以选择将原点设置为仅在相机中心“下方”,并将X轴与相机光轴对齐。为此:
  • 将点(0,0,0)投影到平面中,就像在步骤4中所做的那样。将其称为。将点(0,0,1)投影到平面中,并将其称为。计算 vector a-o ,对其进行归一化,然后将其称为 i
  • o 是世界参照系的原点, i 是世界参照系的X轴(在相机坐标中)。致电 j = n x (叉积)。 j 是Y轴,我们快要完成了。
  • 现在,通过将它们投影在 i j 上,获得世界参考框架中的 qi 点的X-Y坐标。也就是说,在每个 qi i 之间进行点积运算以获取X值,并在每个 qi j 之间进行点积运算以获取Y值。 Z值均为0。将这些坐标称为X,Y,0。 pi
  • 与答案的第一部分一样,使用 pi qi 的这些值来估算 R t !

  • 也许有一个更简单的解决方案。另外,我还没有测试过,但是我认为它应该可以工作。希望这可以帮助。

    关于opencv - 查找将3D局部坐标映射到全局坐标的转换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820572/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com