domingo, 23 de julio de 2017

Modulo 4 Alpha Blending y sus usos



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:
  1. Encontrar los puntos correspondientes usando la Detección de los puntos de referencia.
  2. Normalizar las caras y llevarlas a la misma referencia, igual que el caso de promediar.
  3. Triangulación Delaunay.
  4. 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