我已經在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中解決這個問題,我完全被卡住了。