【问题标题】:Converting a 2D image point to a 3D world point将 2D 图像点转换为 3D 世界点
【发布时间】:2013-01-25 02:23:51
【问题描述】:

我知道在一般情况下,进行这种转换是不可能的,因为从 3d 到 2d 的深度信息会丢失。

但是,我有一个固定的摄像头,并且我知道它的摄像头矩阵。我还有一个已知尺寸的平面校准模式 - 假设在世界坐标中它有角 (0,0,0) (2,0,0) (2,1,0) (0 ,1,0)。使用 opencv 我可以估计模式的姿势,给出将对象上的点投影到图像中的像素所需的平移和旋转矩阵。

现在:这种 3d 到图像的投影很容易,但是另一种方式呢?如果我在图像中选择一个我知道是校准图案的一部分的像素,我如何获得相应的 3d 点?

我可以在校准图案上反复选择一些随机 3d 点,投影到 2d,并根据误差细化 3d 点。但这似乎很可怕。

鉴于这个未知点的世界坐标类似于 (x,y,0) - 因为它必须位于 z=0 平面上 - 似乎应该有一些我可以应用的变换,而不是做迭代的废话。不过我的数学不是很好 - 有人可以计算出这个转换并解释你是如何推导出它的吗?

【问题讨论】:

  • 我怎么知道世界坐标(x,y,z)?

标签: opencv computer-vision


【解决方案1】:

这是一个封闭形式的解决方案,我希望可以帮助某人。使用上面评论中image 中的约定,您可以使用居中归一化像素坐标(通常在失真校正后)u 和 v,以及外部校准数据,如下所示:

|Tx|   |r11 r21 r31| |-t1|
|Ty| = |r12 r22 r32|.|-t2|
|Tz|   |r13 r23 r33| |-t3|

|dx|   |r11 r21 r31| |u|
|dy| = |r12 r22 r32|.|v|
|dz|   |r13 r23 r33| |1|

有了这些中间值,你想要的坐标是:

X = (-Tz/dz)*dx + Tx
Y = (-Tz/dz)*dy + Ty

说明:

向量 [t1, t2, t3]t 是世界坐标系原点(校准图案的 (0,0))相对于相机光学中心的位置;通过反转符号和反转旋转变换我们得到向量T = [Tx, Ty, Tz]t,它是相机中心在世界参考系中的位置。

同样,[u, v, 1]t 是相机参考系中观察点所在的向量(从相机中心开始)。通过反转旋转变换,我们得到向量d = [dx, dy, dz]t,表示在世界参考系中的同一方向。

为了反转旋转变换,我们利用了旋转矩阵的逆是它的转置 (link) 这一事实。

现在我们有一条从点T开始的方向向量d的线,这条线与平面Z=0的交点由第二组方程给出。请注意,同样容易找到与 X=0 或 Y=0 平面或与它们平行的任何平面的交点。

【讨论】:

  • 在这种情况下,t3 = 1?形成齐次坐标
  • @user1538798:没有。[t1, t2, t3] 是世界上的一个 3D 位置。
  • 对此有点困惑。如果 [t1, t2, t3] 是世界中的 3D 位置,这是否仍会使 T = [Tx, Ty, Tz] 成为世界参考中的 3D 位置?
  • @user1538798:是的。检查“解释”下方的段落。
  • 但相同的矩阵将向量 [u v 1] 从相机参考转换为世界参考中的 [dx dy dz](在第二个等式中)。而同一旋转矩阵将世界参考的 [-t1 -t2 -t3] 扭曲为同一世界参考的 [Tx Ty Tz]?
【解决方案2】:

是的,你可以。如果您有一个将 3d 世界中的点映射到图像平面的变换矩阵,则可以使用该变换矩阵的逆矩阵将图像平面点映射到 3d 世界点。如果您已经知道 3d 世界点的 z = 0,这将导致该点的一种解决方案。无需反复选择一些随机 3d 点。我有一个类似的问题,我将摄像头安装在具有已知位置和摄像头校准矩阵的车辆上。我需要知道在相机的图像位置上捕获的车道标记的真实位置。

【讨论】:

  • 所以举个具体的例子,变换是here.[X Y Z 1]是世界点,[u v 1]是图像像素。如何反转中间位?
  • 谢谢,这是我解决问题所需的提示。我不能直接使用逆变换,因为相机点需要按一定比例缩放才能使物体指向 z=0。但是计算缩放比例很容易解决。
【解决方案3】:

如果您的点在世界坐标中的 Z=0(这对于平面校准模式应该是正确的),而不是反转旋转变换,您可以从相机和校准模式计算图像的单应性。

当您有单应性时,您可以选择图像上的点,然后使用逆单应性获取其在世界坐标中的位置。 只要世界坐标中的点与用于计算此单应性的点在同一平面上(在这种情况下 Z=0),这就是正确的

这个问题的方法也在下面这个问题上讨论过:Transforming 2D image coordinates to 3D world coordinates with z = 0

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 2012-10-10
    • 2020-03-04
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多