Module 4.1 Alpha
Blending
Table of Contents
Alpha Blending
Alpha Blending in OpenCV
Efficient Alpha Blending using
OpenCV (C++)
Runtime
Comparison
En este módulo, se explica que
el canal alpha, es el cuarto canal de algunas imágenes, y que se puede usar para
mezclar dos imágenes para insertar un motivo frontal sobre un fondo, usando la
formula 

donde
F es el Frente (“Foreground”) y B es el “Background” Fondo, y alpha es el valor
del canal alpha, cuyo valor al dividirlo por 255, se encuentra en el siguiente
rango:
Alpha = 1, significa que obtenemos el pixel
del frente, cuando alpha = 0 obtenemos el pixel del fondo, con los valores de
alpha intermedios obtenemos una mezcla ponderada del frente y el fondo.
También se presenta un
programa de exploración más rápido para hacer la mezcla, lo que representa un
ahorro de tiempo de cómputo en imágenes muy grandes.
Module 4.2 Warping a Triangle
Table of Contents
Linear vs Nonlinear Image Warping
Linear Transform ( a.k.a Affine Transform )
Warp
a Triangle
Warp
Triangle Code & Tutorial
En este módulo, se describen
las diferencias entre las transformaciones lineales y las no-lineales, Se
explica cómo transformar un triangulo. Este procedimiento se usara con bastante
profusión en los módulos siguientes pues se suele dividir la imagen en
triángulos y se transforman uno a uno. Básicamente es lo siguiente:
Se carga una imagen y se la
convierte a CV_32FC3 en el rango (0,1) y se conocen las coordenadas de los
triángulos de origen y transformado. Se pasan estos datos a la función
warpTriangle, en la cual se hallan los rectángulos envolventes de los
triángulos y la posición de sus vértices en referencia a la esquina superior
izquierda de los rectángulos (origen) en el formato “Point”, Se halla y se
aplica la transformación afín. Como estamos interesados en los puntos
interiores del triangulo, creamos una máscara triangular de puntos blancos
sobre una imagen de puntos negros. Multiplicamos la imagen con la máscara para
hacer “Alpha blending”.
Module 4.3 Delaunay Triangulation and Voronoi Diagrams
Table of Content
Delaunay Triangulation and Voronoi Diagram
What is Delaunay Triangulation?
What is a Voronoi Diagram ?
Delaunay
Triangulation Code & Tutorial
Delaunay
Triangulation Animation Code & Tutorial
References
and Further Reading
En este módulo, se explica
cómo dividir el plano en triángulos en cuyos vértices están por ejemplo los
puntos de referencia obtenidos de Dlib.
La triangulación Delaunay, se basa en que los círculos circunscritos de
los triángulos obtenidos no contienen vértices en su interior. Hay muchos
algoritmos para hallar la triangulación, el más simple es elegir un triangulo y
revisar si el circulo circunscrito carece de vértices internos, si falla se
quita un vértice y se incorpora otro. Hay una partición dual de Delaunay, que
se conoce como el diagrama de Voronoi que divide el espacio de forma que las
líneas limitantes son equidistantes de los puntos vecinos.
En OpenCV existe la clase “Subdiv2D” que calcula esta partición.
Se muestra el programa Delaunay.cpp que lo utiliza, al que se le da como
entrada una lista de coordenadas de puntos y devuelve un archivo con ternas de
los índices que forman cada triangulo.
El programa carga las
coordenadas de los puntos y halla su rectángulo envolvente, construye una instancia
de la clase Subdiv2D para ese rectángulo. Inserta los puntos en esa instancia.
Por último escribe los triángulos Delaunay en el archivo de salida.
Module 4.4 Face Averaging
Table of Contents
Face Averaging
History of Face Averaging
Attractiveness of Average Faces
Similarity Transform
How to create an average face using OpenCV ?
Step 1 : Facial Feature Detection
Step 2 : Coordinate Transformation
Step 3 : Face Alignment
Calculate Mean Face Points
Calculate Delaunay Triangulation
Warp Triangles
Step 4 : Face Averaging
Face Averaging Code and Tutorial
Some more examples on Face Averaging
Making
a Face Symmetric
References
and Further Reading
En este módulo, se propone un
método para hallar una imagen de una cara promedio a partir de un conjunto de
imágenes de caras. Lo primero que se plantea es normalizar las imágenes de los
rostros que se van a promediar de forma que coincidan algunos puntos de
referencia hallados mediante Dlib. Para ello:
1.- Detectar las
características faciales con Dlib.
2.- Transformamos las imágenes
de forma que los extremos de los ojos coincidan con los puntos (180,200),
(420,200) en una imagen de 600x600. (El tercer punto se escoge para que forme
un triangulo equilátero con los anteriores.
3.- usaremos los 68 puntos
para dividir las imágenes en regiones triangulares. Y alinear estas regiones
antes de promediar los valores de los pixeles. Calculamos la media de la
posición de cada punto de referencia de las caras. Calculamos una triangulación
Delaunay que nos permite descomponer la imagen en triángulos. Transformamos los
triángulos para que coincidan con la cara promedio.
Por último, se enseña cómo
hacer una imagen simétrica a partir de una imagen y su especular.
Module
4.5 Face Morphing
Table of Contents
Face Morphing
Face Morphing step by step
Step 1 : Find Point Correspondences using Facial
Landmark Detection
Step 2 : Coordinate Transformation
Step 3 : Delaunay Triangulation
Step 4 : Warping images and alpha blending
We are now in a position to intelligently blend
the two images. As mentioned before, the
amount of blending will be controlled by a
parameter .
Create a morph using the following steps.
Face Morphing Code & Tutorial
Face Morphing Challenges
References
and Further Reading
En este módulo, se enseña la
técnica de “Morphing” para cambiar una técnica o forma en otra sin saltos, está
muy emparentada al promedio de Caras. La mezcla de las imágenes está gobernada
por el parámetro alpha.
Para conseguir resultados
aceptables debemos encontrar la correspondencia entre los puntos de las dos
imágenes y pasar de una coordenada a otra también gobernada por alpha.
Los pasos a seguir:
- Encontrar los puntos correspondientes usando la Detección de los puntos de referencia.
- Normalizar las caras y llevarlas a la misma referencia, igual que el caso de promediar.
- Triangulación Delaunay.
- Transformar las imágenes y mezcla alpha.
Module 4.6 Blink and Drowsiness Detection
Table of Contents
Overview 2
Approach 2
Step 1 : Find the eye region using Dlib Facial
Landmark Detector 3
Step 2 : Find the area enclosed by the eyelids 3
Step 3 : Check the status of the eye (Open /
Closed) 4
Step 4 : Decision on blink and drowsiness using
a Finite State Machine 4
Blink Detection and Drowsy Driver Code and
Tutorial 6
References and Further Readings 19
En este módulo, se implementa
un programa para detectar los pestañeos (guiños) y el cierre de los ojos para
prevenir el adormilamiento al volante.
El método propuesto, usa la
biblioteca Dlib para encontrar la región del ojo, a partir de los puntos de
referencia obtenidos se calcula la superficie encerrada por las pestañas del
ojo. A partir de esta superficie se determina si el ojo está abierto o cerrado.
Para evitar una decisión prematura, se implementa una “Maquina de Estado
Finita” que determina si es pestañeo normal o adormilamiento.
Module
4.7 Bug Eyes
Table of Contents
Overview
Bug Eyes
Radial Distortion
Step 1 : Get the eye patch using DLib Facial
Landmark detection
Step 2 : Apply radial Distortion to the eye
patch
Step 3 : Interpolate the points using remap
function in OpenCV
Bug
Eyes Code and Tutorial
References
and Further reading
En este módulo, se aplica una
distorsión radial a los ojos. Para ello se usa un mapeado donde se alteran las
coordenadas de los puntos en función de k*cos(PI*r) con r en el intervalo
(-0,5:0,5) y los valores de k determinan el tipo de distorsión: k<0 Barrel
(Barril) o k>0 Pincushion.
Module 4.8 Head Pose Estimation
Face Pose Estimation
Introduction
What is pose estimation?
How to mathematically represent camera motion ?
What do you need for pose estimation ?
How do pose estimation algorithms work ?
Direct Linear Transform
Levenberg-Marquardt Optimization
OpenCV solvePnP
OpenCV solvePnPRansac
OpenCV POSIT
OpenCV Pose Estimation Code
References and Further Reading
En este módulo, se trata de
conseguir la “POSE” de un objeto, que es su orientación relativa y posición con
respecto a la cámara o viceversa de la cámara con respecto al objeto.
Este problema, se conoce como
“PNP”==”Perspectiva-n-Puntos” en la jerga de visión artificial.
La “POSE” de un objeto 3D
queda determinada con seis números, tres para la translación y tres para la
rotación.
¿Que información se necesita
para calcularlo?
1.- Las coordenadas 2D de unos
pocos puntos (usamos 6 de Dlib)
2.- La locación 3D de los
mismos puntos usando uno como origen.
3.- Los parámetros intrínsecos
de la cámara.
Esto genera unas ecuaciones
lineales que se resuelven usando un método llamado Transformación Lineal
Directa (DLT) en OpenCV las funciones solvePnP y solvePnPRansac pueden ser usadas
para estimar la “POSE”.
No hay comentarios:
Publicar un comentario