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.
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