sábado, 26 de junio de 2010

Implementación

1 - Estructuras de datos

- La estructura de la gaussiana en este caso, estará compuesta de una media para cada uno de los canales RGB, de una varianza común para los tres canales, de un peso asociado a esa gaussiana y de un factor de “importancia” para esa gaussiana (calculado como el peso entre la desviación estandar). El hecho de que exista una varianza común, se debe a una propuesta del documento de Stauffer & Grimson, para reducir el coste excesivo de la matriz, con la penalización de perder un poco de precisión.




- La estructura para almacenar las gaussianas del modelo, consistirá en una estructura de array con dimensión [alto X ancho X numeroGuassuinasMaximo] de estructuras del tipo comentado anteriormente.

arrayGaussianas = new Gaussiana[tamanio*numGaussianas]

- Para conocer el número de gaussianas por pixel en cada momento, construiremos una matriz gaussinasPorPixel donde almacenaremos en cada momento ese dato.

- En este caso se avitará la fase de entrenamiento. Para conseguirlo, las gaussianas iniciales se generarán con unos valores de media equivalentes a los valores que toma cada canal de ese pixel , una varianza inicial igual a un valor experimental elegido por nosotros y un peso igual a 1 (en el caso de ser la primera gaussiana generada). Estos valores se irán refinando con las posteriores actualizaciones.

2- Algoritmo de procesado

2.1. - En primer lugar, calcularemos, de las gaussianas que hay asociadas al pixel, el número de ellas q van a modelar el background, en funcion de que la suma de los pesos sea menor que T . Teniendo en cuenta que las gaussianas van ordenadas de mayor a menos, en funcion del parametro orden (peso/desviacion estandar).



2.2.- Recorremos todas las gaussianas asociadas a ese pixel . Para cada una:

2.2.1. - Calculamos la distancia del valor del pixel a la media, para comprobar si el valor encaja con la gaussiana en funcion de si la distancia es menor que la varianza * umbral

2.2.2.- Si encaja y la gaussiana pertence a el grupo de gaussianas que modelan el fondo, actualizamos sus parametros de media , varianza, peso y orden para esa gaussiana, y para las demás, actualizaremos el peso y el orden, en función de las fórmulas vistas en el post anterior.

Después renormalizamos los pesos para que sumen 1, y ordenamos las gaussianas de ese pixel de mayor a menos en función del parámetro orden.

2.2.3.- Si no encajara a ninguna generamos una nueva con los valores de inicializacion y recalculamos pesos y orden para todas.

2.2.4. - En función a la gaussiana que haya encajado con ese valor de pixel, decidiremos si el pixel corresponde a Background o Foreground

- Si ha encajado con alguna de las B primeras gaussianas que modelan el fondo, decidimos Background

- Si ha encajado con alguna gaussiana existente que no modela el fondo, o si ha habido que generar una nueva gaussiana, decidiremos Foreground.

No hay comentarios:

Publicar un comentario