Tag Archives: procesamiento de vídeo

Visión por computador #1 – Flujo Óptico

computervisionperception4
English version
Resulta que la visión por computador no lidia solo con problemas basados en imágenes estáticas. El tratamiento de vídeos para la extracción de información es también labor de esta disciplina. Puede que la dificultad de este post rompa un poco con la tendencia de los anteriores, pero se dice que la mejor forma de aprender algo es explicándolo y como me gustaría usar este blog como otra herramienta de auto aprendizaje, aquí estamos. Preparado?

Uno de los retos que afronta la visión por computador hoy día es el reconocimiento de actividades. Resulta que el desarrollo esta tecnología parace interesante, por ejemplo, para ser implementada en dispositivos inteligentes y que estos sean capaces de interactuar con humanos en función de su estado anímico, o bien (un ejemplo más realista) reconocer accidentes de tráfico o actos vandálicos con cámaras de seguridad.

Hoy, me gustaría presentar uno de los conceptos básicos que da lugar a la existencia de métodos más avanzados: el Flujo Óptico. Algunos estudios plantean que la clave en el reconocimiento de actividades es ser capaz de analizar el flujo óptico de un conjunto adecuado de píxeles. El ejemplo tradicional que apoya este planteamiento describe una habitación a oscuras en la que se encuentra una persona con puntos de luz repartidos por sus brazos mientras realiza una cierta actividad. Simplemente observando el movimiento de estos puntos, sin duda seríamos capaces de saber qué está haciendo esta persona no? Pues algo parecido se pretende hacer de forma automática!

Para quellos que no estén interesados en las matemáticas de este asunto, empiezo por el resultado esperado (siguiente gif). Como puede verse, el cálculo del flujo óptico asocia a cada pixel una flecha que apunta en la dirección en la que “creemos” que el pixel se está moviendo.

Optical_Flow

Hay varias alternativas para calcular el flujo óptico, aunque podría decirse que uno de los más populares es el método de Lucas Kanade, que será descrito aquí en un minuto :). Antes de nada, aquí tienes el código Matlab usado para generar los resultados que se presentan que puedne verse por aquí.  GitHub

Antes de nada, necesitamos una representación matemática para describir vídeos. Los vídeos se representarán de la misma forma que las imágenes pero con una dimensión extra, el tiempo: I(x,y,t). Dados dos instantes consecutivos t_1 y t_2 = t_1 + \Delta t, queremos calcular el flujo óptico, más concretamente un campo de velocidades que representa la diferencia entre el frame en t_1 y t_2.

Para cada pixel (x,y), buscamos la velocidad (v_x, v_y) que describe el cambio de posición de dicho pixel de un frame a otro.

I(x,y,t_1)=I(x+v_x\Delta t,y+v_y\Delta t,t_2)

Ex

Si seguimos un pixel concreto durante el tiempo, podemos escribir:

I(x,y,t) = I(x+\Delta x,y+\Delta y, t+\Delta t)

Asumiendo pequeños desplazamiento se tiene:

\frac{\partial I}{\partial x}\Delta x +\frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t = 0

Por lo que podemos desarrollar en Taylor y escribir:

\frac{\partial I}{\partial x}v_x +\frac{\partial I}{\partial y}v_y + \frac{\partial I}{\partial t} = 0

Obviamente, tenemos dos incógnitas y solo una ecuación. El método de Lucas Kande asume que la vencindad (p,q,r,\cdots) del pixel evaluado tiene la misma velocidad que el de interés, por lo que se podría escribir:

I_x(p)v_x + I_y(p)v_y = -I_t(p)
I_x(q)v_x + I_y(q)v_y = -I_t(q)
I_x(r)v_x + I_y(r)v_y = -I_t(r)
\vdots

El sistema de ecuaciones puede expresarse como Av = b donde

A = \begin{bmatrix}I_x(p) & I_y(p)\\I_x(q) & I_y(q)\\I_x(r) & I_y(r)\\ \vdots & \vdots\end{bmatrix}                    b = \begin{bmatrix}-I_t(p)\\-I_t(q)\\-I_t(r)\\\vdots\end{bmatrix}

Como puede verse, queda un sistema sobredimensionado puesto que para dos incógnitas tenemos más de dos ecuaciones. Lucas Kanade propone resolver el sistema con mínimos cuadrados mediante la siguiente relación:

\hat{v} = (A^tA)^{-1}A^tb

Donde la matriz A debe tener rango completo.

Este método funciona especialmente bien en regiones con geometría similar a esquinas, y… eso es todo!. No ha sido tan traumático no?. Espero que te haya interesado el contenido, y que comentes lo que te apetezca para enriquecer mi ignorancia jeje.

Cuídate!

Tagged , , , , ,