eddy_em: (Default)
[personal profile] eddy_em
В прошлой записи я пытался при помощи Octave найти центр вращения поля, исходя из координат объектов на снимках, полученных последовательно с некоторым интервалом времени. Тот метод был непригоден в случае, если поле не только вращалось, но и смещалось. Здесь я изложу некоторые соображения, которые позволят (возможно) найти нужные параметры.

Вращение вокруг начала координат

Итак, начнем с простейшего случая. Пусть мы имеем некий набор точек, расстояния между которыми постоянны (т.е. проще представить это в виде некоторого "жесткого" объекта). Каждая точка Pi задана координатами (xi, yi). Координаты точек будем обозначать в векторном виде: ri Повернем наш набор точек вокруг начала координат на некоторый угол:

rotation around coordinates' center
Вращение вокруг начала координат
Каждая точка Pi, заданная вектором ri, переходит путем преобразования вращения в точку P'i, заданную вектором r'i. Чтобы записать это преобразование в матричном виде, дополним вектора-столбцы, характеризующие каждую точку, единицей, а матрицу преобразования координат:
сделаем квадратной, заполнив недостающие элементы нулями, а правый нижний элемент главной диагонали - единицей:
Тогда получим в общем виде: r' = Rr, где R - матрица поворота:
Это уравнение легко решается методом наименьших квадратов, в результате чего определяется угол поворота системы.

Вращение вокруг начала координат и сдвиг

Теперь рассмотрим вращение вокруг начала координат, после которого происходит сдвиг всех точек на вектор сдвига T:
rotarion around coords' center and move
Вращение вокруг начала координат с последующим сдвигом
Математически это означает то, что после умножения изначальных векторов ri на матрицу поворота необходимо будет еще прибавить к каждому вектор T: r'i = Rri + T, или r'i = Mri, где M=R·Mt - матрица преобразования в данном случае является произведением матрицы вращения на матрицу смещения:
В результате решения системы r'i = Mri мы получим матрицу преобразования, из которой однозначно можно определить как угол поворота, так и вектор смещения.

Вращение вокруг произвольной точки

Выберем теперь произвольную точку М (не начало координат) и будем вращать нашу систему точек вокруг нее:
rotation around any point
Вращение вокруг произвольной точки M
С геометрической точки зрения это преобразование эквивалентно совокупности следующих: сдвиг на вектор MO, поворот и сдвиг обратно на вектор OM. В матричном представлении матрица преобразования будет иметь вид: M = T·R·T-1, индексом "-1" мы обозначили операцию перемещения в противоположную сторону (не забываем, что последовательность геометрических преобразований читается справа-налево, т.е. сначала - смещение на -T, затем поворот, а затем смещение обратно).

Чтобы не писать все эти синусы и косинусы целиком, обозначим синус угла поворота буквой s, а косинус - буквой c. Тогда после умножения матриц, получим:

Итак, в данном случае угол вращения находится элементарно (например, методом наименьших квадратов или просто усреднением), а затем, решая систуму уравнений справа, получим значение вектора смещения, т.е. координаты центра вращения:
(т.к. здесь возможны случаи обращения знаменателя в ноль, необходимо обязательно выполнять проверку).

Сдвиг и вращение вокруг произвольной точки

Ну а теперь перейдем к самому общему случаю: вращению вокруг произвольного центра со сдвигом:
rotation around any point and move
Вращение вокруг произвольной точки M с последующим сдвигом
Теперь к произведению матриц слева необходимо добавить еще один сдвиг (на вектор MM'). После выполнения умножения мы получим ту же самую матрицу, что получили в предыдущем пункте, но смещение теперь будет суммарным, как если бы мы вращали объект вокруг нового центра, который получается путем смещения оригинального центра вращения на вектор MM'.

Решая аналогичную предыдущему пункту систему уравнений, получим значение угла поворота и сумму радиус-вектора центра вращения и вектора смещения изображения. Если анализировать большое количество изображений, для которых смещения являются небольшими и случайными, а центр вращения остается в одном и том же месте, то, например, медианным усреднением набора полученных векторов можно определить радиус-вектор центра вращения, близкий к реальному с точностью, которая будет тем лучше, чем больше наблюдений мы сделали и чем выше точность определения координат объектов.

Ну, а в следующей заметке я попытаюсь применить изложенное для автоматического определения центра вращения поля и его смещения от кадра к кадру.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

June 2025

S M T W T F S
123 4567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 08:51 am
Powered by Dreamwidth Studios