nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Вычисление матрицы для нахождения аффинного преобразования

Когда-то я вкратце обозначил, что это за зверь такой. Самое время рассказать подробнее, и самому в это время вспомнить, как оно делается.

У нас есть координаты центров уголковых отражателей в метрах, т.е как именно они расположены на "пассивном КА":
A0 (0; 0,08429; -0,05135),
A1 (0; 0,15832; 0,00860),
A2 (0; 0,06939; 0,04274),
A3 (0; -0,06939; 0,04274),
A4 (0; -0,15832; 0,00860),
A5 (0; -0,08429; -0,05135)


Ещё два "центральных" мы сюда не включили, для этого алгоритма от них больше вреда, чем пользы.

А эти 6 точек лежат в одной плоскости X=0. Назовём Apn (ayn, azn) эти же точки, но в двух измерениях (p от слова planar - на плоскости).

Они создают на фотоприёмной матрице изображения с координатами Fn (fxn, fyn), причём мы уже идентифицировали, какая точка соответствует какому уголку. И теперь мы ищем такую матрицу T (2х2) и вектор r аффинного преобразования:



которое давало бы наилучшее совпадение с точками, которые мы "увидели" на фотоприёмной матрице.


"Наилучшее совпадение" нужно как-то формализовать. Не мудрствуя лукаво, вводим величину рассогласования как сумму квадратов разностей:



Честно говоря, не знаю, как здесь красиво найти матрицу и вектор, не "опускаясь" до отдельных координат. Буду счастлив, если кто-то мне подскажет (Upd. уже сообразил).

А тогда, чуть больше года назад, я просто "в явном виде" все эти матрицы раскрыл:


И начал брать частные производные по всем 6 искомым величинам. Сначала по "верхней строке", т.е по компонентам "x":










Получается система из 3 линейных уравнений с тремя неизвестными. Можно переписать её в матричном виде:



Интересно, что слева у нас симметричная матрица 3х3.

Теперь то же самое для "нижней строки" коэффициентов, то есть по оси "y":










То же самое: система из трёх линейных уравнений с 3 неизвестными. Тоже выписываем в матричном виде:



Как ни странно, матрица слева для обоих систем получается одной и той же, и можно записать их совместно:

Правую часть можно представить в виде матричного умножения:



И, наконец, обратить матрицу слева - и выписать коэффициенты аффинного преобразования в явном виде:


Ну и замечаем, что первые две матрицы нам известны заранее, т.к они определяются исключительно конфигурацией мишени. Поэтому можно просто посчитать их заранее на персональном комьпьютере, сразу же перемножить, что даст матрицу 3х6 - и записать её в ПЗУ.

Такой вывод формул очень муторный, но простой до безобразия, можно первокурсника припахать - выпишет как миленький! Хотя, многих для этого придётся ещё хорошенько пнуть. Но если захочу по всей этой разработке диссертацию защитить, хотелось бы всё-таки покрасивше найти выкладки (upd. уже нашёл). Я ещё не настолько крут, чтобы всех их убрать и написать "ОЧЕВИДНО, ЧТО..."


Ну и найдём значение матрицы для конкретной конфигурации мишени, которую привели в начале поста:


UPD. первый раз здесь неправильные значения привёл, где первые 2 строки поделены на 8. Сейчас исправил.

Какова бы ни была мишень, всегда сумма верхних коэффициентов будет нулевой, равно как и сумма по второй строке. А сумма по нижней строке будет равна единице. Оно и понятно: если мы просто сдвинем все точки на определённый вектор, матрица T (2x2) поменяться не должна, должен поменяться только вектор r, ровно на величину параллельного переноса. Здесь это особенно легко проверяется.

Но из-за огромной симметрии, присущей конкретно этой мишени, мы видим просто "одну шестую" во всех нижних строках и повторяющиеся с чередующимися знаками значения в верхних строках. Вообще, симметричная матрица 3х3, которая у нас возникала в процессе вычислений, тут выходит диагональной, в чём также можно убедиться без вычислений, просто увидев, что все слагаемые вне главной диагонали взаимно друг друга погасят.

Для мишени дальней дистанции ничего подобного не получалось. Впрочем, как это полезно использовать - ни малейшего понятия.

Продолжение следует, сейчас верхние строки этой матрицы имеют размерность "пиксели на метры", а нижняя строка - безразмерная. Нужно туда впрячь радианы и перевести в 16-битные значения для QuatCore...
Tags: ПЛИС, математика, программки, работа, странные девайсы
Subscribe

  • Тестируем atan1 на QuatCore

    Пора уже перебираться на "железо" потихоньку. Решил начать с самого первого алгоритма, поскольку он уже был написан на ассемблере. В программу внёс…

  • Формулы приведения, что б их... (и atan на ТРЁХ умножениях)

    Формулу арктангенса на 4 умножениях ещё немножко оптимизировал с помощью алгоритма Ремеза: Ошибка уменьшилась с 4,9 до 4,65 угловой секунды, и…

  • Алгоритм Ремеза в экселе

    Вот и до него руки дошли, причина станет ясна в следующем посте. Изучать чужие библиотеки было лениво (в том же BOOSTе сам чёрт ногу сломит), писать…

  • atan на ЧЕТЫРЁХ умножениях

    Мишка такой человек — ему обязательно надо, чтоб от всего была польза. Когда у него бывают лишние деньги, он идёт в магазин и покупает какую-нибудь…

  • Ай да Пафнутий Львович!

    Решил ещё немного поковыряться со своим арктангенсом. Хотел применить алгоритм Ремеза, но начал с узлов Чебышёва. И для начала со своего "линейного…

  • atan(y/x) на двух умножениях!

    Чего-то никак меня не отпустит эта тема, всё кажется, что есть очень простой и эффективный метод, надо только его найти! Сейчас вот такое…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 9 comments