@qart17

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

Даны две фотографии, одна сделана со смещенного и повернутого ракурса (вектор смещения и угол поворота предполагаются не слишком большими). Требуется найти вектор смещения и углы поворота.
Интересен так же ответ для случая, когда поворот отсутствует.
В какую сторону смотреть, что почитать? Можно ли реализовать через поиск особых точек на изрображениях?
  • Вопрос задан
  • 2367 просмотров
Решения вопроса 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
@AlexSku
не буду отвечать из-за модератора
Пример из MatLab'а
Ответ написан
Комментировать
PavelK
@PavelK
В OpenCV есть phaseCorrelate на выходе получите направление смещения.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
этот блог прочитайте
www.pyimagesearch.com/2015/03/16/image-pyramids-wi...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы