【问题标题】:How can I find the 3D coordinates of a projected rectangle?如何找到投影矩形的 3D 坐标?
【发布时间】:2010-10-12 11:25:07
【问题描述】:

我有以下主要是算法问题。

  • 设 ABCD 为已知尺寸 d1、d2 位于空间某处的矩形。
  • 矩形 ABCD 投影在平面 P 上(在一般情况下形成梯形 KLMN)。我知道投影矩阵 H。
  • 我还可以找到梯形边缘点 K、L、M、N 的 2D 坐标。

问题如下:

  • 给定投影矩阵 H、梯形边缘的坐标以及我们的对象是具有指定几何形状(尺寸 d1、d2)的矩形的知识,我们能否计算点 A、B、C 的 3D 坐标, D ?

我正在用一个相机抓取简单矩形的图像,我想在空间上重建矩形。我可以抓取多个图像并使用三角测量,但这不是我们所希望的。

仅投影矩阵是不够的,因为光线被投影到同一点。对象具有已知尺寸的事实让我相信这个问题是可以解决的,并且存在有限的解决方案。

如果我弄清楚如何进行这种重建,我就会知道如何对其进行编程。所以我要求一个算法/数学答案。

欢迎任何想法 谢谢

【问题讨论】:

    标签: geometry camera projection


    【解决方案1】:

    您需要计算投影矩阵的逆矩阵。 (你的矩阵不能是单数)

    【讨论】:

    • 投影矩阵的逆矩阵是不够的,因为图像平面上的单个点将在射线上“取消投影”。因此,通过反向投影四个点 K、L、M、N,我们只能得到四条线,而不是矩形在空间中的确切位置。
    • @netclectic - 原始投影图是否指向光线?不——反之亦然。构建投影矩阵时,您决定投影的“深度”。
    【解决方案2】:

    我将在这里给出一个相当简短的答案,但我想你会明白我的大致意思。我假设你有一个 3x4 投影矩阵 (P),所以你应该能够通过找到 P 的正确空向量来获得相机中心:称之为 C。

    一旦有了 C,您就可以计算与向量 CK、CL、CM 和 CN 方向相同的光线(即 C 和 K、L、M 或 N 的叉积,例如 CxK)

    现在您要做的就是计算满足以下 6 个约束的 3 个点 (u1,u2,u3)(任意假设 KL 和 KN 相邻且 ||KL|| >= ||KN|| if d1 > = d2):

    1. u1位于CK上,即u1.CK = 0
    2. u2 位于 CL 上
    3. u3 位于 CN
    4. ||u1-u2|| = d1
    5. ||u1-u3|| = d2
    6. (u1xu2).(u1xu3) = 0(正交)

    其中,A.B = 向量 A 和 B 的点积 ||一个|| = A 的欧几里得范数 AxB = A 和 B 的叉积

    【讨论】:

      【解决方案3】:

      我认为这个问题会产生一组可能的解决方案,至少在 2D 中是这样。对于二维情况:

                 |   
      -----------+-----------
                /|\
               / | \
              /  |  \
             /---+---\VP
            /    |    \
           /     |     \
          /      |      \
         /       |       \
        /        |   --   \
       /         |    |    \
      /          |    |     \
      

      在上图中,垂直线段和水平线段将投影到视图平面 (VP) 上的同一条线上。如果你把它按比例画出来,你会看到有两条来自眼睛的光线穿过未投影线的每个端点。这条线可以在许多位置和旋转 - 想象一下将一根棍子放入圆锥中,它可能会卡在任意数量的位置。

      因此,在二维空间中,定义明确的集合中有无限数量的解。

      这适用于 3D 吗?

      算法大致如下:

      1. 反转投影矩阵
      2. 计算穿过矩形顶点的四条光线,有效地创建一个倾斜的金字塔
      3. 尝试将矩形放入金字塔中。这是一个棘手的问题,我试图在脑海中想象金字塔中的矩形,看看它们是否能以多种方式适应。

      编辑:如果您知道到物体的距离,那将变得微不足道。

      编辑 V2:

      好的,令 Rn 为世界空间中的四条射线,即通过逆矩阵变换,用 m.Rn 表示,其中 |Rn|是一个。因此矩形的四个点是:

      P1 = aR1
      P2 = bR2
      P3 = cR3
      P4 = dR4
      

      其中 P1..P4 是矩形圆周周围的点。由此,使用一点向量数学,我们可以推导出四个方程:

      |aR1 - bR2| = d1
      |cR3 - dR4| = d1
      |aR1 - cR3| = d2
      |bR2 - dR4| = d2
      

      其中 d1 和 d2 是矩形边的长度,a、b、c 和 d 是未知数。

      现在,可能没有解决上述问题的方法,在这种情况下,您需要将 d1 与 d2 交换。您可以将每一行展开为:

      (a.R1x - b.R2x)2 + (a.R1y - b.R2y)2 + (a.R1z - b.R2z)2 = d12

      R1 在哪里?和R2?是光线 1 和 2 的 x/y/z 分量。请注意,您在上面求解的是 a 和 b,而不是 x,y,z。

      【讨论】:

        【解决方案4】:

        m_oLogin 是对的。如果我理解您的目标,相机拍摄的图像是平面 P,对吗?如果是这样,您正在测量 2D 图像的 K、L、M、N。您需要投影矩阵的逆来重构 A、B、C 和 D。

        现在我以前从未这样做过,但我发现您可能会遇到 GPS 仅使用 3 颗卫星修复时会遇到的同样问题 - 有两种可能的解决方案,一种是“在 P 后面”,另一种是在“前面”对吧?

        【讨论】:

          【解决方案5】:

          投影矩阵同时封装了透视和比例,因此逆矩阵将为您提供所需的解决方案。我认为您假设它仅封装了透视图,并且您需要其他东西来选择正确的比例。

          【讨论】:

          • 从世界空间投影到视图空间的过程会丢失信息 - 即深度(无限的 3D 点集都映射到同一个 2D 点)。 OP 想知道如何重新计算丢失的数据。
          • 投影点集不包含深度信息,但投影矩阵包含 - 这就是为什么如果您知道原始投影矩阵,您可以使用逆来返回原始矩形。
          • 投影矩阵不封装比例。
          • @Jacob - 您将矩形投影到特定目标平面上的多边形,而不是从矩形在给定方向投射的“阴影”。或者,你是如何得到投影形状的具体点 K,L,M,N 的?
          猜你喜欢
          • 2014-12-20
          • 1970-01-01
          • 1970-01-01
          • 2012-04-15
          • 1970-01-01
          • 2021-05-05
          • 2012-10-30
          • 2023-04-05
          相关资源
          最近更新 更多