En realidad, esto podría funcionar mejor usando un modelo generativo simple en RGB en lugar de HSV.
- Obtenga una imagen de entrenamiento o varias imágenes de entrenamiento con algo de piel.
- Seleccione manualmente los píxeles de la máscara (por ejemplo, creando una máscara binaria)
- Calcule la media y la covarianza del tono de piel en RGB (cada uno debe ser vectores de 3 elementos)
- Para un píxel desconocido, calcule su distancia de Mahalanobis desde la media, usando la covarianza.
- Clasifíquelo como máscara si la distancia es menor que un umbral.
- Ajuste el umbral para obtener el mejor rendimiento.
Editar:
No sé si OpenCV tiene una función para calcular la covarianza, pero puedo decirte cómo hacerlo tú mismo. Digamos que tienes píxeles RGB. Se los pone en un n x 3 matriz, llamémosle P . Luego calcule m , que es el vector RGB medio calculando el promedio de las columnas. m será un vector 1 x 3. Restar m de cada fila de P y llamar a la matriz resultante Q . Ahora a la covarianza de computación, todo lo que tiene que hacer es multiplicar Q por la transpuesta de sí mismo: C = Q ' Q . Asegúrese de que CnortenortePAGmetrometrometroPAGQQC= Q′QC es 3 x 3.
Edit2:
los valores que está obteniendo parecen ser demasiado grandes. Para obtener la covarianza máxima, cree la siguiente matriz:
255 255 255
0 0 0
y calcular la covarianza de eso. Debería obtener una matriz donde cada valor sea aproximadamente 32513. Por lo tanto, asegúrese de que sus valores de píxeles oscilan entre 0 y 255, y asegúrese de copiarlos en flotantes o dobles correctamente. La distancia de Mahalanobis está en las unidades de varianza, por lo que los números deben ser pequeños. Su umbral para la clasificación de la piel probablemente debería ser inferior a 4.