@qart17

Поиск сдвига одного изображения относительно другого?

Даны две фотографии, одна сделана со смещенного и повернутого ракурса (вектор смещения и угол поворота предполагаются не слишком большими). Требуется найти вектор смещения и углы поворота.
Интересен так же ответ для случая, когда поворот отсутствует.
В какую сторону смотреть, что почитать? Можно ли реализовать через поиск особых точек на изрображениях?
  • Вопрос задан
  • 1743 просмотра
Решения вопроса 2
@nirvimel
Про OpenCV не подскажу, но я бы написал это вручную. Идея простая: Задаем функцию которая проверяет истинность (точнее обратное ей значение, типа "ложность") гипотезы что второе изображение является первым изображением, сдвинутым по осям ровно на значения X, Y. Эта функция рассчитывается (например) как сумма квадратов разностей значений соответствующих пикселов первого изображения и второго, сдвинутого на -X, -Y. Имея такую функцию дальше просто находим ее минимум методом градиентного спуска (начальные значения X=0, Y=0), полученные X, Y и будут рассчитанными значениями смещения второго изображения от первого.
С поворотом все аналогично, только добавляется еще одна одна переменная - градус поворота. Но функция проверки гипотезы становится значительно тяжелее в вычислительном плане: на каждый пиксел пойдет минимум одна тригонометрическая функция (относительно тяжелая для CPU), плюс этим обламывается SIMD оптимизация, которая дает многократное ускорение для первого варианта без поворота.
Ответ написан
@D3Nd3R
Если необходимо вычислить только сдвиг, то используйте phaseCorrelate. Если необходимо вычислить поворот и сдвиг, то алгоритм действия такой:
1. если изображения прямоугольные, то вырезаем квадрат по меньшей стороне. Затем умножаем на окно Ханна (createHanningWindow);
2. вычисляем дпф;
3. вычисляем логарифм амплитудных спектров;
4. переводим получившиеся изображения в полярную систему координат; https://www.youtube.com/watch?v=JZRSDDzTwts&ab_cha...
5. используя phaseCorrelate получаем оценку поворота (сдвиг по OY, если память не изменяет);
6. поворачиваем исходное изображения;
7. с помощью phaseCorrelate находим сдвиг;
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
12 дек. 2019, в 12:48
16000 руб./за проект
12 дек. 2019, в 12:17
6000 руб./за проект