确定变换矩阵。

6
作为我的上一个问题的跟进,该问题与确定相机参数有关,我已经制定了一个新问题。
我有同一矩形的两张图片:
第一张是没有任何变换的图像,显示了矩形的真实形状。
第二张图像显示了经过一些3D变换(XYZ旋转,缩放,XY平移)后的矩形。这使得矩形看起来像梯形。
我希望以下图片描述了我的问题: alt text http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png 如何确定是什么变换(更具体地说:什么变换矩阵)导致了这种变换?
我知道两个图像中角落的像素位置,因此我也知道角落之间的距离。
4个回答

2

我有点困惑,这是一个2D还是3D的问题?

据我理解,您在三维空间中嵌入了一个平面矩形,并且您正在查看它的两个2D“图片” - 一个原始版本和一个基于变换后的版本。这是正确的吗?

如果是这样的话,那么就没有足够的信息来解决这个问题。例如,假设这两张图片看起来完全相同。这可能是因为平移是恒等变换,也可能是因为平移使矩形离相机远了一倍并将其大小加倍(从而使其看起来完全相同)。


这是一个三维问题。第一张图片是一个1:1比例矩形的参考图片。第二张图片可以看作是相机拍摄的矩形图片。我理解您的观点,即对于特定情况有更多的解决方案(更多的转换矩阵)。如果是这种情况,我很乐意选择其中任何一个。(在您描述的情况下,我会选择恒等矩阵或任何给出相同结果的矩阵) - dwergkees

1

这是一个数学问题,而不是编程问题。

你需要定义一组方程(你的转换矩阵,我猜测是3个方程),然后解决它,以得到角点的4个变换。

我只用德语词汇来描述这个问题...所以上面的听起来可能有些奇怪。


0

根据您所提供的信息,这并不容易。但我会给您一些想法来尝试解决问题。如果您有角落的三维坐标,那么将更容易。以下是基本思路:

  1. 将一个角移动到原点。此后,旋转将在原点发生。
  2. 确定轴的向量。通过从原点点减去相邻的角,可以得到一个本地x和y轴。
  3. 使用向量确定角度。您可以使用点积和叉积来确定本地x轴和全局x轴(1,0,0)之间的角度。
  4. 按步骤3中的角度进行旋转。这将为您提供一个新的x轴,它应该与全局x轴匹配,并且一个新的本地y轴。然后,您可以确定关于x轴的另一个旋转,将y轴与全局y轴对齐。

没有z坐标,您可以看到这将是困难的,但这是一般的过程。希望这可以帮助到您。


0

解决方案并不唯一,正如Alex319所指出的那样。

如果第二张图像确实是一个梯形,那么这不会太难。由于透视关系,它是一个梯形(而不是平行四边形),因此它必须是一个等腰梯形。

画出两条对角线。它们相交于矩形的中心,因此这就解决了平移问题。

将梯形旋转,直到其平行边与原始矩形的两条边平行。(哪两条?无所谓。)

通过中心画出第三条平行线。将其缩放到您选择的矩形的两侧。

现在进行平面外的旋转。测量从中心到其中一条平行边的距离,并使用正弦定理。

如果它不是梯形,只是一个四边形,那么就会更难,您需要使用对角线之间的角度来找到旋转轴。


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