ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Detector De Piel


Enviado por   •  30 de Octubre de 2013  •  651 Palabras (3 Páginas)  •  550 Visitas

Página 1 de 3

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

Original Base de datos Mi resultado

Como se puede observar si bien no se obtiene el mismo resultado hay casos en que se obtiene un resultado bastante bueno sin falsos positivos. Pero existen además los casos en que no se identifica bien la piel, esto se debe a que la cota de admitancia de cada foto depende de muchos factores, como la luz y el color de piel de las personas en las fotos.

4 ANEXO: CÓDIGO

#pragma once

#include<opencv\cv.h>

...

Descargar como (para miembros actualizados)  txt (4.5 Kb)  
Leer 2 páginas más »
Disponible sólo en Clubensayos.com