Estoy trabajando en una aplicación de realidad aumentada para iPhone que implica un algoritmo de reconocimiento de objetos muy intensivo en el procesador (empujando la CPU al 100% puede llegar a 5 cuadros por segundo), y en un esfuerzo para ahorrar batería y hacer que todo sea menos "nervioso". Trato de encontrar la forma de ejecutar solo ese reconocedor de objetos cuando el usuario está realmente moviendo la cámara.algoritmo rápido, muy ligero para la detección de movimiento de la cámara?
Mi primer pensamiento fue simplemente usar los acelerómetros/giroscopios del iPhone, pero en las pruebas descubrí que muy a menudo las personas movían el iPhone a una velocidad y una actitud lo suficientemente consistentes como para no poder decir que era todavía en movimiento.
De modo que dejó la opción de analizar la alimentación de video real y detectar movimiento en eso. Hice funcionar OpenCV y traté de ejecutar su algoritmo de flujo óptico piramidal Lucas-Kanade, que funciona bien pero parece ser tan intensivo en el uso del procesador como mi reconocedor de objetos. Puedo obtener una velocidad de fotogramas aceptable si bajé los niveles de profundidad/disminución de la resolución imagen/seguimiento de menos puntos, pero luego la precisión sufre y comienza a perder algunos movimientos grandes y desencadenar en pequeños y temblorosos.
Entonces mi pregunta es, ¿hay otro algoritmo de flujo óptico que sea más rápido que Lucas-Kanade si solo quiero detectar la magnitud general del movimiento de la cámara? No necesito rastrear objetos individuales, ni siquiera necesito saber en qué dirección se mueve la cámara, todo lo que realmente necesito es una forma de alimentar algo con dos cuadros de video y hacer que me diga qué tan separados están.
Consulte [Alineación del visor] (http://www-graphics.stanford.edu/papers/viewfinderalignment/). –