Это классическая задача линейной алгебры, ключевая фраза для поиска — «множественная линейная регрессия».
Мне приходилось кодировать некоторые варианты этого много раз на протяжении многих лет. Например, код для калибровки планшета дигитайзера или сенсорного экрана стилуса использует ту же математику.
Вот математика:
Пусть p — входной вектор, а q — соответствующий выходной вектор.
Преобразование, которое вы хотите, представляет собой матрицу 3x3; назовите его A.
Для одного входного и выходного векторов p и q существует вектор ошибок e
e = q - A x p
Квадрат величины ошибки представляет собой скалярную величину:
eT x e = (q - A x p)T x ( q – A x p)
(где оператор T транспонирован).
Что вы действительно хотите минимизировать, так это сумму значений e по наборам:
E = сумма (e)
Этот минимум удовлетворяет матричному уравнению D = 0, где
D(i,j) = частная производная от E по A(i,j)
Скажем, у вас есть N входных и выходных векторов.
Ваш набор входных 3-векторов представляет собой матрицу 3xN; назовите эту матрицу P. i-й столбец P является i-м входным вектором.
То же самое и с набором выходных 3-векторов; назовите эту матрицу Q.
Когда вы перемалываете всю алгебру, решение
A = Q x PT x (P x PT) ^- 1
(где ^-1 — обратный оператор — извините за отсутствие надстрочных и подстрочных индексов)
Вот алгоритм:
Создайте матрицу 3xN P из набора входных векторов.
Создайте матрицу 3xN Q из набора выходных векторов.
Умножение матрицы R = P x транспонирование (P)
Вычислить обратную величину R
Умножение матрицы A = Q x транспонирование (P) x инверсия (R)
используя процедуры умножения матриц и обращения матриц из выбранной вами библиотеки линейной алгебры.
Однако матрица аффинного преобразования 3x3 способна масштабировать и поворачивать входные векторы, но не выполнять какое-либо преобразование! Это может быть недостаточно общим для вашей проблемы. Обычно хорошей идеей является добавление «1» в конце каждого из 3-векторов, чтобы затем получить 4-вектор, и искать наилучшую матрицу преобразования 3x4, которая минимизирует ошибку. Это не повредит; это может привести только к лучшему соответствию данных.
person
Die in Sente
schedule
15.10.2009