lunes, 7 de agosto de 2017

Modulo 6



Module 6.1
Blemish Removal
Table of Contents
Overview
Blemish Removal
Spatial Domain Analysis
Frequency Domain Analysis
Code and Tutorial - Blemish Removal
References and Further Reading

En este modulo, tratamos de remover imperfecciones de la piel en un proceso de dos etapas:
1.- Encontrar un parche de imagen para reemplazar la región imperfecta. Los parches con mayor potencial están en el vecindario de la imperfección porque la iluminación y la textura en esta región es más probable que sean consistentes con la región de la imperfección.
2.- Aplicar “Seamless Cloning” para mezclar el parche sobre la región imperfecta.
Para hacer un análisis en el dominio espacial usamos Sobel, cuanta más rudeza, mas contraste en la imagen del gradiente y también el valor medio de los gradientes es mayor.
Para hacer un análisis en el dominio de la frecuencia, usamos la transformada de Fourier para analizar el contenido de frecuencias en la imagen.


Module 6.2
Skin Detection
Table of Contents
Overview
Distribution of skin pixels in various color spaces
Observations
Rule based Skin Detection
The rules
Code and Tutorial for Rule based skin detection
Threshold based Skin detection
Step 1 : Extract a patch for reference
Step 2 : Extract all pixels similar to the reference color
Step 3 : Apply mask to remove non-skin parts
Code and Tutorial - Threshold based skin detection
References and Further Reading
En este modulo, se aprende sobre la detección de la piel en imágenes y videos. Esto tiene muchas aplicaciones.
Las dificultades vienen de que:
.- Las caracteristicas de color se ven afectadas por las diferentes condiciones de iluminación y el mismo color puede aparecer diferente.
.- Ingente variación entre el color de la piel
.- Fondos de imagen que parecen piel humana
Se muestran gráficos que representan la frecuencia de combinaciones de canales de color para pixeles de piel y no piel, de lo cual se observa:
.- Los espacios de color YCrCb y Lab nos dan una representación más compacta de los pixeles de la piel que el espacio de color BGR.
.- En todos los espacios de color, hay solapamiento entre las regiones de piel y no-piel, lo que hace irresoluble el problema considerando exclusivamente las características de color.
.- El espacio de color HSV es favorecido,  si solo se considera el parámetro de color del canal H que tiene información acerca del color verdadero del pixel.
Hay un sistema basado en reglas obtenidas de diferentes estudios que dan muy buenos resultados, aunque también muchos falsos positivos.
Las reglas:
Un pixel (R,G,B) es clasificado como “piel” si se cumplen todas las reglas siguientes:
1. R > 95
2. G > 40
3. B > 20
4. R > G
5. R > B
6. | R - G | > 15
7. max{ R, G, B } - min{ R, G, B } > 15
Para mejorar el método anterior de las “reglas”, derivaremos el rango de valores creando una máscara a partir de la imagen misma, extrayendo la cara.
Paso 1: Extraer un parche para referencia. Usamos Dlib y podemos extraer una pequeña región de la cara, de la cual estamos completamente seguros que es una región de piel pura. A partir de este parche, encontramos la media de los pixeles de esa región y lo mantenemos como el color de referencia.
Paso 2: Extraemos todos los pixeles similares al color de referencia. Después aplicamos “opening” para llenar los huecos del resultado inicial.
Paso 3: Aplicar una máscara para remover las partes que no sean piel. Desde que tenemos los puntos Dlib, podemos remover las partes como ojos, boca, cejas de la región de piel detectada.


Module 6.3
Skin Detection
Gaussian Bayes Classifier
Table of Contents
Overview
Bayes Classification
What is Bayes Theorem?
Skin Detection using Gaussian Bayes Classifier
Gaussian Bayes Classifier
How to fit a Gaussian to multidimensional data?
Training
Prediction
Code and Tutorial for Skin Detection using NormalBayesClassifier
References and Further Reading
En este modulo, se presenta el Clasificador de Bayes Gaussiano como clasificador binario de pixeles de piel.
La regla de Bayes para probabilidad condicional es: P(Y|X)=P(X|Y)* P(Y)/P(X)
OpenCV tiene las funciones que hacen esto a partir de una base de datos de entrenamiento etiquetadas:
C++
Ptr<TrainData> trainData = TrainData::create(X, ROW_SAMPLE, Mat(Y));
Ptr<NormalBayesClassifier> nbc =
StatModel::train<NormalBayesClassifier>(trainData);


