6

作为我之前关于确定相机参数的问题的后续,我提出了一个新问题。

我有两张相同矩形的图片:

第一个是没有任何转换的图像,并按原样显示矩形。

第二张图片显示了应用了一些 3d 变换(XYZ 旋转、缩放、XY 平移)后的矩形。这导致矩形看起来像梯形。

我希望下面的图片能描述我的问题:

替代文字 http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png

如何确定哪些转换(更具体地说:什么转换矩阵)导致了这种转换?

我知道两个图像中角落的像素位置,因此我也知道角落之间的距离。

4

4 回答 4

2

我很困惑。这是 2d 还是 3d 问题?

我理解它的方式是,您在 3d 空间中嵌入了一个平面矩形,并且您正在查看它的两张 2d“图片”——一张是原始版本,一张是基于转换版本的。它是否正确?

如果这是正确的,那么没有足够的信息来解决问题。例如,假设两张图片看起来完全一样。这可能是因为平移是身份,也可能是因为平移将矩形移动到距相机两倍远的位置,并将其大小加倍(从而使其看起来完全相同)。

于 2009-07-13T20:18:29.723 回答
1

这是一道数学题,不是编程题。。

你需要定义一组方程(你的变换矩阵,我猜是 3 个方程),然后求解角点的 4 个变换。

我只用德语描述过这个......所以上面听起来很奇怪..

于 2009-07-13T20:09:11.533 回答
0

根据您掌握的信息,这并不容易。不过,我会给你一些想法。如果你有角落的 3D 坐标,你会更轻松。这是基本的想法。

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

如果没有z坐标,你可以看到这会很困难,但这是一般的过程。我希望这有帮助。

于 2009-07-13T20:38:42.037 回答
0

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

如果第二张图像真的像你说的那样是梯形,那么这不会太难。因为透视是梯形(不是平行四边形),所以一定是等腰梯形。

画两条对角线。它们在矩形的中心相交,因此可以处理平移。

旋转梯形,直到其平行边与原始矩形的两侧平行。(哪两个?没关系。)

通过中心绘制第三条平行线。将此缩放到您选择的矩形的侧面。

现在旋转出平面。测量从中心到平行边之一的距离,并使用正弦定律。

如果不是梯形,只是四边形,那就更难了,你必须使用对角线之间的角度来找到旋转轴。

于 2009-07-13T21:06:03.557 回答