Matrix 确定变换矩阵

Matrix 确定变换矩阵,matrix,transformation,photography,photogrammetry,Matrix,Transformation,Photography,Photogrammetry,作为关于确定摄像机参数的后续工作,我提出了一个新问题 我有两张相同矩形的图片: 第一个是没有任何变换的图像,并按原样显示矩形 第二幅图像显示了应用某些三维变换(XYZ旋转、缩放、XY平移)后的矩形。这使得矩形看起来像梯形 我希望以下图片描述了我的问题: 如何确定是什么转换(更具体地说:什么转换矩阵)导致了这种转换 我知道两幅图像中角点的像素位置,因此我也知道角点之间的距离。这是一个数学问题,不是编程问题 你需要定义一组方程(你的变换矩阵,我猜是3个方程),然后求解角点的4个变换 我只用德语描述

作为关于确定摄像机参数的后续工作,我提出了一个新问题

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

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

第二幅图像显示了应用某些三维变换(XYZ旋转、缩放、XY平移)后的矩形。这使得矩形看起来像梯形

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

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


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

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

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


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

我很困惑。这是二维问题还是三维问题

按照我的理解,你在3d空间中嵌入了一个平面矩形,你看到了它的两张2d“图片”——一张是原始版本,另一张是基于转换版本的。这是正确的吗


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

根据您掌握的信息,这并不容易。不过,我会给你一些想法。如果你有角落的三维坐标,你会有一个更容易的时间。这是基本的想法

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

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

    解决方案不会像Alex319指出的那样是唯一的

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

    画两条对角线。它们在矩形的中心相交,这样就可以进行平移

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

    通过中心画第三条平行线。将其缩放到所选矩形的边

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


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

    这是一个3d问题。第一张图片是矩形的参考图片,比例为1:1。第二张可以看作是照相机拍摄的矩形的照片。我理解你的观点,一个特殊情况有更多的解决方案(更多的变换矩阵)。如果是这样的话,我很乐意选择其中一个。(在您描述的情况下,我很乐意使用单位矩阵或任何给出相同结果的矩阵)