Detector De Piel
Enviado por j0ak0 • 30 de Octubre de 2013 • 651 Palabras (3 Páginas) • 561 Visitas
1 OBJETIVO
En esta tarea se nos pide implementar un detector de piel. Este se desarrollara utilizando C++ con OpenCV 2.4.6. Para lograr una mejor solución se trabajara con YCbCr.
2 DESARROLLO
La detección de piel es de utilidad para el reconocimiento de caras y personas. Esto se debe a que trabajar con los colores de una imagen es bastante más eficiente que el trabajar con los gradientes y otras características de la imagen. En la actualidad el formato comúnmente utilizado es el RGB, pero este es muy variable con la cantidad de luz lo que complica la identificación de piel, es por eso que utilizamos YCbCr, el cual proviene de la transmisión de televisión y en sus tres canales transmite: Luminiscencia (Y), Cromancia (Cb) y la diferencia entre los colores azul y rojo (Cr). Por lo que si eliminamos la luminiscencia obtenemos un método más robusto que uno en base a RGB.
La transformación de una imagen en RGB a YCbCr es la siguiente:
En nuestro caso esto no será necesario ya que en OpenCV existen funciones para transformar una imagen de RGB a YCbCr. La función requiere de una matriz de imagen de entrada y otra de salida, el código es el siguiente:
cv::cvtColor(input, skin, cv::COLOR_BGR2YCrCb);
donde input es la imagen de entrada y skin es la matriz de salida. Además podemos notar que OpenCV trabaja con BGR lo cual es lo mismo que RGB pero en un orden distinto.
Para identificar la piel de las personas en las imágenes debemos establecer el rango de YCbCr el cual es clasificado como piel, este rango fue extraído del paper “Explicit Image Detection using YCbCr Space Color Model as Skin Detection”, ( J. A. MARCIAL, G. AGUILAR, G. S. PÉREZ, L. K. TOSCANO, H. M. PÉREZ)
Y > 80
85 < Cb <135
135 < Cr < 180
El código se encuentra en el anexo con comentarios.
3 RESULTADOS
Luego de probar distintos umbrales se llegó al siguiente:
Y_MIN = 150;
Y_MAX = 255;
Cr_MIN = 140;
Cr_MAX = 160;
Cb_MIN = 73;
Cb_MAX = 125;
Estos se fueron probando en la siguiente imagen:
Figura 1: Imagen people-07.jpg utilizada para seleccionar el umbral.
El resultado final con esta imagen es el siguiente:
Figura 2: Imagen resultante luego de aplicar el detector de piel a la Figura 1.
Se puede ver un resultado bastante bueno, pero esta imagen se utilizó para calibrar los rangos del clasificador, por lo que los resultados deberían variar según la imagen procesada.
Utilizando la base de datos estudiamos el comportamiento de nuestro método:
Original Base de datos Mi resultado
Original Base de datos Mi resultado
...