Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Open CV
Open CV
Tulancingo
Programacin en C++ usando la biblioteca
de OpenCV
por
Martin Enrique Martnez Hernndez
Reporte de Estada
en el
Laboratorio de ptica y Sistemas de Visin por
Computadora
Asesora
Dra. Carina Toxqui Quitl
Resumen
En este reporte de estada se analizan e implementan las funciones ms
comunes del procesamiento digital de imgenes usando la biblioteca de OpenCV.
Los algoritmos presentados son desarrollados en Visual Studio 2010.
ndice general
1. Introduccin ....7
2. Estructura de OpenCV ....11
2.1 Procesamiento de imgenes y algoritmos de visin ...12
2.1.1 Binarizacin12
2.1.2 Trasformacin gamma.16
2.1.3 Histograma y Ecualizacin del Histograma ................. ...................18
2.1.4 Laplaciano ..21
2.2 Estructura y Algoritmos...23
2.2.1 Dilatacin y Erosin ...23
2.2.2 Canny ..25
3. Sistema de Visin por Computadora 27
3.1 Control de calidad ..30
3.2 Anlisis de la marcha 33
3.3 Lenguaje a Seas ...36
4. Conclusiones ..39
5. Apndice - CUDA 41
6. Referencias ..43
Captulo 1
Introduccin
Se llev a cabo la bsqueda de una nueva herramienta de visin por computadora que
permita procesar informacin en tiempo real. Para esto se escogi la biblioteca de
OpenCV. Es una biblioteca que cuenta con mas de 500 funciones las cuales estn
enfocadas a visin por computadora y estn basadas en un lenguaje de programacin
como es C y C++ y es muy familiar para cualquier desarrollador del rea de
Sistemas Computacionales.
OpenCV permite procesar imgenes en tiempo real y es muy sencillo hacer interactuar
con la cmara y la biblioteca ya que es una de sus caractersticas, la desventaja que
podremos encontrar es que al trabajar video el procesamiento de la CPU es muy
tardado. Para ello necesitaramos utilizar la GPU con la ayuda de la interfaz de CUDA
mediante la programacin en paralelo para poder combinar la CPU con la GPU.
Problema
En los procesos de Visin por Computadora se requiere de un anlisis y procesamiento
de series de imgenes en tiempo real. Lo cual no ha sido logrado debido a que el
procesado en CPU que actualmente se realiza es muy tardado.
Propuesta
Utilizar la biblioteca de OpenCV ya que contiene ms de 500 funciones para el rea de
visin por computadora en tiempo real, procesando imgenes digitales y reduciendo
costos de tiempo en la ejecucin en su procesamiento.
7
Objetivo
Dar a conocer algunas de las funciones que brinda OpenCV para poder tener una
herramienta de procesamiento en tiempo real que va a permitir reduccin de tiempos
en procesamiento.
OpenCV
Anlisis estructural,
Anlisis de movimiento,
Su licencia de OpenCV
Intel fue el pionero en el desarrollo de OpenCV, sin embargo su licencia permite el
desarrollo con las bibliotecas e inclusive la modificacin y distribucin de las mismas,
tambin la explotacin, investigacin y comercializacin.
10
Captulo 2
Estructura de OpenCV
Introduccin
11
En esta investigacin de las cuatro grupos con los que cuenta OpenCV solo se
utilizaron: CV, HighGUI, CXCORE.
12
2.1.1 Binarizacin
Esta operacin transforma la imagen a solo dos colores blanco y negro. El proceso
para binarizar la imagen es el siguiente:
1. Se encuentra la mediana (dato de en medio) de los valores permitidos para
cada pxel.
2. Se toma uno por uno los pxeles de la imagen.
3. Se compara cada pxel: si el valor del pxel es menor a la mediana entonces ese
pxel toma el valor mnimo permitido, caso contrario toma el valor mximo
permitido.
13
14
Resultados:
15
Contraste
El contraste es la relacin entre las intensidades de los pixeles en una imagen,
tambin se puede definir como la relacin entre la iluminacin mxima y mnima de un
objeto.
BRILLO
El brillo es la luz que refleja o emite un cuerpo. La forma de aumentar o disminuir el
brillo es incrementando o disminuyendo el valor de los pxeles de cada canal.
Aumento de Brillo.
En esta operacin se aumenta la intensidad en una imagen. Esta operacin la realizo
en combinacin de varias funciones, no existe una funcin que por si sola haga la
operacin.
16
Resultado:
Imagen Original
17
"opencv2/highgui/highgui.hpp"
"opencv2/imgproc/imgproc.hpp"
<iostream>
<stdio.h>
18
Resultado:
Imagen original
19
"opencv2/highgui/highgui.hpp"
"opencv2/imgproc/imgproc.hpp"
<iostream>
<stdio.h>
20
Resultados:
Imagen Original
Imagen resultante de la
ecualizacin de su histograma.
2.1.4 Laplaciano
Es un operador ideal para detectar bordes independientes de la orientacin o direccin
de los mismos.
Cdigo desarrollado en Visual Studio 2010 con la biblioteca de OpenCV para el
operador de Laplaciano.
#include
#include
#include
#include
"opencv2/imgproc/imgproc.hpp"
"opencv2/highgui/highgui.hpp"
<stdlib.h>
<stdio.h>
21
Resultado:
22
23
Resultado:
Resultado de la Dilatacin.
Resultado de la Erosin
24
2.2.1 Canny
El detector de bordes Canny fue desarrollado por John F. Canny en
1986. Tambin conocido por muchos como el detector de ptimo, el algoritmo de
Canny tiene como objetivo cumplir con tres criterios principales:
Cdigo:
#include
#include
#include
#include
"opencv2/imgproc/imgproc.hpp"
"opencv2/highgui/highgui.hpp"
<stdlib.h>
<stdio.h>
25
Resultado:
Captulo 3
Sistema de Visin por
Computadora
Introduccin
En este captulo se abordan tres problemas de anlisis de imgenes. El primero es el
control de calidad de botellas PET. Usando los algoritmos de mejoramiento de
contraste, binarizacin, ecualizacin del histograma y filtraje es posible detectar el
defecto de las botellas.
El segundo es el anlisis de la marcha. En este se usa la resta, Binarizacin, Dilatacin
y erosin para la segmentacin de imgenes. Finalmente, se aborda el problema del
reconocimiento del lenguaje de seas. Usando la funcin Canny es posible extraer los
bordes de la mano de manera eficaz.
27
En esta imagen se muestra el plano imagen del cual salen 3 haces de luz. El primero
sale de forma paralela llega el lente, y le cambia la trayectoria pasando por F que es su
punto focal y continua su trayectoria.
El segundo haz de luz sale de forma paralela pasando por en medio de la lente. El
tercer haz de luz pasa por F por el punto focal, pasando por la lente y contina. En la
interseccin de estos haces de luz se encuentra el plano imagen.
28
Sensor
Diafragma
Lente
, =
Representacin en
Formato de la matriz.
Cada elemento de la
Matriz es un PIXEL con
una intensidad f.
X filas
Y columnas
29
Para llevar acabo este proyecto en el laboratorio de ptica se cuenta con los
componentes para el realizar el estudio del control de calidad.
Sistema de iluminacin
Tarjeta de Adquisicin
de imgenes y
computadora
En este caso en particular el objeto que vamos a analizar es una botella ya que en la
boca de la botella tiene un defecto y se desea realizar un sistema que detecte este
error para que la botella se retire de la banda de produccin.
30
Original
= 12
Binarizada
Cambio de Contraste:
31
Como se puede observar, el defecto es detectado con mayor facilidad usando el filtro
Laplaciano.
32
Fondo
Fondo + persona
El objeto a investigar en este caso es la forma de caminar de las personas para ello el
escenario fuera de la persona no nos interesa por ello se va a segmenta la imagen.
Segmentacin: Su objetivo es dividir la imagen en las partes que la constituyen o los
objetos que la forman. En este proceso se diferencia el objeto y el fondo.
Para esto como tenemos 2 imgenes una sin la persona y otra con la persona para ello
vamos a realizar una resta de imgenes para poder obtener solo la persona.
Resultado de la
resta de fondo +
persona fondo.
33
Ya que tenemos la imagen solo con la persona la tenemos que convertir a escala de
grises para posteriormente binarizarla.
Escala a grises
Binaria
34
Resultados:
Como se puede observar en las imgenes si hubo mejora al aplicarle las funciones de
Erosin y dilatacin. Se rellenaron algunas de las partes en las cuales faltaba
informacin.
35
En estas imgenes se muestra la mano pero pareciera a simple vista que solo tiene 3
dedos pero en realidad esta formando el numero 7 del lenguaje a seas como no se
puede ver por completo toda la mano, la funcin Canny nos da la informacin de la
mano completa si importar su posicin de los dedos, como se muestra en la imagen.
Ahora el problema que se tena era que nos arrojaba informacin de ms ya que la
funcin Canny es muy precisa y muestra todos los bordes de la mano y el rea que
esta de fondo de la mano. Para esto se utilizo la funcin de Umbral para quitar un poco
el ruido que nos estaba generando de ms.
36
Con un Umbral a 0
Estas images son con un umbral igual a 25 que es donde podemos observar aun los
dedos sin importar su posicin y tenemos muy poco ruido o informacin de mas.
37
38
Captulo 4
Conclusiones
Se revis la biblioteca de OpenCV para el procesamiento de imgenes y se
programaron algunos algoritmos en Visual Studio 2010. OpenCV es una biblioteca muy
sencilla de utilizar ya que esta esta basado en lenguaje de programacin como c/c++ y
la velocidad de procesamiento es mayor a comparacin de Mathcad. Para el rea de
sistemas es ms familiar para el desarrollador.
Se apoy al sistema de lenguaje a seas con la funcin canny. La cual permiti extraer
de manera eficaz la informacin de seales con la mano. Se logr la deteccin de
bordes de las imgenes de la mano a partir de un umbral de 25.
Como trabajo a futuro se buscara implementar los algoritmos en tiempo real usando
cuda la cual esta basada en una lgica paralela. Los algoritmos para una imagen sern
extrapolados al anlisis de N imgenes.
39
40
Apndice A
Cuda utilizando la GPU mediante la
Programacin en paralelo
La unidad de procesamiento grfico o GPU es un coprocesador dedicado al
procesamiento de grficos u operaciones de coma flotante, para aligerar la carga de
trabajo del procesador central en aplicaciones como los videojuegos y/o aplicaciones
3D interactivas.
CUDA
(Compute
Unified
Device
Architecture) es una arquitectura de clculo paralelo que hace referencia tanto a un
compilador como a un conjunto de herramientas de desarrollo creadas por NVIDIA.
En General permite a los programadores usar una variacin de C/C++ para codificar
algoritmos en una GPU de NVIDIA.
41
42
Referencias
http://opencv.willowgarage.com/wiki/
http://fi.uaemex.mx/h.a.montes/files/TI%20Reporte%20%20Alan%20Barbosa%20Mendoza.pdf
http://opencv.itseez.com/index.html
https://groups.google.com/group/opencv-espanol?hl=es&lnk=srg
http://docencia-eupt.unizar.es/ctmedra/tutorial_opencv.pdf
http://tech.groups.yahoo.com/group/OpenCV/
43