Module 6.4
Facial Skin Detection &
Smoothing Using Grabcut
Table of Contents
Ninjas versus Samurais
What is GrabCut?
Step 1: Draw a rectangle
Step 2: Hinting
GrabCut in OpenCV
Skin Detection and Smoothing using GrabCut : Code & Tutorial
References and Further Reading

En este modulo, se explica el método de segmentación interactiva. Es usado para separar una imagen en frente y fondo. Para usarlo, empezamos delimitando una zona rectangular que contiene el elemento del frente y la función hace una segmentación aproximada. A partir de aquí vamos refinando la segmentación en iteraciones sucesivas,  indicándole a la función que determinados pixeles son:
1.- definitivamente frente
2.- definitivamente fondo
3.- probablemente frente
4.- probablemente fondo.
GrabCut esta implementado en OpenCV usando una función llamada grabCut.
C++ grabCut (Mat& img, Mat &mask, Rect rect, Mat& bgdModel, Mat& fgdModel,
int iterCount, int mode=GC_EVAL)
mask = mascara conteniendo cuatro valores posibles.
1. Definitely background ( GC_BGD )
2. Definitely foreground ( GC_FGD )
3. Probably background ( GC_PR_BGD )
4. Probably foreground ( GC_PR_FGD )
mode = Este parámetro controla el modo de inicializacion.
1. Use GC_INIT_WITH_RECT to initialize with a rectangle
2. Use GC_INIT_WITH_MASK to initialize with mask.
3. Use GC_INIT_WITH_RECT | GC_INIT_WITH_MASK to use both.
4. GC_EVAL to just resume. This is used for successive iterations in an
interactive setup.


Module 6.5
Grabcut Theory
Table of Contents
GrabCut Theory
Color Models for Background and Foreground
What is a Gaussian Mixture Model?
How are GMM parameters calculated in GrabCut?
Segmentation as Energy Minimization
Mincut for Energy Minimization
References and Further Reading

En este modulo, se trata de la teoria de “GrabCut”
Tenemos como entrada:
a.- Una imagen de entrada
b.- Una caja o rectángulo envolvente alrededor del objeto de interés. Los pixeles fuera de la caja son definitivamente “fondo”. Los puntos dentro de la caja pueden ser fondo o frente, pero se supone que la mayoría de ellos son frente. Por ello es deseable usar un rectángulo envolvente muy ajustado.
c.- Pistas: Cuales pixeles son “fondo”, “frente”, “probablemente fondo” y “probablemente frente”.
Una salida
a.- Una máscara alpha que es 1 (o 255) en los pixeles del frente y 0 en los pixeles del fondo.
El primer paso en GrabCut es construir un “modelo de color” para el “fondo” y para el “frente”. Estos modelos de color son actualizados cuando la máscara cambia.
Un “modelo de color” es una función que toma un valor RGB y devuelve una probabilidad, (un numero entre 0 y 1) de que el color pertenezca a ese “modelo de color”.
Así, tendremos un modelo de color para el frente (F) y un modelo de color para el fondo (B), si queremos evaluar un pixel c, tendremos:
Probabilidad de que el pixel este en el frente =F(c);
Probabilidad de que el pixel este en el fondo =B(c);
Si F(c) > B(c), el pixel pertenece al frente.
En la realidad, si un pixel pertenece al frente o al fondo depende de su color y además de su localización y de sus vecinos.
En GrabCut, los modelos de color de frente y fondo son modelados usando Modelos de Mezcla de Gaussianos (GMM).
Un modelo de mezcla de Gaussianos, permite aproximar un histograma de una imagen con la suma ponderada de varias distribuciones de Gauss con diferente media y desviación típica. En GrabCut se usa K=5, es decir 5 funciones de Gauss diferentes.
En OpenCV se usa un algoritmo llamado K-Means para encontrar esos parámetros.
GrabCut es planteado como un problema de minimización de energía. Hay dos términos en la función de costo de GrabCut.
1.- Data term: Los valores de la salida alpha, deberían ser asignados así que los pixeles que son etiquetados como frente tienen colores que son mejor explicados por la GMM del frente que la GMM del fondo.
2.- Smoothness term: La asignación de los valores de salida alpha deberían también tomar en consideración  el hecho de que si los vecinos de un pixel son predominantemente de una etiqueta en particular (frente o fondo), al pixel le debería ser asignada la misma etiqueta con mayor probabilidad. Dicho de otra forma, la máscara alpha debería ser suave con grandes regiones de frente o fondo. Este término asegura que no veremos pequeños huecos en nuestra segmentación final.
Mincut para minimización de energía

No hay comentarios:

Publicar un comentario