DETECTOR DE PRESENCIA HUMANA

Para realizar la detección de presencia humana, previamente necesitamos construir un clasificador de pixeles de piel/no piel. Para realizar este clasificador se utiliza la aproximación descrita en [Jones&Rehg 2002].

El clasificador se construye mediante aprendizaje supervisado y, para ello, se necesita una base de imágenes en donde, para cada imagen, se ha etiquetado manualmente todos los pixeles que son de piel (concretamente se ha utilizado la base de imágenes descrita en [Jones&Rehg 2002]).

Cogiendo el atributo más simple que puede caracterizar a una imagen, el color de un píxel, podemos construir un modelo de color estadístico. Dicho modelo se basa en modelos de histograma de color,  para la construcción del cual debemos abordar dos cuestiones: la elección del espacio de color y el tamaño del histograma. El espacio de color elegido es el RGB, que es el estándar en las imágenes JPG y  que existe un gran volumen de imágenes de este tipo en Internet. Respecto al tamaño del histograma,  la representación natural del color son 24 bits, 8 bits por cada componente de color, lo que equivale a dividir cada canal de color en 256 intervalos. Se puede dividir cada canal de color en un número de intervalos más pequeño. De forma genérica,  se hablara de resolución del histograma, en función del número final de intervalos elegidos.

En el modelo de color general el escrutinio del histograma es convertido en una distribución de probabilidad discreta mediante:

           (1)

Donde  c[rgb] es el contador del número de pixeles que tienen el valor “rgb” en  cada uno de los intervalos en que se divide el histograma y Tc es el total obtenido sumando todos los contadores de todos los intervalos del histograma.

Figura 2: Modelo general de color (Distribución Marginal). Fuente [Jones&Rehg 2002]

 

Al estudiar la figura 2 que nos muestra la distribución marginal del modelo general de color se aprecian 3 propiedades.

1.      La mayoría de los colores caen sobre o cerca de la línea de color gris (une el negro y el blanco).

2.      El blanco y el negro son con mucho los colores mas frecuentes, y el blanco es el que ocurre con más frecuencia.

3.      Existe una marcada asimetría en la distribución hacia la esquina de color rojo.

Partiendo del modelo general, se procede a su especialización, construyendo los modelos de color de piel y no piel, que se construyen igual que el general excepto que ahora solo utilizaremos las imágenes que contengan piel para construir el histograma de piel y las imágenes que no contengan piel para construir el histograma de no piel.

La probabilidad condicionada de obtener un píxel con valor “rgb” sabiendo que dicho píxel pertenece a piel o a no-piel es, respectivamente:

            (2)

Donde s[rgb] es la cantidad de píxeles, contenida en cada uno de los intervalos RGB del histograma de piel, n[rgb] es el equivalente de esta cantidad en el histograma de no piel, y Ts y Tn son la cantidad total contenida en los histogramas de piel y no piel respectivamente.

Los valores de s[rgb] y n[rgb] están almacenados en sus histogramas respectivos, que se generan con el siguiente pseudocódigo:

Histograma de piel

Histograma de no piel

 

HistogPiel[R,G,B]=0, para " R,G,B

 

Para  Img=1 hasta Numero_img_piel

    Lee NumCol y NumFilas de la Img actual

    Para  Fila=1 hasta  NumFilas

        Para Col=1 hasta NumCol

           Si (Fila y Col indican piel real)

- guardo los valores de color del píxel en concreto como indices.

               [R,G,B]=Img (Fila, Col);

                      HistogPiel[R,G,B] = HistogPiel [R,G,B]+1;

           Fin si

        Fin para

    Fin para

Fin para

 

HistogNoPiel[R,G,B]=0, para " R,G,B

 

Para  Img=1 hasta Numero_img_No_piel

    Lee NumCol y NumFilas de la Img actual

    Para  Fila=1 hasta  NumFilas

        Para Col=1 hasta NumCol

- guardo los valores de color del píxel en concreto como indices.

            [R,G,B]=Img (Fila, Col);

            HistogNoPiel[R,G,B]=

                    HistogNoPiel[R,G,B]+1;

        Fin para

    Fin para

Fin para

 

 

