Bienvenido: Ingresar
location: Vision / OpticFlowReview

Flujo Optico

Objetivos

Analizar e implementar diferentes trabajos en la literatura sobre flujo optico.

Introducción

Las técnicas de Flujo Óptico tratan de dar solución a la determinación de la velocidad de los objetos dentro de la secuencia de imágenes.

Teoría del Flujo Óptico

La obtención del flujo óptico desemboca en la determinación de la dirección del movimiento y de la velocidad del movimiento en todos los puntos de la imagen. El objetivo inmediato del análisis de imágenes basado en el flujo óptico es determinar el campo de movimiento (representación bidimensional de un movimiento tridimensional.

El flujo óptico puede ser definido como el movimiento aparente de los patrones de intensidad en una imagen. La palabra aparente indica que el movimiento espacial de los objetos (campo de movimiento) puede coincidir o no con el flujo estimado.

Métodos Diferenciales

se asume

Se usa el gradiente de la intensidad espacial para calcular la velocidad de la imagen

Restricción local El movimiento de la images es directamente proporcional al cambio de intensidad

Tenemos que deducir una ecuación que indique la componente de velocidad (normal al controrno) Se considera que la secuencia de imágenes es como una función de 3 dimensiones f(x,y,t). Si además asumimos que la irradiación de la imagen es proporcional a la radiación de la escena en la dirección del eje óptico de la cámara, la constancia del brillo aparente de la escena observada puede ser escrita el brillo aparente de la escena observada puede ser escrita

$$$\frac{\mathit{dE}}{\mathit{dt}}=0$$

$$$\frac{\mathit{dE(x(t),y(t),t)}}{\mathit{dt}}=\frac{\partial{E}}{\partial{x}}\ast{\frac{\partial{x}}{\partial{t}}}+\frac{\partial{E}}{\partial{y}}\ast{\frac{\partial{y}}{\partial{t}}}+\frac{\partial{E}}{\partial{t}}=0$$

Donde E(x,y,t) es la intensidad del punto (x,y) de la imagen en el instante de tiempo t

usando las abreviaciones

$$$ u = \frac{\partial{x}}{\partial{t}};\ v = \frac{\partial{y}}{\partial{t}};\ Ex = \frac{\partial{E}}{\partial{x}};\ Ey = \frac{\partial{E}}{\partial{y}}$$

obtenemos

$$$Ex*u + Ey *v + t = 0$$

donde u y v son los vectores de velocidad del punto y son las componentes del campo de velocidad. Se tiene una ecuación lineal con dos incógnitas, por lo que son necesarias otras restricciones para poder calcular el flujo óptico

Problema de apertura

El problema de la apertura surge de la imposibilidad de asignar un valor unívoco al desplazamiento de un punto debido a que la región analizada es demasiado pequeña. Imaginemos que vemos un rectángulo moviéndose sobre una fondo blanco a través de una pequeña abertura. Existen infinitos movimientos del rectángulo que obtienen el mismo vector normal de velocidad. La información que tenemos es solo suficiente para determinar la velocidad ortogonal al lado visible del rectángulo. La velocidad del movimiento paralelo no puede ser estimada

ACA VA IMAGEN

Por tanto, es necesario añadir una condición adicional. Los distintos algoritmos basados en la Ecuación de Contención del flujo óptico se diferencian en los supuestos añadidos, que permiten obtener una segunda ecuación y, de esa forma, hallar la segunda componente de la velocidad.

Metodos para determinar el Flujo Óptico

Algoritmo de Lucas-Kanade

Asumen constantes los vectores de velocidad u y v en una pequeña porción de la imagen.

$$$Ex*u + Ey *v + t = 0$$

$$$\left[\matrix{Ex_{1} & Ey_{1} \cr Ex_{2} & Ey_{2} \cr .. & .. \cr Ex_{n} & Ey_{n}}\right]\left[\matrix{u \cr v}\right] = -\left[\matrix{Et_{1} \cr Et_{1} \cr .. \cr Et_{n}}\right]$$

$$$A \vec{v} = b}$$

