Мне нужно определить скорость панорамирования камеры (горизонтальной / вертикальной), чтобы предупредить оператора о замедлении.
Все изображение движется как блок, мне не нужно фактическое направление (хотя H или V было бы бонусом), и мне нужна только приблизительная величина - т.е. сработать, если между кадрами сдвигается больше чем «N» пикселей.
Изображения большие и в целом однородные сцены с низкой контрастностью, у меня нет очевидных бликов для отслеживания. Мне нужно сделать это в режиме реального времени (60 кадров в секунду) и без использования всего процессора.
Решение Niave - выбрать RoI в центре, найти ребра, вычислить сходство между парами кадров, сместить один из кадров влево / вправо / вверх / вниз на пиксель, повторить - найти минимумы.
Я задавался вопросом, было ли более разумное решение?
источник
Это может быть медленное ужасное решение, но вы можете выполнить взаимную корреляцию на основе FFT последующих кадров, а затем найти пик для определения смещения между кадрами. Возможно, сделайте это только на небольшом подмножестве изображения, чтобы сохранить циклы процессора.
Это не будет работать с поворотом или резкими изменениями сцены от одного кадра к другому, и, вероятно, есть более эффективные методы. Это своего рода решение «У меня есть молоток, поэтому все выглядит как гвоздь». Я думаю, это похоже на ваше наивное решение, за исключением того, что нет необходимости в обнаружении краев, и FFT делает это намного быстрее, чем явное смещение одного пикселя за раз.
Этот вопрос похож, и никто не предлагает ничего, кроме взаимной корреляции, поэтому, возможно, это не так уж и плохо: использование MATLAB для вычисления смещения между последовательными изображениями
источник
Один из способов оценить скорость и направление - сделать «локальную» оценку потока, например, из четырех окон в центре изображения. Дифференциальный метод Лукаса – Канаде предполагает, что смещение является приблизительно постоянным, и поэтому его можно решить как уравнение.
Так что мое пошаговое руководство будет:
Это определяет направление и скорость, однако вы можете использовать взвешенное окно, чтобы сделать его более устойчивым. Посмотрите на метод Лукаса-Канаде для его расширений.
источник
Я думаю, что взаимная корреляция является хорошим подходом для нахождения смещения, но если вы хотите сделать это очень быстро, вы можете попытаться ограничить его только одной вертикальной и одной горизонтальной линией сканирования (т.е. через центр изображения). Вычисление взаимной корреляции между линиями сканирования в обоих кадрах должно дать вам приблизительное смещение по горизонтали и вертикали.
источник