La figura 3 y 4, muestran la distribución marginal de los modelos de color de piel y no piel respectivamente. Al estudiar estos modelos de color de piel y no piel se observa un significativo grado de separación entre ambos modelos, como podemos ver también en las figuras 3 y 4. El modelo de no piel la masa de probabilidad se concentra a lo largo del eje de color gris (une el negro y el blanco), mientras que la mayoría de la masa de probabilidad en el modelo de piel se encuentra fuera de este eje. Esta separación entre las dos clases es la base para el buen funcionamiento del clasificador de piel.

 

Figura 3: Modelo de color de piel (Distribución Marginal). Fuente [Jones&Rehg 2002]

 

Figura 4: Modelo de color de no piel (Distribución Marginal). Fuente [Jones&Rehg 2002]

 

Tal y como dijimos anteriormente las fórmulas (2) denotan la probabilidad de encontrar un píxel de valor “rgb”, sabiendo que dicho píxel pertenece a la clase piel y no piel, respectivamente. Ahora bien, lo que a nosotros nos interesa realmente es conocer las probabilidades inversas: P[skin/rgb] y P[no skin/rgb], es decir, conocer la probabilidad condicionada de que un píxel sea piel o no piel, conocido su valor “rgb”. Partiendo de los histogramas de probabilidades de los modelos  de color de piel y no piel  se construye el clasificador de píxel de piel mediante el cálculo de P[skin/rgb]. Para ello, utilizamos el teorema de Bayes:

     (3)

Y, finalmente, un valor “rgb” es etiquetado como piel si:

                                          P(skin|rgb) >= Θ                                                                      (4)

Donde  [0 =< Θ =< 1] es un umbral elegido adecuadamente.

P(skin) + P(¬skin) = 1, y una opción razonable para P(skin)  = Ts  / (Ts + Tn)

Mediante el uso de curvas ROC se puede mostrar la relación entre la correcta detección y las falsas detecciones en función del umbral de detección. Se puede demostrar (ver [Jones&Regh 2002]) que la curva ROC es invariante a la elección del valor de P(skin), por lo que no es relevante su valor. La figura 5, muestra las curvas ROC obtenidas por [Jones&Regh 2002] para varios tamaños de resolución de histograma. El programa utilizado en este proyecto para generar las distintas curvas ROC se basa en el siguiente pseudocódigo.

falsosPositivos = 0

Para Umbral=0 hasta 1

                Para todos los valores RGB

                               Si (P(skin|rgb)>=Umbral)

                                               verdaderosPositivos = verdaderosPositivos + s’[rgb]

                                               falsosPositivos = falsosPositivos + n’[rgb]

                               Fin Si

                Fin Para

                verdaderosPositivos  = verdaderosPositivos  / Total de pixeles de Piel en las Imagenes

                falsosPositivos = falsosPositivos / Total de pixeles de NO Piel en las Imágenes

                Dibujar los puntos de falsosPositivos  frente a verdaderosPositivos

Fin Para

 

     

Figura 5: curvas ROC . Fuente [Jones&Rehg 2002]

 

Para la construcción del clasificador de piel partimos de la ecuación (3):

Y tomamos:

P(skin)  = Ts  / (Ts + Tn)

P(¬skin) = 1 - P(skin)

P(rgb|skin) = s[rgb]/Ts

P(rgb|¬skin) = n[rgb]/Tn

Obteniendo:

Por tanto para la clasificación de píxel de piel buscaremos:

Siendo                                    = SPM[rgb]

SPM[rgb] es el Mapa de Probabilidad de Piel “Skin probability Map” (SPM), y almacena la probabilidad de que un píxel de la imagen con valor “rgb” sea un píxel de piel. Por tanto, solo necesitaremos:

SPM[rgb] >= Θ

Para decidir si un píxel es etiquetado como piel o no.

El SPM se genera con el siguiente pseudocódigo:

/*CALCULA P(RGB|piel) y P(RGB)

P_RGB_PIEL(R,G,B)=0 "R,G,BÎ[0, 255]

P_RGB(R,G,B)=0 "R,G,BÎ[0, 255]

Para  IMG(x,y)=1 hasta n /*Siendo n el número de imágenes en la BD

                Para y=1 hasta pi

                               Para  x=1 hasta qi /* Siendo pi , qi las dimensiones de la IMG i-ésima

                               Si (x,y)ÎPiel Entonces

                                               P_RGB_PIEL(R,G,B) = P_RGB_PIEL(R,G,B)+1

                               Fin Si

                               P_RGB(R,G,B)= P_RGB(R,G,B)+1

                               Fin Para

                Fin Para

Fin Para

 /*NORMALIZA

Cte_Norm_RGB_PIEL =0;

Cte_Norm_RGB=0;

Para R=0 hasta 255

                Para G=0 hasta 255             

                               Para B=0 hasta 255

                               Cte_Norm_RGB_PIEL = Cte_Norm_RGB_PIEL + P_RGB_PIEL(R,G,B)

                               Cte_Norm_RGB = Cte_Norm_RGB + P_RGB(R,G,B)

                               Fin Para

                Fin Para

Fin Para

 Para R=0 hasta 255

                Para G=0 hasta 255             

                               Para B=0 hasta 255

                                       P_RGB_PIEL(R,G,B) = P_RGB_PIEL(R,G,B)/Cte_Norm_RGB_PIEL

                                       P_RGB(R,G,B) = P_RGB(R,G,B)/Cte_Norm_RGB

                               Fin Para

                Fin Para

Fin Para

 /*CALCULA Skin Probability Map (SPM)

Para R=0 hasta 255

                Para G=0 hasta 255             

                               Para B=0 hasta 255

                               SPM(R,G,B) = P_RGB_PIEL(R,G,B)/ P_RGB(R,G,B);

                               Fin Para

                Fin Para

Fin Para

La ejecución del clasificador de píxel de piel depende totalmente de la cantidad de superposición entre las muestras de piel y no piel. Los colores que se produzcan en las dos clases con el mismo nivel de frecuencia no se podrán clasificar fiablemente.

Experimentalmente se ha observado que el clasificador de píxel de piel tiende a fallar, si la piel esta muy saturada o sombreada, no marcándola como piel, y si algún objeto tiene un color parecido a la piel, entonces lo marcara como piel, sin serlo.

Cabe señalar que el histograma de resolución 32 dio el mejor rendimiento, superior a la resolución 256 con una mayor tasa de falsas detecciones. Además de la resolución del histograma, el rendimiento del clasificador también se ve afectado por la cantidad de datos empleados en la construcción del histograma, una disminución de los datos conduce a la disminución del rendimiento.

Si observamos la curva ROC de la figura 5 podemos observar que si modificamos el umbral para obtener una mayor cantidad de verdaderos positivos (VP), el numero de falsos positivos (FP) también aumenta. Es decir, en función del valor de umbral, podemos obtener un alto porcentaje de clasificación de verdaderos positivos, pero con el inconveniente de que también puede aumentar el de falsos positivos, por tanto, en función de las necesidades de la aplicación, sera necesario sintonizar adecuadamente el valor de dicho umbral.

La salida del clasificador de piel la empleamos para alimentar el detector de presencia humana propiamente dicho, el cual determina si hay humanos o no en cada uno de los fotogramas de la secuencia. Los datos que nos proporciona el clasificador de piel son:

cantidadPiel = Es el numero total de pixeles que el clasificador de piel a marcado como piel en un fotograma en concreto.

porcentajeSegmentacion = cantidadPiel dividido entre el numero total de pixeles segmentados (con movimiento) del fotograma que estamos procesando.

porcentajeTotal = cantidadPiel dividido entre el numero total de pixeles del fotograma que estamos procesando.

 

Figura 6: Diagrama de flujo del Detector de presencia humana

 

La figura 6 muestra el diagrama de flujo del funcionamiento del detector de presencia humana. La variable cantidadPiel se emplea para eliminar un posible ruido producido, bien por el clasificador de piel o bien por la segmentación, y su valor es función del tamaño de las personas que aparecen en la escena.

Los otros dos parámetros se han planteado para eliminar los objetos y animales en movimiento con un color parecido a la piel humana. Se parte del supuesto de que los objetos y animales tendrán su superficie casi siempre del mismo color, lo que determina un valor de porcentajeSegmentacion alto, cosa que no ocurre con las personas, que normalmente van vestidos. Esta diferencia nos permite poner una cota superior y eliminar animales y objetos de este tipo de los fotogramas. El porcentajeTotal se emplearía igual, relacionándolo con el tamaño total de la imagen.