Поскольку у вас есть больше точек, чем необходимо, вы можете использовать все точки и решить проблему переполненности системы, чтобы получить потенциально более точную матрицу преобразования (это полезно, если вы не уверены в точности преобразованных координат).
Более подробно, вы можете представить матрицу преобразования как
a b c
-b a d
0 0 1
для некоторых параметров a, b и c (если вам действительно нужно, вы можете разработатьугол и XY-переводы из этих а, б и в).Затем у нас есть эти два уравнения из каждой из четырех точек (x_i, y_i) и результата (x_i ', y_i'):
a x_i + b y_i + c = x_i'
a y_i + -b x_i + d = y_i'
Затем вы можете переписать восемь уравнений как систему линейных уравненийпеременные (a, b, c, d) следующим образом (в матричной форме):
x_1 y_1 1 0 x_1'
y_1 -x_1 0 1 a y_1'
x_2 y_2 1 0 b x_2'
y_2 -x_2 0 1 * c = y_2'
x_3 y_3 1 0 d x_3'
y_3 -x_3 0 1 y_3'
x_4 y_4 1 0 x_4'
y_4 -x_4 0 1 y_4'
или Ax = B, где A - матрица слева, x = [abcd] 'и B= вектор справа.
Теперь разложите A, используя SVD, чтобы получить UDV '.Тогда x можно найти как VD -1 U'B, где D -1 - обратная диагональная матрица D. Для получения дополнительной информации о SVD см. SingularЦенность Разложения (СВД) .