Necesito detectar qué tan rápido se mueve una cámara (horizontal / vertical) para advertirle al operador que disminuya la velocidad.
Toda la imagen se mueve como un bloque, no necesito una dirección real (aunque H o V sería una ventaja) y solo necesito una magnitud aproximada, es decir. se dispara si más de 'N' píxeles cambian entre cuadros.
Las imágenes son escenas grandes y generalmente uniformes de bajo contraste, no tengo ningún resaltado obvio que rastrear. Necesito hacerlo en tiempo real (60 fps) y sin usar toda la CPU.
La solución de Niave es elegir un ROI en el centro, encontrar bordes, calcular similitudes entre pares de cuadros, desplazar uno de los cuadros hacia la izquierda / derecha / arriba / abajo por un píxel, repetir - buscar mínimos.
Me preguntaba si había una solución más inteligente.
fuente
Esta podría ser una solución lenta y terrible, pero podría hacer una correlación cruzada basada en FFT de cuadros posteriores y luego encontrar el pico para identificar el desplazamiento entre cuadros. Quizás solo lo haga en un pequeño subconjunto de la imagen para guardar los ciclos del procesador.
No funcionaría con rotación o cambios drásticos de escena de un cuadro a otro, y probablemente haya mejores métodos. Esta es una especie de solución "Tengo un martillo para que todo parezca un clavo". Supongo que esto es como su solución ingenua, excepto que no hay necesidad de detección de bordes y la FFT lo hace mucho más rápido que cambiar explícitamente un píxel a la vez.
Esta pregunta es similar, y nadie sugiere nada más que correlación cruzada, por lo que tal vez no sea tan malo: usar MATLAB para calcular el desplazamiento entre imágenes sucesivas
fuente
Una forma de estimar la velocidad y la dirección sería hacer una estimación de flujo "local" de, por ejemplo, cuatro ventanas en el centro de la imagen. El método diferencial de Lucas-Kanade supone que el desplazamiento es aproximadamente constante y, por lo tanto, es posible resolverlo como una ecuación.
Entonces mi guía paso a paso sería:
Esto determina la dirección y la velocidad, sin embargo, podría usar una ventana ponderada para hacerla más robusta. Mire el método Lucas-Kanade para sus extensiones.
fuente
Creo que la correlación cruzada es un buen enfoque para encontrar el desplazamiento, pero si desea hacerlo realmente rápido, podría intentar restringirlo a una sola línea de exploración vertical y horizontal (es decir, a través del centro de la imagen). Calcular la correlación cruzada entre las líneas de exploración en ambos cuadros debería darle una aproximación del desplazamiento horizontal y vertical.
fuente