我得到了一个线性系统Z'=A*Z+B
,其中 3 个已知点(x1,y1)(x2,y2)(x3,y3)
存储在矩阵中:
Z=[x1 x2 y2 ; y1 y2 y3]
我想找到仿射变换
A=[a11 a21;a12 a22] B=[b1,b2]
这样我就可以计算Z'
.
如何在 MATLAB 中找到A
和B
?为什么我需要正好 3 个点来估计A
和B
?
你可能想求解系统
X = AXx x + AXy y + AX
Y = AYx x + AYy y + AY
给定三对对应点(xi, yi)
,(Xi, Yi)
。
方程实际上是解耦的,你必须求解两个独立的3x3系统
X1 = AXx x1 + AXy y1 + AX
X2 = AXx x2 + AXy y2 + AX
X3 = AXx x3 + AXy y3 + AX
Y1 = AYx x1 + AYy y1 + AY
Y2 = AYx x2 + AYy y2 + AY
Y3 = AYx x3 + AYy y3 + AY
这可以用标准方式完成;你也可以成对减去方程以消除AX
(AY
)并求解得到的2x2系统。
X1 - X3 = AXx (x1 - x3) + AXy (y1 - y3)
X2 - X3 = AXx (x2 - x3) + AXy (y2 - y3)
Y1 - Y3 = AYx (x1 - x3) + AYy (y1 - y3)
Y2 - Y3 = AYx (x2 - x3) + AYy (y2 - y3)