domingo, 2 de julio de 2017

Module-1 Photos-and-Color.

Module-1 Photos-and-Color.







 
En fecha 19 de junio de 2017 me inscribí en el curso “cv4faces” “Computer Vision for Faces” de “BIG VISION LLC” dirigido por el Dr. Satya Mallick, de www.LearnOpenCV.com  que trata de la visión artificial aplicada a caras humanas y las aplicaciones se programan usando los lenguajes C++ y Python.

Durante la primera semana, se tocaron los siguientes temas:

Module-1.1-Photos-and-Color.pdf
Table of Contents
What is a photo?
What is color?
A brief history of color photography
How is a color recorded by a digital camera
How are images stored on disk
What is OpenCV?
How are images represented in memory in OpenCV
OpenCV Images in C++
OpenCV Images in Python

Informacion general sobre el color, sensores de cámaras digitales, representación de imágenes en OpenCV, en C++ y Python.


Module-1.2.1-Introduction-to-the-Mat-Class-CPP.pdf
Table of Contents
Introduction to the Mat Class 2
Mat as an Image container 2
Read an image 2
Assignment operation 3
Copy part of an image 3
Clone an image 3
Clone an image with a mask 4
Find number of rows, columns, and channels 4
Mat as a Matrix 6
Create Mat object 6
Using Constructor 6
Using C/C++ arrays 7
Using create method 7
Ones, zeros and identity Matrices 8
Initialize small matrices 9
References and Further reading 10

Informacion general sobre los objetos matrices Mat que son el corazón de OpenCV, distinción entre el “header” y los “datos”, asi como de las copias “Deep” y “shallow” y presentación de algunos métodos destacados de Mat.
Destacables:
// Crear Mat usando arrays C/C++
// En primer lugar se define el tamaño de la matriz.
 int tamano[]={3,4,4};
// Crear una matriz tri-dimensional con el tamaño anterior llena con 30.
Mat L(3, tamano, CV_8U, Scalar::all(30)); // 3 es el numero de elementos de tamano

// Inicializacion de pequeñas matrices
Mat M = (Mat_<double>(3,3) << 1, 5, 6, 0, -3, 30, -1, 0, 8);
cout << M << endl;


Module-1.2.2-Introduction-to-NumPy-Python.pdf
Table of Contents
Introduction to the NumPy in Python-OpenCV 2
Read an image 3
Assignment operation 4
Copy part of an image 4
Find number of rows, columns, and channels 5
Ones, zeros and identity 5
Datatype Conversion 6
References and Further reading 7

Una biblioteca para usar matrices llamada NumPy y al lenguaje Python donde no es necesario declarar las variables. Uso de algunas funciones de OpenCV relacionadas con la creación de matrices.

Module-1.3-OpenCV-Basic-Functions.pdf
Table of Contents
OpenCV Basic Functions 2
Read, write and display an image 2
Crop and Resize 5
Datatype conversion 18
Drawing over an image 20
C++ code for drawing over an image 21
Python code for drawing over an image 24
References and Further reading 27

En este módulo, se explican las funciones básicas con un archivo de imagen, para cargarlo desde el disco, mostrarlo en pantalla y guardarlo en disco.
Hay un programa de recorte rectangular y se explica y usa la función resize() que permite hacer una transformación de cambio de escala.
Se explica la conversión de tipos, útil para usar imágenes con tipo números en coma flotante.
Se explica cómo dibujar sobre una imagen y lo referente a las transformaciones afines.

Module-1.4.1-Binary-Image-Processing-Part1.pdf
Table of Contents
Binary Image Processing 2
Thresholding 2
OpenCV Thresholding Code 4
Dilation and Erosion 7
Dilation and Erosion in OpenCV 8
Code ( Dilation ) 9
Code ( Erosion ) 13
References and Further Reading 17
Se presenta de forma practica el uso de la función Thresholding(), y de las funciones dilate() y erode() que requieren de la creación previa de una matriz estructurante que se obtiene mediante la función getStructingElement().
Tras la lectura de este pdf, echo en falta que se explicara de manera explícita el funcionamiento básico del filtro dilate, que es sustituir el pixel base o ancla por el máximo de los elementos que abarca la matriz estructurante, y en el filtro erode se sustituye el pixel base por el mínimo de los elementos de la matriz estructurante.

