2010-12-09 6 views
12

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.

+1

Consulte [Alineación del visor] (http://www-graphics.stanford.edu/papers/viewfinderalignment/). –

Respuesta

2

¿Por qué no utilizar el combo del sensor de movimiento del acelerómetro/giroscopio, y un rastreador de imágenes de muy baja resolución? Cada método parece confundirse por movimientos de usuario completamente diferentes.

+0

Interesante idea ... la pregunta es si los rangos de movimientos que pueden detectar se superpondrán o si se tratará de algunos tipos de movimiento que ninguno de los dos puede captar confiablemente sin provocar una gran cantidad de interferencia. Lo probaré e informaré en breve, ¡gracias! – Ertebolle

+0

Esta resultó ser la estrategia ganadora, aunque requirió un refinamiento adicional del código L-K de OpenCV y una verificación de imagen adicional muy ligera para que funcione bien, ¡gracias! – Ertebolle

+1

@Ertebolle ¿tiene algún código de muestra para que sus cosas comiencen en el mismo? gracias por adelantado. –

4

hay un código abierto (gratuito para uso privado) proyecto que utiliza la detección curva rápida aquí: http://www.hatzlaha.co.il/150842/FAST-Corner-V2

Podría ser muy útil para la detección de objetos, y ha sido objeto de optimizaciones graves para llegar a resultados no nerviosos hermosas.

- EDITAR -

Ahora hay un proyecto de flujo óptico Lucas-Kanade así - http://www.success-ware.com/150842/Lucas-Kanade-Detection-for-the-iPhone Puede descargar el código fuente, y hay un enlace a la AppStore, así, para que pueda jugar con y ver si responde a tus necesidades.

HTH,

Oded.

+3

Parece que ambas URL http://www.hatzlaha.co.il/150842/FAST-Corner-V2 y http://www.success-ware.com/150842/Lucas-Kanade-Detection-for-the-iPhone no no existir más ¿Puedes confirmar? –

Cuestiones relacionadas