Быстрый, очень легкий алгоритм для обнаружения движения камеры?

Я работаю над приложением дополненной реальности для iPhone, которое включает в себя алгоритм распознавания объектов, очень интенсивно использующий процессор (нагружая ЦП на 100%, он может пропускать 5 кадров в секунду), а также в попытке сэкономить заряд батареи и сделать все это менее "нервным". Я пытался придумать способ запускать этот распознаватель объектов только тогда, когда пользователь фактически перемещает камеру.

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

Таким образом, оставалась возможность анализировать фактическую видеопоток и обнаруживать в нем движение. Я заставил OpenCV работать и попытался запустить их пирамидальный алгоритм оптического потока Лукаса-Канаде, который работает хорошо, но кажется почти таким же ресурсоемким, как и мой распознаватель объектов - я могу получить приемлемую частоту кадров, если уменьшу уровни глубины / уменьшу разрешение изображение / отслеживание меньшего количества точек, но затем страдает точность, и он начинает пропускать некоторые крупные движения и срабатывать при небольших движениях, вызывающих дрожание рук.

У меня вопрос, есть ли другой алгоритм оптического потока, который быстрее, чем Lucas-Kanade, если я просто хочу обнаружить общая величина движения камеры? Мне не нужно отслеживать отдельные объекты, мне даже не нужно знать, в каком направлении движется камера, все, что мне действительно нужно, это способ передать что-то на два кадра видео и заставить его сказать мне, как далеко они друг от друга.

13
задан Ertebolle 9 December 2010 в 00:44
поделиться