¿Has echado un vistazo al papel de camilla de Gary Bradski? Puede descargarlo desde here
Utilicé el algoritmo de detección de piel hace un año para detectar regiones de piel para el seguimiento manual y es robusto. Depende de como lo uses.
El primer problema con el uso del color para el seguimiento es que no es robusto para las variaciones de iluminación o como usted mencionó, cuando las personas tienen diferentes tonos de piel. Sin embargo, esto se puede resolver fácilmente como se menciona en el documento por:
- Convierta la imagen al espacio de color HSV.
- Deseche el canal V y considere el canal H y S y, por lo tanto, de descuento para las variaciones de iluminación.
- Píxeles de umbral con baja saturación debido a su inestabilidad.
- Ubique la región de la piel seleccionada en un histograma 2D. (Función calcHist de OpenCV ) Este histograma ahora actúa como modelo para la máscara.
- Calcule la "retroproyección" (es decir, utilice el histograma para calcular la "probabilidad" de que cada píxel de su imagen tenga el color del tono de la piel) usando calcBackProject. Las regiones Skin tendrán valores altos.
- Puede usar meanShift para buscar el modo del mapa 2D " " de probabilidad generado por backproject o para detectar blobs de alta "probabilidad".
Al tirar el canal V en HSV y considerar únicamente los canales H y S es realmente suficiente (sorprendentemente) para detectar diferentes tonos de piel y bajo diferentes variaciones de iluminación. Un lado positivo es que su cálculo es rápido.
Estos pasos y el código correspondiente se pueden encontrar en el original OpenCV book.
Como nota al margen, también he usado Modelos de mezclas gaussianas (GMM) anteriormente. Si solo estás considerando el color, entonces diría que usar histogramas o GMM no hace mucha diferencia. De hecho, el histograma tendrá un mejor rendimiento (si su GMM no está construido para tener en cuenta las variaciones de iluminación, etc.). GMM es bueno si tus vectores de muestra son más sofisticados (es decir, consideras otras características) pero el histograma de velocidad es mucho más rápido porque calcular el mapa de probabilidad usando histograma es esencialmente una búsqueda de tabla mientras que GMM requiere realizar un cálculo matricial (para vector con dimensión> 1 en la fórmula para distribución gaussiana multidimensional) que puede consumir mucho tiempo para aplicaciones en tiempo real.
Por lo tanto, en conclusión, si solo está tratando de detectar las regiones de la piel usando color, entonces vaya con el método de histograma. También puede adaptarlo para considerar el gradiente local (es decir, histograma de gradientes pero posiblemente no alcance la extensión total del algoritmo de detección humana de Dalal y Trigg) para diferenciar entre piel y regiones con colores similares (por ejemplo, muebles de cartón o madera) usando la información de textura local. Pero eso requeriría más esfuerzo.
Para el código fuente de ejemplo sobre cómo usar el histograma para la detección de la piel, se puede echar un vistazo a OpenCV "s página here. Pero tenga en cuenta que se menciona en esa página web que sólo utilizan el canal de tonalidad y que el uso de ambos el tono y la saturación darían un mejor resultado.
Para un enfoque más sofisticado, puede echar un vistazo al trabajo sobre "Detección de personas desnudas" por Margaret Fleck y David Forsyth. Este fue uno de los trabajos anteriores sobre detección de regiones cutáneas que considera tanto el color como la textura. Los detalles se pueden encontrar here.
Un gran recurso para el código fuente relacionado con la visión por computadora y yo El procesamiento de mage, que incluye el código para el seguimiento visual, se puede encontrar en here. Y no, no es OpenCV.
Espero que esto ayude.
gracias por su respuesta detallada. No sé si implementaré el método exactamente, pero es de gran ayuda, ya que también explica algunos detalles como ignorar el canal v, lo que estoy haciendo actualmente pero sin comprender realmente por qué – Nicolas
agregué un enlace a un sitio que tiene muchos códigos fuente de CV y aplicaciones de procesamiento de imágenes, incluido el seguimiento visual, que creo que puede resultar útil, ya que creo que la detección de la piel podría ser solo un posible enfoque. Puede valer la pena mirar a los demás. – lightalchemist
Actualización del enlace para detectar personas desnudas - http://mfleck.cs.illinois.edu/naked.html – saurabheights