确定转换矩阵

时间:2009-07-13 19:57:47

标签: matrix transformation photography photogrammetry

作为my previous question关于确定相机参数的后续内容,我提出了一个新问题。

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

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

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

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

alt text http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png

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

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

4 个答案:

答案 0 :(得分:2)

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

我理解它的方式,你有一个嵌入3d空间的扁平矩形,你正在看它的两个2d“图片” - 一个原始版本和一个基于转换版本。这是对的吗?

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

答案 1 :(得分:1)

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

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

我只用德语单词描述过......所以上面的内容听起来很奇怪......

答案 2 :(得分:0)

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

  1. 将角移动到原点。此后,将围绕原点进行轮换。
  2. 确定轴的矢量。通过从原点减去相邻的角来完成此操作。这些将是您的世界的本地x和y轴。
  3. 使用矢量确定角度。您可以使用点和交叉乘积来确定局部x轴和全局x轴(1,0,0)之间的角度。
  4. 在步骤3中按角度旋转。这将为您提供一个新的x轴,该x轴应与全局x轴和新的局部y轴匹配。然后,您可以确定围绕x轴的另一个旋转,这将使y轴与全局y轴对齐。
  5. 如果没有z坐标,您会发现这很困难,但这是一般过程。我希望这会有所帮助。

答案 3 :(得分:0)

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

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

绘制两个对角线。它们在矩形的中心相交,因此负责翻译。

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

通过中心画出第三个平行线。将其缩放到您选择的矩形的边上。

现在轮换出飞机。测量从中心到其中一个平行边的距离,并使用正弦定律。

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