donde la matriz A contiene las derivadas espaciales de la imagen, el vector v corresponde al vector de flujo óptico (u,v) y el vector b contiene las derivadas temporales de la imagen.

$$$A^T A \vec{v} = A^T b$$

$$$\vec{v} = \left(A^T A \right)^{-1} A^T b$$

$$$\matrix{{\vec{v} = (A^T A \right)^{-1}& A^T b} \cr {(2x1) \ (2x2) & (2xn)(nx2)}}$$

Para poder realizar el cálculo de flujo óptico tiene que ser posible la inversión de la matriz

$$$A^T A = \left[\matrix{\sum{Ex^2} & \sum{Ex Ey} \cr \sum{Ex Ey} & \sum{Ex^2}}\right]$$

Shi y Tomassi definen en las propiedades que debe cumplir una región para que el flujo óptico se estimado apropiadamente utilizando la técnica de LK. Sean λ1 y λ2 los valores propios de la matriz

$$$A^TA$$

para cierta región R de la imagen, entonces se debe cumplir que:

factores que pueden inducir errores en la estimación

El primero es independiente del algoritmo de Lucas-Kanade. Los otros dos pueden ser controlados seleccionando un tamaño adecuado a la región.

Los pasos para el cálculo del flujo óptico es

  1. Filtrar cada imagen de la secuencia con un filtro Gaussiano de desviación estandar s = 1.5 pixels a lo largo de la dimensión espacial
  2. Filtrar cada imagen de la secuencia a lo largo de la dimensión temporal t = 1.5 tramas. Si 2k+1 es el largo del filtro temporal, descartar la primera y la última k imagen
  3. Para cada pixel de cada imágen de la secuencia: a)Calcular la matriz A y el vector b; b)Calcular el flujo óptico

Implementación del algoritmo en la libreria OpenCV

Algoritmo Lucas-Kanade

void cvCalcOpticalFlowLK(

);

ImgA - Primera imagen, 8-bit, single-channel.

imgB - Segunda imagen, 8-bit, single-channel.

win_size - Tamaño de la ventana de promedio para agrupar pixels

velx - Componente horizontal del flujo óptico del mismo tamaño que la imagen de entrada, 32-bit punto flotante, single-channel.

vely - Componente vertical del flujo óptico del mismo tamaño que la imagen de entrada, 32-bit punto flotante, single-channel.

Algoritmo de Horn-Schunk

Generalmente el campo de velocidades variará suavemente en la mayor parte de la imagen (Excepto en oclusiones). Los puntos vecinos de un objeto tendrán siempre velocidades similares, y se podrá utilizar la condición de suave variación de la velocidad como segunda ecuación. El movimiento de los bordes debe mantenerse compatible con los gradientes espaciales y temporales del nivel de gris Este método necesita la variación lenta del movimiento en la imagen.

El problema del calculo del flujo óptico se traduce en minimizar una ecuación de energía dada como la suma de un termino de suavidad. mas los errores al cuadrado para todos los puntos de la imagen (restricción del cambio de la luminancia )

$$$\int\int {\lef[ (\frac{\partial{u}}{\partial{x}})^2 + (\frac{\partial{u}}{\partial{y}})^2 + (\frac{\partial{v}}{\partial{x}})^2 + (\frac{\partial{v}}{\partial{y}})^2 \right}]}dx dy = \lambda \int \int {\left[ \frac{\partial{E}}{\partial{x}}\ast{\frac{\partial{x}}{\partial{t}}}+\frac{\partial{E}}{\partial{y}}\ast{\frac{\partial{y}}{\partial{t}}}+\frac{\partial{E}}{\partial{t}}\right]}dx dy$$

donde λ es un parámetro que cuantifica el error en la ecuación de movimiento de la imagen en relación al desvío de suavidad. Landa será pequeña si las muestras de las imágenes son buenas y con poco ruido. Si es grande el Flujo óptico será consistente con la ecuación restrictiva. Si no se conoce se debe setear en 1.

