如何找到一个投影矩形的三维坐标?

3
我遇到了一个主要是算法问题的困难。
假设已知空间中具有尺寸d1, d2的矩形ABCD,其在平面P上的投影形成梯形KLMN(通常情况下)。我知道投影矩阵H,以及可以找到梯形边缘点K、L、M、N的二维坐标。
问题如下:
如果我们已经知道矩形ABCD的几何特征(尺寸d1,d2),给定投影矩阵H和梯形边缘点的坐标,能否计算出点A、B、C、D的三维坐标?
我正在使用单个摄像头捕获简单矩形的图像,并希望将其重构到空间中。虽然可以采取多张图片并使用三角测量方法,但这种方法不被期望使用。
仅用投影矩阵是不够的,因为一条线可能会被投影到同一个点上。由于已知对象的尺寸,我相信该问题是可解的,且有有限解。
如果我弄清楚了如何进行此重建,我就知道如何编程。所以我想要一个算法/数学解答。
感谢任何想法!
5个回答

1

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

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

在上图中,垂直线段和水平线段将投影到视图平面(VP)上的同一条线。如果按比例绘制出来,您会看到从眼睛通过未投影线的每个端点传递的两条射线。该线可以处于许多位置和旋转状态 - 想象一根棍子掉进一个锥体中,它可以卡在任意数量的位置。
因此,在2D空间中,有无限数量的解决方案在一个明确定义的集合内。
这是否适用于3D?
算法大致如下:
1. 反转投影矩阵 2. 计算通过矩形顶点的四条射线,有效地创建了一个倾斜的金字塔 3. 尝试将矩形放入金字塔中。这是棘手的部分,我正在尝试在金字塔中心想象矩形,以查看它们是否可以以多种方式适合其中之一。
编辑:如果您知道物体的距离,它将变得微不足道。
编辑V2:
好的,让Rn成为世界空间中的四条射线,即通过反转矩阵变换,以m.Rn表示,其中|Rn|为1。因此,矩形的四个点为:
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。


1
你需要计算投影矩阵的逆矩阵。(您的矩阵不能是奇异的)

投影矩阵的逆矩阵并不足够,因为图像平面上的单个点将会“反投影”到一条射线上。因此,通过反向投影四个点K、L、M、N,我们只能得到四条线而不是矩形在空间中的确切位置。 - netclectic
@netclectic - 原始投影映射点到光线吗?不是的,反向也不会。当您构建投影矩阵时,您决定要投影到哪个“深度”。 - mbeckish

1

我在这里会给出一个相当简短的答案,但我认为你会明白我的大致意思。我假设您有一个3x4的投影矩阵(P),因此您应该能够通过找到P的右零向量来获得相机中心:称其为C。

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

现在,您所要做的就是计算满足以下6个约束条件的3个点(u1、u2、u3)(任意假设KL和KN相邻且||KL||>= ||KN||如果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|| = A 的欧几里得范数 AxB = 向量 A 和 B 的叉积


0

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

现在我以前从未做过这个,但我想你可能会遇到GPS在只有3个卫星修正时遇到的同样的问题 - 会有两个可能的解决方案,一个在P“后面”,一个在P“前面”,对吧?


0

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


从世界空间投影到视图空间的过程会丢失信息,即深度(无限数量的3D点映射到同一2D点)。OP想知道如何重新计算丢失的数据。 - Skizz
投影点集不包含深度信息,但是投影矩阵包含 - 这就是为什么如果您知道原始投影矩阵,可以使用其逆矩阵返回到原始矩形的原因。 - mbeckish
投影矩阵不包含缩放信息。 - Jacob
@Jacob - 你是将矩形投影到特定目标平面上的多边形,而不是投影到从给定方向投射出来的“阴影”上。否则,你是如何得到投影形状的具体点K、L、M、N的呢? - mbeckish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接