OpenCV

43
  Universidad Politécnica de Tulancingo Programación en C usando la biblioteca de OpenCV por Martin Enrique Martínez Hernández Reporte de Estadía en el Laboratorio de Óptica y Sistemas de Visión por Computadora Asesora Dra. Carina Toxqui Quitl

Transcript of OpenCV

Universidad Politcnica de TulancingoProgramacin en C++ usando la biblioteca de OpenCVpor Martin Enrique Martnez Hernndez

Reporte de Estadaen el Laboratorio de ptica y Sistemas de Visin por Computadora Asesora Dra. Carina Toxqui Quitl

Universidad Politcnica de Tulancingo

2

Universidad Politcnica de Tulancingo

ResumenEn 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.

Se abordan tres problemas en el contexto de Visin por Computadora. El control de calidad de botellas PET, la segmentacin de imgenes y la detencin de bordes para el anlisis del lenguaje a seas.

3

Universidad Politcnica de Tulancingo

4

Universidad Politcnica de Tulancingo

ndice general1. 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

5

Universidad Politcnica de Tulancingo

6

Universidad Politcnica de Tulancingo

Captulo 1IntroduccinSe 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

Universidad Politcnica de Tulancingo

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

Es una librera de tratamiento de imgenes, destinada principalmente a aplicaciones de visin por computadora en tiempo real. Son un conjunto de bibliotecas de C y C++ de cdigo libre, orientadas a visin por computadora. Puede ser usado en Windows, Linux y MacOS

8

Universidad Politcnica de Tulancingo

9

Universidad Politcnica de TulancingoPor qu OpenCV? Contienen herramientas para la interpretacin de la imagen. Contiene una variedad de ejemplos que ayudan a comprender su funcionamiento adems de que en la red existen grupos de ayuda especializada. Es una librera que funciona para C/C++, por ser una librera completa en funciones para realizar operaciones sobre imgenes. Es una biblioteca gratuita. Realiza anlisis de movimiento y seguimiento de objetos. La biblioteca esta en constante actualizacin al inicio de mi investigacin estaba la versin 2.2 y ya cuenta con la versin 2.4. Para procesar video en OpenCV es muy tardado para ellos se necesitara de ayuda de la GPU.

Qu podemos hacer con OpenCV? OpenCV nos permite entre muchas otras cosas: Operaciones bsicas, como (suma, productos, integraciones, derivaciones, etc.) Procesado de imgenes y anlisis, Anlisis estructural, Anlisis de movimiento, Reconstruccin 3d y calibracin de la cmara, Interfaz grfica y adquisicin,

Su licencia de OpenCVIntel 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

Universidad Politcnica de Tulancingo

Captulo 2Estructura de OpenCVIntroduccin

En este capitulo se describe la librera de OpenCV para el anlisis y procesamiento de imgenes. Se proporciona el cdigo de algunas tareas bsicas para el mejoramiento y realce en imgenes.

Estas bibliotecas se dividen en cuatro grandes grupos:

1. CXCORE: Donde se encuentran las estructuras y algoritmos bsicos que usan las dems funciones. Ejemplo: suma, media. Operacionesbinarias. etc. 2. CV: donde estn implementadas las funciones principales de procesamiento de imgenes. Ejemplo: Erosin, Dilatacin, Operaciones bsicas de umbralizacin, Derivados de Sobel, Operador de Laplace, etc. 3. HighGUI: todo lo relacionado a la interfaz grfica de OpenCV y las funciones que permiten importar imgenes y video.

11

Universidad Politcnica de Tulancingo

4. ML: que cuenta con algoritmos de aprendizaje, clasificadores.

En esta investigacin de las cuatro grupos con los que cuenta OpenCV solo se utilizaron: CV, HighGUI, CXCORE.

12

Universidad Politcnica de Tulancingo

2. 1 Procesamiento de Imgenes y Algoritmos de visin.El objetivo de procesamiento de imgenes es mejorar la calidad de las imgenes para su posterior utilizacin o interpretacin. Para ello OpenCV cuenta con unas gran Biblioteca con ms 500 funciones las cuales estn diseadas para Algoritmos de visin por computadora.

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

Universidad Politcnica de TulancingoCdigo desarrollado en Visual Studio 2010 con la biblioteca de OpenCV para la Binarizacin de imgenes.#include "cv.h" #include "highgui.h" #include "math.h" int main() { IplImage* src; // imagen de color base IplImage* colorThresh; // contendr la imagen de color binarizada IplImage* gray; // contendr la imagen convertida en escala de grises IplImage* grayThresh; // imagen binaria conseguida a partir de la imagen en escala de grises int threshold = 120; // definimos el valor umbral int maxValue = 255; // definimos el valor mximo int thresholdType = CV_THRESH_BINARY; // definimos el tipo de binarizacin src = cvLoadImage("lena.bmp", 1); // cargamos imagen de color colorThresh = cvCloneImage( src ); // copiamos esa imagen de color gray=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1 ); // la imagen de intensidad tendr la misma configuracin // que la fuente pero con un solo canal cvCvtColor( src, gray, CV_BGR2GRAY ); // pasamos la imagen de color a escala de grises grayThresh = cvCloneImage( gray ); // copiamos la imagen en escala // de grises (truco anterior) cvNamedWindow( "src", 1 ); // representamos la imagen de color cvShowImage( "src", src ); cvNamedWindow( "gray", 1 ); // representamos la imagen de intensidad cvShowImage( "gray", gray ); cvThreshold(src, colorThresh, threshold, maxValue, thresholdType); // binarizamos la imagen de color cvThreshold(gray, grayThresh, threshold, maxValue, thresholdType); // binarizamos la imagen de intensidad cvNamedWindow( "colorThresh", 1 ); // representamos la imagen // de color binarizada cvShowImage( "colorThresh", colorThresh ); cvNamedWindow( "grayThresh", 1 ); // representamosla imagen // de intensidad binarizada cvSaveImage("lena1.bmp", gray); // guardamos la imagen cvSaveImage("lena2.bmp", grayThresh); // guardamos la imagen cvShowImage( "grayThresh", grayThresh ); cvWaitKey(0); // pulsamos tecla para terminar cvDestroyWindow( "src" ); // destruimos todas las ventanas cvDestroyWindow( "colorThresh" ); cvDestroyWindow( "gray" ); cvDestroyWindow( "grayThresh" ); cvReleaseImage( &src ); // eliminamos todas las imgenes cvReleaseImage( &colorThresh ); cvReleaseImage( &gray ); cvReleaseImage( &grayThresh ); //getch (1); return 0; }

14

Universidad Politcnica de Tulancingo

Resultados:

Imagen escala a grises

Imagen Binarizada con umbral = 120

15

Universidad Politcnica de Tulancingo2.1.2 Transformaciones en intensidad

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.

Cdigo desarrollado en Visual Studio 2010 con la biblioteca de OpenCV para el mejoramiento del contraste en una imagen.#include #include #include using namespace cv; double alpha; /**< Control de contraste simple */ int beta; /**< Control de brillo simple */ int main( int argc, char** argv ) { /// Leer la imagen dada por el usuario Mat image = imread( "lena.bmp",1 ); Mat new_image = Mat::zeros( image.size(), image.type() ); /// Inicializar los valores std::cout