domingo, 17 de febrero de 2013

Implementación Codebook Model





1-      Estructuras de datos

En primer lugar crearemos la estructura del codebook:




Existira un codebook por pixel, con tantas entradas o codewords como indiquemos en numEntries. La variable t almacena el numero de pixeles procesados desde el inicio o desde la ultima operación de borrado.

La estructura para almacenar el codeword sería la siguiente:



Como podemos observar, el uso de memoría es muy optimizado ya que estaríamos consumiendo 4 bytes por canal y dos enteros por codeword . El número de canales podría ser 1, si solo modelaramos el canal del brillo (Y), o 3, para los 3 canales YUV, como es nuestro caso.

Max y min serían las fronteras de la “caja” y los parámetros learnHigh y learnLow los umbrales que podrían causar una generación de un nuevo codeword (si un pixel no se encontrara entre los límites de min – learnLow y max + learnHigh de cada uno de los
canales )

Los parámetros t_last_update y stale se utilizaran para poder eliminar codewords creados en la fase de entrenamiento y que sean utilizados con poca frecuencia. Stale coincidiría con el valor MNRL del modelo.

      2- Lógica del proceso

Los métodos utilizados para codificar el comportamiento del método serían :




El método update_codebook() se invocará para cada pixel de la imagen durante el periodo de entrenamiento, para formar el modelo de fondo adecuado . Esta función genera los codewords necesarios o va aumentando/disminuyendo las fronteras de cada uno de ellos. Por otro lado, va actualizando los valores de t_last_update cada vez que el codeword sea accedido, y de stale, con la cantidad de tiempo durante la que el codeword no ha sido accedido.

 Esta información se usará mas tarde para eliminar codewords despreciables, a través del método clear_stale_entries().

La sustracción de fondo la procesaremos utilizando la función background_diff(), donde utilizaremos el modelo de fondo aprendido, para discernir si el valor de un pixel corresponde al foreground o el background. Para ello, además de los valores min,max de los límites de un codeword, utilizaremos los valores maxMod y minMod representaran un umbral a modo de offset, que nos permitirán decidir.

En resumen, los pasos para aplicar esta técnica serían:

1-      Aprender el modelo de fondo durante un tiempo utilizando update_codebook().
2-      Limpiar entradas residuales via clear_stale_entries().
3-      Adaptar los valores de umbral maxMod y minMod para una segmentación optimizada de los objetos del foreground.
4-      Realizar la sustracción de fondo a través de background_diff().
5-      Periodicamente actualizar el modelo de fondo.
6-      Con menos frecuencia, limpiar los codewords residuales con clear_stale_entries().


No hay comentarios:

Publicar un comentario