El flujo óptico se determina con esta expresión usando una aproximación iterativa.

$$$S_{(i,j)} = \frac{1}{4}\left[{(u_{(i+1,j)}-u_{(i,j)})^2 + (u_{(i,j+1)}-u_{(i,j)})^2 + (v_{(i+1,j)}-v_{(i,j)})^2 + (v_{(i,j+1)}-v_{(i,j)})^2} \right]$$

$$$C_{(i,j)} = (E_{x} u_{(i,j)} + E_{y} v_{(i,j)} + E_{t})^2$$

Se desea tener una un conjunto de valores ui,j y vi,j que minimicen

$$$E = \sum \sum (S_{(i,j)} + \lambda C_{(i,j)})$$

Derivando con respecto a

$$$u_{kl} y v_{kl}$$

, igualando a cero obtenemos

$$$u_{k,l}^{n+1} = u_{k,l}^{n}- \frac{E_{x}u_{k,l}^{n}E_{y}v_{k,l}^{n}+ E_{t}}{1+\lambda(E_{x}^2 + E_{y}^2)}E_{x}$$

$$$v_{k,l}^{n+1} = v_{k,l}^{n}- \frac{E_{x}u_{k,l}^{n}E_{y}v_{k,l}^{n}+ E_{t}}{1+\lambda(E_{x}^2 + E_{y}^2)}E_{x}$$

En otras palabras, el nuevo valor de (u,v) en un punto es igual a la media de los valores que lo rodean menos un valor de ajustes en dirección del gradiente de la luminosidad, Esta aproximación presenta dos problemas principales, siendo el primero de ellos el que la restricción del cambio en la luminosidad sólo está bien determinada en partes de la imagen con gradientes altos y esos resultados deben ser expandidos a aquellas regiones con bajo gradiente, con el objetivo de obtener estimaciones de flujo en todas las posiciones de la imagen. El otro problema es que el flujo óptico será suavizado a través de las discontinuidades en el mismo, lo que resultaran estimaciones imprecisas. Estos problemas son inherentes a que, para que se cumpla la condición de menos en partes de la imagen), proyección ortográfica y movimiento traslación puro, paralelo al plano de imagen, lo que no constituyen condiciones aplicables en la realidad.

Para obtener condiciones mas favorables se modifico la ecuación de restricción a

$$$E_{x}u + E_{y}v + Eu_{x} + Ev_{y} = -E_{t}$$

En cada Iteración el algoritmo

  1. Reemplaza cada valor de flujo con la media de él mismo y sus vecinos; (Eso es justamente como suavizar una imagen usando medias locales, excepto que existen dos componentes y hay que suavizar ambas.)
  2. Cambia la componente de cada vector de flujo, a lo largo del gradiente del nivel de gris, para acercarle a la relación de los gradientes espacio-temporales.

Esta aproximación iterativa para la adaptación a restricciones, pertenece a la clase de algoritmos conocidos como “de relajación”.

Implementación del algoritmo en la libreria OpenCV

void cvCalcOpticalFlowHS( const CvArr* imgA, const CvArr* imgB, int usePrevious, CvArr* velx, | CvArr* vely, double lambda, CvTermCriteria criteria );

ImgA - Primera imagen, 8-bit, single-channel.

ImgB - Segunda imagen, 8-bit, single-channel.

Int - El parámetro usePrevious dice el algoritmo que utilize a velx y vely alculado a partir de un proceso anterior como punto de partida inicial para el cálculo de las velocidades nuevamente.

velx - Componente horizontal del flujo óptico del mismo tamaño que la imagen de entrada, 32-bit punto flotante, single-channel.

Vely - Componente vertical del flujo óptico del mismo tamaño que la imagen de entrada, 32-bit punto flotante, single-channel.

Lambda – Multiplicador de Lagrange

criteria - criterio de la terminación para los procesos iterativo

None: Vision/OpticFlowReview (última edición 2010-08-28 18:19:37 efectuada por TiN)