Module-1.4.2-Binary-Image-Processing-Part2.pdf
Table of Contents
Binary Image Processing, Part 2 2
Opening and Closing 2
Opening and Closing using OpenCV 3
Code Opening (C++) 4
Code Opening (Python) 6
Code Closing (C++) 8
Code Closing (Python) 10
References and Further reading 13
Se presenta de forma práctica los pasos requeridos para hacer uso de las funciones MorphologyEx, que permite aplicar las operaciones “closing” y “opening” después de crear la matriz estructurante necesaria mediante la función getStructingElement().

Module-1.5-Read-Write-and-Display-Videos.pdf
Table of Contents
Read, write and display a video using OpenCV 2
Reading a Video 2
Displaying a video 3
Writing a video 7
References and Further reading 12

Se presenta el objeto VideoCapture, se implementa un programa para mostrar en pantalla un video almacenado y un programa para capturar un video con la cámara y guardarlo en un archivo que usa el objeto VideoWriting, lo cual es notable cuando se usa el lenguaje Python, pues las versiones que tenía no guardaban el archivo de video adecuadamente, por este motivo conviene comparar este programa con el tutorial oficial de openCV que no me funciona para así aprender algo. La diferencia está en usar el códec “MJPG” que es un códec “seguro” para diferentes configuraciones.

Module-1.6-HighGUI.pdf
Table of Contents
Highgui 2
How to use the Keyboard in OpenCV 2
Code highguiKeyboard (C++) 2
Code highguiKeyboard (Python) 4
How to use the Mouse in OpenCV 6
Code highguiMouse (C++) 6
Code highguiMouse (Python) 8
How to use Trackbars in OpenCV 11
Code Trackbar (C++) 11
Code Trackbar (Python) 12
Sample Outputs 14
References and Further Readings 15


Module-1-Assignment.pdf
Table of Contents
Stick Figure Animation 2
Cropping and Refitting 2
Fun with Thresholding 3
Create a image filter 3
Simple Image Segmentation 4
La primera asignación “Stick Figure Animation” muestra un enlace a una animación de un “stickman” un hombre hecho con palotes y sugiere dibujar un circulo y hacer que describa una trayectoria, agregar otros elementos  y usar la técnica de escritura en archivo de video para completar la animación, todo esto usando las funciones de dibujo básicas: line(), ellipse(), circle(), rectangle(), text() etc.
Para mi versión, un circulo que describe una trayectoria es un planeta o un satélite, así que he imaginado un pequeño planeta que gira alrededor de su eje, donde los océanos (azul) y la tierra con vegetación (verde) se distribuyen como en el símbolo del ying-yang los puntos son un lago y una isla.
Sobre el ecuador de este planeta está “stickman” (como el principito) que se mantiene caminando a un paso con relación al giro del planeta que lo mantiene erguido y evita que se caiga atraído por otros cuerpos celestes.
El planeta tiene su satélite rojo rico en hierro que describe un círculo alrededor de él.
El espacio es un recorte de una fotografía publicada por la NASA.




Figura 1, Mi resultado
La segunda asignación “Cropping and Refitting se nos presenta con este enunciado:
“Puedes recortar secciones de una imagen y reemplazar o usar esa sección recortada. Solo asegúrese que si usa la sección recortada sobre otra imagen, entonces la sección recortada debería ser más pequeña que la imagen sobre la cual quieres superponerla.
También puedes usar la transformación para deformarla, escalarla y trasladar tus imágenes. Se acompaña con esta imagen:



Figura 2, resultado pedido

Mi solución seria señalar un rectángulo en la imagen 2, señalar un rectángulo en la imagen 1y hallar una matriz de transformación, como un extra, se podría hacer una mascara para eliminar la zona blanca alrededor.




Figura 3, Mi resultado

La tercera asignación “Create a image filter”, exhorta al uso de la umbralización, (thresholding) para crear efectos como de dibujo a pincel a partir de una fotografía.



Figura 4, Resultado pedido

He usado el programa ejemplo “thresholding.cpp” con:
Thresh=100
maxValue = 255;
Tipo de umbralizacion = “cv::THRESH_BINARY”



Figura 5, Mi resultado
La cuarta asignación, pide la “segmentación” de una fotografía que está muy contrastada donde aparecen unos patos en silueta sobre el fondo del cielo muy claro.



Figura 6, Resultado pedido

He usado el programa ejemplo “thresholding.cpp” con:
Thresh=137
maxValue = 255;
Tipo de umbralización = “cv::THRESH_BINARY_INV”



Figura 7, Mi resultado

No hay comentarios:

Publicar un comentario