Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
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'.

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

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

Tags: обработка изображений, отождествление объектов
Subscribe

  • Новый кикад - просто ужас!

    Пока маюсь дурью под Звенигородом, решил было поработать. Но оказалось, что кикад я давно не пересобирал и после последнего обновления системы он не…

  • Хочется взять, и…

    Что-то последнее время чем дальше в лес все больше и больше падает грамотность интернет-пользователей. Похоже, из-за появления дешевых…

  • Мусорка в Зеленчукской

    Вот так выглядит мусорка недалеко от моей квартиры в Зеленчукской (центр станицы, если что): Квартиру сдаем, поэтому появляемся там достаточно…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments