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.