我已经在2D中构建了一个矩形,并且它们的坐标已经应用了透视变换之后的4个点的坐标。从MATLAB中的4个点计算2D齐次透视变换矩阵
透视变换在齐次坐标计算并通过一个3×3矩阵M
定义。如果矩阵不知道,我如何从给定的点计算它?
用于一个点的计算是:
| M11 M12 M13 | | P1.x | | w*P1'.x |
| M21 M22 M23 | * | P1.y | = | w*P1'.y |
| M31 M32 M33 | | 1 | | w*1 |
要同时计算所有点我写在一起在一个矩阵A
和类似的变换点以矩阵B
:
| P1.x P2.x P3.x P4.x |
A = | P1.y P2.y P3.y P4.y |
| 1 1 1 1 |
所以等式为M*A=B
,并且这可以通过M = B/A
或M = (A'\B')'
在MATLAB中解决为M
。
但这并不容易。我知道转换后点的坐标,但我不知道确切的B
,因为存在因子w
,并且在齐次转换后不需要1。因为在齐次坐标中,矢量的每个倍数都是相同的点,我不知道我会得到多少。
考虑到这些未知因素我写的公式为M*A=B*W
其中W
与系数w1对角矩阵... W4为在对角线上的B
的每一个点。所以A
和B
现在是完全已知的,我必须解决这个公式为M
和W
。
如果我能方程重新进入形式x*A=B
或A*x=B
其中x
会像M*W
我可以解决这个问题,并知道了M*W
的解决办法或许是已经足够。然而,尽管尝试了所有可能的重新安排,但我没有设法做到这一点。直到它碰到我,封装(M*W)
将不可能,因为一个是3x3矩阵,另一个是4x4矩阵。在这里,我卡住了。
另外M*A=B*W
没有针对M
的单一解决方案,因为M
的每个倍数都是相同的转换。把它写成一个线性方程组,可以简单地修复M
的其中一个条目以获得单个解决方案。此外,可能有输入没有M
的解决方案,但我们现在不用担心这一点。
我实际上试图实现的是某种矢量图形编辑程序,用户可以拖动形状的边界框的角来转换它,而在内部计算转换矩阵。
实际上,我需要JavaScript,但如果我甚至无法在MATLAB中解决这个问题,我完全被卡住了。