UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA

GRADO EN INGENIERÍA INFORMÁTICA

TECNOLOGÍA ESPECÍFICA DE INGENIERÍA DE COMPUTADORES

TRABAJO FIN DE GRADO

Sistema para la vectorización de imágenes representadas en mapa de bits

Dionisio Moreno Cañas

Julio, 2018

UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA Grupo Imaging. Leandro Guijarro Casado Departamento de Matemáticas. José Luis Espinosa Aranda

TECNOLOGÍA ESPECÍFICA DE INGENIERÍA DE COMPUTADORES

TRABAJO FIN DE GRADO

Sistema para la vectorización de imágenes representadas en mapa de bits

Autor(a): Dionisio Moreno Cañas Director(a): Leandro Guijarro Casado Director(a): José Luis Espinosa Aranda

Julio, 2018 Sistema para la vectorización de imágenes representadas en mapa de bits © Dionisio Moreno Cañas, 2018

El escudo de Informática utilizado por este documento ha sido realizado por P. Moya, D. Villa e I. Díez, su inclusión debe respetar los derechos de autor y las licencias a las que se vea sometido. La copia y distribución de esta obra está permitida en todo el mundo, sin regalías y por cualquier medio, siempre que esta nota sea preservada. Se concede permiso para copiar y distribuir traducciones de este libro desde el español original a otro idioma, siempre que la traducción sea aprobada por el autor del libro y tanto el aviso de copyright como esta nota de permiso, sean preservados en todas las copias. Tribunal:

Presidente:

Vocal:

Secretario:

Fecha de defensa:

Calificación:

Presidente Vocal Secretario

Fdo.: Fdo.: Fdo.:

Dedicado a mis padres.

Resumen

n este Trabajo Fin de Grado (TFG) se desarrolla un sistema de vectorización de imágenes E representadas en mapa de bits para la empresa Indra Software Labs. Este sistema pretende ser el inicio de una línea de I+D en relación con el tratamiento de la imagen por computador. Este proceso de estudio y elección de una tecnología se considera clave ya que será la base sobre la que llegar a crear un módulo de tratamiento de imagen vectorial, el cual lleve a Indra a potenciar los objetos de negocio de visión articial. Cabe destacar que se ha profundizado en los formatos y tecnologías opensource, ya que ofrecen un amplio abanico de posibilidades. Los continuos avances en el sector de la visión por computador hacen que surja la necesidad de un procesamiento más abstracto de la información que permita agilizar su tratamiento. Es ahí donde entra en escena la vectorización. Entendemos vectorización como el proceso de transformación en el formato de representación de una imagen, pasando de un mapa de bits a una imagen vectorial. Con la imagen vectorial conseguimos tener mayor precisión en detecciones de objetos, mediciones de defectos y formas, lo que nos lleva a resolver problemáticas reales que existen en muchos casos de negocio en los que Indra tiene repercusión como industria, empresas aseguradoras, sector energético o smart cities. Gracias a esto, el módulo desarrollado tiene un road map de escalabilidad que llevará a Indra a poder afrontar casos de uso que aún no tienen resolución con las técnicas de visión articial basadas en imagen píxel, ni con los diferentes productos de mercado actuales, tales como los sensores que se usan para resolver casos de visión articial en 3D. Tras la investigación y comparación de las opciones estudiadas, se ha seleccionado la librería Potrace como núcleo de nuestro sistema de vectorización. Este sistema tiene como objetivo futuro formar parte de una Application Programming Interface (API) que sea consumible por distintos proyectos actuales y futuros. Palabras clave: Vectorización, imagen vectorial, mapa de bits.

ix

Abstract

his TFG develops a vectorization system of images for the company Indra Software Labs. TThis system is intended to be the start of a line of I+D in connection with computer image processing. This process of study and choice of a technology is considered key as it will be the basis on which to create a vector image processing module, which will lead Indra to enhance their business possibilities on the articial vision area. It is worth noting that the formats and technologies used have been further developed, as they oer a wide range of possibilities. The continuous advances in the eld of computer vision are creating the necessity of improving the processing of information in order to speed up its treatment. That is where vectorization comes in handy. Vectorization is the process of transforming an image from bitmap format to a determined set of mathematical entities which conform a vector image. With the vector image it will be possible to achieve an improvement on the precision in object detection, defect measurement and shape, which could leads us to solve real problems that exist in many business cases in which Indra has an impact as industry, insurance companies, energy sector or smart cities. Thus, the developed module has a scalability road map that will allow Indra to face use cases that still have no resolution with the articial vision techniques based on pixel image, nor with the dierent current market products, such as sensors used to solve cases of articial vision in 3D. After researching and comparing current options studied, the Potrace library has been selected as the core of our vectorization system. This system is intended to be part of an Application Programming Interface (API) that can be used for several current and future projects. Keywords: Image tracer, vector image, bitmap.

xi

AGRADECIMIENTOS

«Es de bien nacidos ser agradecidos» En primer lugar, agradecer enormemente a mi tutor José Luis toda la atención y disponibilidad prestada, inmejorable. En segundo lugar, a Indra S.L. y al grupo Imaging, por darme la oportunidad de trabajar y aprender en un ambiente que lo favorece. Y por último, y no por ello menos importante, sino todo lo contrario, a mi madre y a mi padre, por facilitarme todo lo que está a su alcance sin ningún tipo de reparo. GRACIAS.

Dionisio Moreno Cañas

xiii

ÍNDICE GENERAL

1 Introducción 31 1.1 Motivación...... 32 1.2 Estructura del documento...... 35

2 Objetivos 37 2.1 Objetivo Principal...... 37 2.1.1 Implementación de un algoritmo para la vectorización de imágenes..... 37 2.1.2 Despliegue de un sistema que implemente dicho algoritmo...... 37 2.1.3 Desarrollo de una API que permita su utilización...... 38

3 Estado del Arte. Antecedentes 39 3.1 Mapa de bits...... 40 3.1.1 Modelos de color...... 41 3.1.2 Formatos de imagen de mapa de bits...... 42 3.2 Imagen vectorial...... 44 3.3 Comparación bit vs vector...... 46 3.4 Comparación DXF-SVG...... 46 3.4.1 Drawing Exchange Format (DXF)...... 46 3.4.2 Scalable (SVG)...... 48 3.4.3 Conclusiones de la comparativa...... 50 3.5 Vectorización...... 51 3.5.1 Procedimientos teóricos. Algoritmos...... 52 3.5.2 Software de vectorización...... 54

4 Análisis y selección de las tecnologías 57 4.1 Potrace. PO-lygon TRACE-r...... 57 4.1.1 MkBitmap. Preprocesamiento...... 58 4.1.2 Algoritmo de Potrace...... 63 4.1.3 API...... 67

xv xvi ÍNDICE GENERAL

4.2 MSYS2...... 73 4.2.1 MinGW...... 73 4.2.2 Qt...... 74 4.3 Visual Studio 2015...... 75 4.4 CMAKE...... 75 4.5 Dxib...... 75 4.6 OpenCV...... 77

5 Fases de trabajo y metodología 79 5.1 Fases de trabajo...... 79 5.2 Medios y metodología de desarrollo...... 79 5.2.1 Medios Hardware...... 80 5.2.2 Medios Software...... 80 5.2.3 Metodología de desarrollo...... 81

6 Diseño del sistema 83 6.1 Requisitos del diseño...... 83 6.1.1 Must have...... 83 6.1.2 Should have...... 83 6.1.3 Could have...... 83 6.1.4 Want have...... 84 6.2 HITOS...... 84 6.2.1 Hito 1...... 84 6.2.2 Hito 2...... 85 6.2.3 Hito 3...... 86 6.2.4 Hito 4...... 86 6.3 Arquitectura general...... 89 6.3.1 Diagrama UML...... 89 6.3.2 Diagrama de secuencia...... 90

7 Resultados y casos prácticos 93 7.1 Aplicación de vectorización de imágenes...... 93 7.2 Sistema cliente-servidor para vectorización de imágenes...... 94 7.3 CASOS PRÁCTICOS...... 95 7.3.1 Detección de fallos en cadenas de montaje en el sector de la automoción... 95 7.3.2 Smart Retail. Detección de productos en supermercados...... 99 7.3.3 Detección de formas y patrones...... 99 7.3.4 Detección de objetos en entornos no controlados...... 100 ÍNDICE GENERAL xvii

8 Conclusiones y trabajo futuro 103 8.1 Conclusiones...... 103 8.2 Líneas de trabajo futuro...... 103 8.3 Líneas de trabajo derivadas de este TFG...... 104

A Costes del proyecto 105 A.1 Costes hardware...... 105 A.2 Costes de desarrollo...... 105

B Licencias y propiedad intelectual. 107 B.1 Marco Regulatorio...... 107 B.1.1 Indra S.L...... 107 B.1.2 IDE’s...... 107 B.1.3 Librerías de imagen...... 107

C Manual de instalación 109 C.1 Instalación de componentes...... 109 C.1.1 Instalación del entorno de desarrollo...... 109 C.1.2 Instalación de las librerías de imagen...... 110

Bibliografía 111

ÍNDICE DE FIGURAS

1.1 Imagen en mapa de bits vs imagen vectorial...... 31 1.2 Zoom de una imagen de mapa de bits y vectorial...... 33 1.3 Vectorización de una imagen realista, pérdidas observables...... 33 1.4 Distintas versiones de una vectorización sobre imagen realista...... 34

3.1 Contraste de imágenes en función de su cantidad de píxels...... 40 3.2 RGB...... 42 3.3 CMYK...... 42 3.4 HSB...... 42 3.5 Escala de grises...... 42 3.6 Comparación entre una representación bit a bit y una vectorial...... 45 3.7 Ejemplo que satisface la condición de Delaunay...... 51 3.8 Ejemplo que no satisface la condición de Delaunay...... 51 3.9 Construcción de la región de Voronoi...... 51 3.10 Conjunto de polígonos del diagrama de Voronoi...... 51

4.1 Comparación entre imágenes con distintos niveles de suavizado en sus bordes... 58 4.2 Imagen original para el procesamiento con Mkbitmap...... 60 4.3 Imagen binarizada con Mkbitmap, sin ltro highpass ...... 61 4.4 Imagen binarizada con Mkbitmap, umbralización con ltro highpass ...... 61 4.5 Escalado posterior al umbralizado...... 62 4.6 Escalado previo al umbralizado...... 62 4.7 Vectorización con Potrace sin escalado previo...... 62 4.8 Vectorización con Potrace con escalado previo...... 62 4.9 Ejemplo de caminos rectos...... 64 4.10 Ejemplo de optimización de un polígono...... 64 4.11 Ejemplo de curvatura y diferentes tipos de esquinas...... 65 4.12 Ejemplo completo del proceso de vectorización con Potrace...... 67 4.13 Diferenciación entre una curva de Bezier y un segmento recto...... 69

xix xx ÍNDICE DE FIGURAS

4.14 Curva cerrada formada por 4 segmentos...... 69 4.15 Ejemplo de estructuración de una imagen vectorial con descomposición de bordes (conjuntos jerárquicos)...... 70 4.16 Esquema explicativo del funcionamiento de dxib...... 76

6.1 Hito 2. Captura de pantalla de la interfaz del proyecto...... 85 6.2 Hito 3. Captura de pantalla de la interfaz del proyecto...... 86 6.3 Interfaz servicio web (localhost)...... 87 6.4 Hito 4. Captura de pantalla de la interfaz del lado cliente...... 87 6.5 Arquitectura general...... 89 6.6 Diagrama UML ...... 90 6.7 Diagrama de secuencia...... 91

7.1 Diagrama de ujo del proceso vectorizador...... 93 7.2 Visión global del sistema...... 94 7.3 Aplicación cliente del sistema...... 95 7.4 Imagen original...... 96 7.5 Imagen vectorial...... 96 7.6 Primera parametrización...... 97 7.7 Segunda parametrización...... 98 7.8 Ejemplo de piel de naranja...... 98 7.9 Detección de formas en estantería de supermercado...... 99 7.10 Detección de formas en formato SVG...... 100 7.11 Prueba de selección de formas como objetos individuales mediante ..... 100 7.12 Detección de elementos en autopista...... 101 7.13 Selección de formas como objetos individuales en entorno no controlado...... 101 ÍNDICE DE TABLAS

3.1 Mapa de bits VS imagen vectorial...... 46 3.2 identicadores generales para TEXTO (0-9)...... 48

5.1 Características del PC...... 80 5.2 Características del ordenador personal...... 80

xxi

ÍNDICE DE LISTADOS

3.1 DXF...... 47 3.2 sectionDXF...... 48 3.3 nDXF...... 48 3.4 ejemplo SVG...... 49 4.1 potrace_bitmap...... 68 4.2 potrace_dpoint...... 68 4.3 potrace_curve...... 69 4.4 potrace_path...... 70 4.5 potrace_param...... 70 4.6 potrace_progress...... 71 4.7 potrace_state...... 71 4.8 potrace_trace...... 72 4.9 potrace_state_free...... 72 4.10 potrace_state_free...... 72 4.11 potrace_param_free...... 72 4.12 potrace_version()...... 72 4.13 dxib DL_CreationAdapter...... 76 4.14 Lectura con dxib...... 76 6.1 Xml le (parameters)...... 88

xxiii

ÍNDICE DE ALGORITMOS

3.1 VISTA...... 52 3.2 HSVGen...... 52 3.3 RaveGrid...... 53 3.4 SVGStat...... 53

4.1 Potrace...... 63 4.2 dxib...... 76

xxv

LISTADO DE ACRÓNIMOS

API Application Programming Interface ASCII American Standard Code for Information Interchange BMP Windows Bitmap o Bit Mapped Picture BSD Berkeley Software Distribution CAD Computer-Aided Design Cmake Cross platform Make CMYK Cyan Magent Yellow blacK CSS Cascading StyleSheets CUDA Compute Unied Device Architecture DSDM Dynamic Systems Development Method DXF Drawing Exchange Format GIS Geographic Information System GIF Graphics Interchange Format GNU GNU’s Not Unix GPL General Public License GPU Graphics Processing Unit HLS Hue Lightness Saturation HSB Hue Saturation Brightness HSV Hue Saturation Value IDE Integrated Development Environment JPEG Join Photographic Experts Group MIME Multipurpose Internet Mail Extensions MinGW Minimalist GNU for Windows MSYS2 Minimal SYStem 2 MVSC Microsoft Visual Studio Compiler OCR Optical Character Reader ODG Open Document format for Graphics OpenCV Open Source Computer Vision Library OpenGL Open Graphics Library PDF Portable Document Format PNG Portable Network Graphic Format

xxvii xxviii ÍNDICE DE ALGORITMOS

POSIX Portable Operating System Interface uniX RGB Red Green Blue SDK Software Development Kit SEO Search Engine Optimization SVG TFG Trabajo Fin de Grado TIFF Tagged Image File Format VISTA Vectorized Segmentation via Trixel Agglomeration W3C World Wide Web Consortium XML eXtensible Markup Language

CAPÍTULO 1 INTRODUCCIÓN

a imagen es uno de los medios de comunicación que ha acompañado a la humanidad desde sus L orígenes y todavía, a día de hoy, sigue evolucionando y adaptándose a nosotros y a nuestras tecnologías. La evolución de los medios de transmisión de imágenes siempre ha condicionado al resto marcando el camino a seguir. En esta era de la información, la imagen (información visual) tiene especial importancia formando parte de gran cantidad de contenido multimedia. La información visual obtenida cobra gran protagonismo a día de hoy debido a que podemos encontrar una cámara que capture imágenes o vídeo en prácticamente cualquier rincón del mundo. Además de diversas herramientas que permiten la creación de imágenes por computador, se necesita disponer de sistemas que permitan un tratamiento eciente de esta información, con el n de ahorrar la mayor cantidad de recursos y tiempo posibles. En este contexto las imágenes pueden almacenarse en dos tipos de formato distintos, como podemos observar en la Fig.1.1[6]:

• Mapa de bits (raster), normalmente utilizado para almacenar imágenes capturadas con una cámara.

• Vectorial, utilizado habitualmente para almacenar grácos desarrollados mediante computador.

Figura 1.1: Imagen en mapa de bits vs imagen vectorial. [7] 32 1.1. MOTIVACIÓN

De forma introductoria, denimos algunas características principales de los dos tipos de imagen mencionados.

1. Las imágenes en mapas de bits son estructuras que nos permiten representar la información visual mediante una rejilla rectangular de píxeles (matriz), de una o varias dimensiones, com- puesto cada uno de ellos por una posición y por la profundidad del color, obtenido a través de unos valores que indican la información de color según un determinado modelo de color utilizado (como por ejemplo RGB, CMYKo HSV/HSB).

2. Las imágenes vectoriales son representaciones que están compuestas por entidades mate- máticas que representan objetos geométricos independientes como segmentos, polígonos o circunferencias entre otros. Esto signica que la imagen vectorial puede ampliarse sin perder calidad.

A continuación explicaremos los procesos de transformación entre ambos formatos de imagen. Al proceso de transformar una imagen vectorial a mapa de bits, eliminando toda la información de los objetos vectoriales contenidos en el chero, se le conoce como rasterización. A través del proceso se convierte la imagen descrita en un formato vectorial en un conjunto de píxeles, utilizados en la metodología de representación visual digital (como una pantalla de computadora o una impresora electrónica). Introducimos también brevemente el concepto de vectorización (también conocido como image tracing). Este proceso conlleva la conversión de una imagen raster (mapa de bits), pudiendo ser de distintos formatos, en una imagen vectorial. Debido a la diversidad de formatos y fuentes de las imágenes que tomamos como objeto de la vectorización, dicha técnica puede resultar una tarea ardua y compleja. Este proceso está considerado de relevancia en el ámbito de la imagen por computador. Como indicador cabe destacar que ya está incluido en varias aplicaciones de edición de imágenes actuales pioneras en el mercado como Adobe Streamline[1] o CorelDRAW X3[2]. A día de hoy, existen numerosas opciones en el mercado para la vectorización. El mayor número de estas tecnologías son software privativo y comercial, pero existen algunas opciones opensource, las cuales serán objeto de estudio, entre las que podemos reseñar Potrace [21], utilizada en un editor gráco de relevancia, también de código abierto, como es Inkscape.

1.1 MOTIVACIÓN

En la actualidad, la representación de imágenes podemos englobarla dentro del campo de la visión articial, la cual está presente en gran variedad de ámbitos de nuestras vidas. Por este motivo, existe una necesidad imperiosa de avances en el tratamiento y representación sobre la imagen virtual. El hecho de que se necesite una mayor eciencia y velocidad en el tratamiento de imágenes, una tarea no trivial, sitúa este sector como objeto de estudio, puesto que tiene una gran repercusión en las tecnologías y contenidos digitales. Ante esta situación surgen algunas problemáticas, puesto que la captura, representación y trata- miento de dichas imágenes, presenta multitud de variantes. La variabilidad del sector comprende desde sistemas de reconocimientos de caracteres, lenguajes de descripción de documentos y tipografías, hasta generación de grácos 3D o sistemas de diagnóstico médico. Para la comprensión de este trabajo, es primordial conocer algunos conceptos clave. Por tanto, a continuación citamos algunas características sobre los tipos de imagen. La imagen en mapa de bits, CAPÍTULO 1. INTRODUCCIÓN 33 gracias a su estructura en malla (grid) permite almacenar gran cantidad de información pretendiendo así proporcionar una representación más exacta del mundo real. Debido a este hecho, la captura de imágenes habitualmente se realiza utilizando equipos y métodos que producen como salida imágenes representadas en mapa de bits. En contraposición, la imagen vectorial es comúnmente utilizada en los procesos de edición y diseño de imagen por computador. Realiza una abstracción de la información, que permite una reducción de su tamaño en el almacenamiento, junto con un mejor manejo y tratamiento. Como consecuencia de sus características matemáticas, proporciona una representación a cualquier escala sin pérdidas en su denición, solo dependiendo de la resolución del dispositivo de salida (ver Fig. 1.2).

Figura 1.2: Zoom de una imagen de mapa de bits y vectorial respectivamente.

Por tanto, poder tratar las imágenes de una manera más eciente es un hecho que se puede conse- guir a través de la imagen vectorial. Podemos observar que ante estos hechos surge la posibilidad de realizar este una transformación de tipo, la vectorización. Llevar a cabo este proceso de vectorización presenta una mayor complejidad cuanto mayor realismo y detalle en su representación tenga la imagen, lo que implica una mayor cantidad de información. Con esta transformación en ocasiones existe pérdida de calidad en la representación de la imagen, llegando en algunos casos hasta la eliminación de algún detalle observable a simple vista (ver Fig. 1.3). Esta es una consecuencia que puede ser o no relevante, dependiendo del campo de aplicación de la técnica.

Figura 1.3: Vectorización de una imagen realista, pérdidas observables (cortesía de RaveGrid).

En el otro extremo podemos situar otra opción posible, y es en la que debido a una representación con un alto grado de detalle, obtenemos una imagen vectorial que representa de manera similar a una imagen en mapa de bits, pero que implica un tamaño de archivo sobredimensionado. 34 1.1. MOTIVACIÓN

Esta problemática puede observarse en la Fig. 1.4, en la que se muestra una imagen en mapa de bits junto con diferentes versiones vectorizadas. Respectivamente de izquierda a derecha:

• Fotografía original, formato JPEG, 25 KB

• Imagen vectorizada con RaveGrid, 1.64 MB

• Imagen vectorizada con AutoTrace , 677 KB

• Imagen vectorizada con Inkscape, 1.05 MB

• Imagen vectorizada con Scan2CAD, 340 KB

• Imagen vectorizada con Vectormagic, 12 colores, 369 KB

Figura 1.4: Distintas versiones de una vectorización sobre imagen realista, se produce aumento con- siderable en el tamaño de archivo SVG obtenido como resultado. (imágenes obtenidas de Wikipedia: Image Tracing)

Aún así, la imagen vectorial ofrece un abanico amplio de oportunidades que facilitan su repre- sentación, tratamiento y manipulación. Por tanto, en este TFG se realizará un estudio sobre las tecnologías relacionadas con la vectoriza- ción, teniendo en cuenta las últimas novedades tecnológicas del sector. Analizaremos las técnicas y métodos disponibles para abordar el problema, centrándonos en las tecnologías opensource de manera que podamos obtener a través de una visión global y actual, una solución conjunta y mejorada a través de un desarrollo propio. La motivación del desarrollo de este TFG surge a partir de la necesidad por parte de Indra Software Labs para dar soluciones a este tipo de problemáticas. Este proyecto pretende formar parte de futuras aplicaciones, funcionando como soporte y proporcionando funcionalidades a sistemas mayores. CAPÍTULO 1. INTRODUCCIÓN 35

1.2 ESTRUCTURA DEL DOCUMENTO

El presente TFG contiene los siguientes capítulos y anexos, que serán descritos brevemente en esta sección.

• Capítulo 1. Introducción. Se realiza una breve presentación general del proyecto a desarrollar, incluyendo la motivación que ha llevado a su desarrollo y los objetivos del mismo.

• Capítulo 2. Objetivos. Se describen cada una de las metas principales y secundarias alcanzadas con el objetivo común de solucionar de manera eciente la problemática indicada en este TFG.

• Capítulo 3. Estado del arte. Antecedentes. Se analiza la situación actual de todos los ele- mentos, tanto lógicos como físicos, que intervienen en el TFG con el n de comprender comprenderlos y aplicarlos a la realización del mismo.

• Capítulo 4. Fases de trabajo y metodología. Se explica el método de desarrollo utilizado para el desarrollo del TFG junto a las distintas fases llevadas a cabo para la resolución de problemas.

• Capítulo 5. Análisis y selección de las tecnologías. Selección entre todas las opciones disponibles opensource. A continuación se realiza una selección basada en el estudio previo con el propósito de presentar un veredicto sobre la conveniencia de utilización de los mismos. Igualmente se describe la relación entre sí de los distintos componentes del sistema.

• Capítulo 6. Diseño del sistema. Se describe de manera detallada el diseño del sistema nal, indicando todas las hipótesis consideradas y los resultados asociados a estas obtenidos durante el despliegue del sistema completo.

• Capítulo 7. Resultados y casos prácticos. El resultado principal de este TFG es la aplicación desarrollada para la vectorización de imágenes. En este apartado también se van a mostrar varios tipos de detección de elementos en casos de uso reales para Indra.

• Capítulo 8. Conclusiones y trabajo futuro. Se estudian y se presentan todas las conclusio- nes obtenidas tras la completa realización del TFG. Posteriormente se describen las posibles líneas futuras de trabajo y ampliación de este proyecto.

• ANEXO 1. Costes del proyecto. Se evalúa el coste parcial y global del proyecto, tanto los gastos en el hardware necesario como en el desarrollo del mismo.

• ANEXO 2. Licencias y propiedad intelectual. En este anexo se hace un repaso de las tecnologías utilizadas, así como de sus derechos de utilización.

• ANEXO 3. Manual de instalación. Se indica al usuario la forma de proceder con el n de instalar y ejecutar correctamente todos los elementos necesarios para la correcta ejecución del proyecto.

CAPÍTULO 2 OBJETIVOS

n este capítulo se desglosan los diferentes puntos que contienen la nalidad de este proyecto E de interés para Indra. El departamento Imaging de Indra, encargado de los procesos relacionados con la visión articial es experto en análisis de patrones y tratamiento de imagen píxel (mapa de bits). Con la creación de la línea de visión articial se pretende incorporar tecnología que usen técnicas y entornos vectoriales para conseguir el mayor grado de detalle y precisión. La imagen vectorial tiene una especial relevancia, por ejemplo, en el modelado 3D en cuanto a precisión en la detección de objetos y defectos, también puede favorecer el control de movimiento de objetos.

2.1 OBJETIVO PRINCIPAL

El objetivo principal de este TFG es el desarrollo de un sistema que permita dar solución al problema de vectorización de una imagen en mapa de bits con la nalidad de agilizar su tratamiento y reconocimiento de patrones, formas y cualquier tipo de abstracción. Los subobjetivos perseguidos durante la ejecución del TFG se detallan en el Capítulo 6 de la presente memoria, los cuales nos llevarán a la consecución del objetivo principal. Son los siguientes:

2.1.1 Implementación de un algoritmo para la vectorización de imágenes.

Una vez realizado el estudio sobre las tecnologías opensource, y obtenida una selección de las opciones que más se adecuan según los criterios y necesidades del proyecto, se ha realizado una implementación de una solución a partir de una integración de las tecnologías citadas junto con aportes propios.

2.1.2 Despliegue de un sistema que implemente dicho algoritmo.

En segundo lugar, tras haber realizado una serie de pruebas simples de manera local, será necesario realizar un despliegue del sistema sobre la arquitectura proporcionada por parte de la empresa, permitiendo la posibilidad de aprovechamiento de una mayor potencia de cálculo sobre necesidades futuras. Para adaptar el proyecto a estas nuevas necesidades, desde la empresa se ha aconsejado la realización del despliegue utilizando Visual Studio 2015, comúnmente empleado en los desarrollos del grupo de trabajo. 38 2.1. OBJETIVO PRINCIPAL

2.1.3 Desarrollo de una API que permita su utilización

Por último, se realizará una Application Programming Interface (API) que ofrezca un servicio que ayude a mejorar el rendimiento en el sector de tratamiento de imagen gracias a la generación de imágenes desde una perspectiva vectorial, hasta ahora usualmente enmarcado en el trabajo con imagen de mapa de bits. Esta API pretender proporcionar un servicio para su utilización dentro de otros proyectos en los que la empresa Indra S.L. trabaja actualmente. CAPÍTULO 3 ESTADO DEL ARTE. ANTECEDENTES

n esta sección se realiza un pequeño estudio sobre la vectorización, iniciando con una peque- E ña introducción sobre los orígenes de la imagen y sus diversas formas de representación y nalizando con las diferentes metodologías destinadas a abordar este proceso de transformación. Una imagen (del latín imago) es una representación sensorial de un objeto real o imaginario. Al referirnos a imagen visual, indicamos que el sentido que percibe la información es la vista. Además, podemos entender la ilustración como la representación gráca o visual. La ilustración ha sido desde tiempos inmemoriales un recurso constante de los seres humanos, para expresar grácamente nuestras necesidades y deseos. Desde sus inicios, el ser humano ha ido plasmando su historia a modo de ilustraciones, haciendo uso de las herramientas disponibles de cada época, pero todas ellas han tenido siempre restricciones físicas. Inicialmente en la prehistoria, los seres humanos representaban sus escenas de caza y otros acontecimientos en las paredes de sus cuevas, valiéndose de los rudimentarios medios disponibles. Más adelante, otras culturas como la egipcia dibujaban en las paredes de sus palacios y templos hermosos jeroglícos narrando los diferentes hechos de su cultura. Con la Revolución Industrial y la creación de la impresión prensada surgieron nuevas posibilidades. Éste fue el inicio del Diseño Gráco. En el comienzo de la Era Moderna, la creación y distribución de carteles ilustrados comenzó a crecer. Con la evolución de la Informática, aparecieron nuevos métodos de fotografía o ilustración digital. En denitiva, la imagen visual ha cumplido una función informativa, ilustradora o de entreteni- miento, y ha evolucionado con la tecnología, ligada al formato y los materiales sobre y con los que se plasman: la roca, un muro, un lienzo, un papel o una pantalla. Del mismo modo las encontramos mediante técnicas de representación diferentes: dibujo, diseño, pintura, fotografía o vídeo, entre otras. A continuación citamos algunas de las más representativas:

• Dibujo: El dibujo es una herramienta del ser humano para la representación de las percepciones visuales. El ser humano siempre ha utilizado los dibujos en su entorno para plasmar aquello que captaba su atención. Reproduciendo lo citado anteriormente, podemos decir que estos dibujos se remontan a la prehistoria, un ejemplo representativo son las pinturas rupestres de las cuevas de Altamira. Con el paso del tiempo las técnicas y los materiales han mejorado, pero el concepto sigue siendo el mismo. • Fotografía: La fotografía surge de la necesidad de plasmar las imágenes de forma más rápida, precisa y metódica. Existen diversos tipos de fotografía, tales como la química o la estereoscópica, pero en este contexto resaltaremos la fotografía digital. 40 3.1. MAPA DE BITS

La fotografía digital consiste en la captura de imágenes a través de un sensor eléctrico que dispone de múltiples unidades fotosensibles, las cuales aprovechan el efecto fotoeléctrico para convertir la luz en una señal eléctrica, procediendo a su digitalización y binarización siendo almacenada en una memoria.

• Imagen digital: Una imagen digital o gráco digital es una representación bidimensional de una imagen en forma de una matriz numérica, frecuentemente en binario (unos y ceros). Dependiendo de algu- nos factores, puede tratarse de una imagen matricial (o mapa de bits) o de un gráco vectorial. Podemos obtener las imágenes en formato digital a partir numerosas fuentes, desde sensores (fotografías) hasta creándolas directamente dentro del ámbito digital mediante herramientas de edición (dibujo) especícas.

Como consecuencia de estas últimas técnicas de representación digital surge La Era Digital, la cual ha aportado muchos y novedosos cambios de formato, surgiendo entre ellos el concepto de resolución. El término resolución se puede denir como la calidad de una imagen en función de su núme- ro de pixels por pulgada, indicando cuán nítida es. En la Fig. 3.1 se puede observar cómo varía la nitidez de la imagen según el número de pixels por pulgada que se le asignan. Estas imágenes compuestas por píxeles, pre- sentadas anteriormente, se denominan mapas de bits, y tienen una resolución limitada por el número de pixels que la forman. La limitación de los mapas de bits dio lugar a un nuevo sistema de ilustración: las imágenes vectoriales. A diferencia de los pixels, como he- Figura 3.1: Contraste de imágenes en función de su mos citado anteriormente, están compuestas de cantidad de píxels. entidades matemáticas permitiendo incrementar su tamaño innitamente sin perder calidad. En resumen, el modo de almacenamiento de estas imágenes digitales, nos permite hacer una cla- sicación en dos grandes grupos: mapas de bits o vectoriales, los cuales explicaremos a continuiación con más detalle.

3.1 MAPA DE BITS

La imagen raster o mapa de bits es un archivo o estructura que representa generalmente una rejilla rectangular o matriz de píxeles en un monitor, papel u otro medio. Un mapa de bits se caracteriza por el ancho, el alto de la imagen en píxeles y el número de canales por píxel, el cual determina el número de colores que puede representar. El color de cada píxel está denido individualmente y la información albergada corresponde a atributos como color, luminosidad o transparencia entre otros. Este conjunto de atributos utilizados para la representación de colores quedan denidos en los denominados modelos de color. Dichos modelos se explicarán en detalle más adelante. CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 41

Este tipo de imagen tiene una resolución nita, pudiéndose aumentar gracias a la interpolación. Esta técnica consigue aumentar tanto resolución como tamaño con una consiguiente pérdida de calidad y nitidez de la imagen, pero no siempre es una solución válida. Por este motivo las imágenes en mapas de bits necesitan un estudio de la resolución necesaria de antemano, para poder preparar la imagen acorde a esas necesidades. A su vez, una reducción de sus dimensiones presenta pérdidas de información, quedando des- cartada la posibilidad de un regreso a las dimensiones iniciales sin tener un empeoramiento de la imagen. Este tipo de imagen, debido a sus atributos, es el más extendido en la captura de imágenes digitales y representación realista, puesto que permite un alto grado de detalle.

3.1.1 Modelos de color

En esta subsección detallaremos algunos de los modelos de color [3][5][18] más utilizados son RGB, CMYK, HSB/HSV, HLS o de escala de grises.

• RGB El modelo de colores Red Green Blue (RGB) es un modelo aditivo en el que los tres colores son combinados para reproducir el resto de la gama de colores. Véase la Fig.3.2. La información es descrita numéricamente indicando cuanta cantidad de cada color es incluida en cada píxel. Cada color puede variar desde el mínimo (ausencia de color) hasta el máximo (intensidad completa). Si todos los colores están al mínimo el resultado será el color negro, por el contrario, de encontrarse todos los colores a su máxima intensidad, el resultado será blanco. El rango de estos colores puede expresarse de varias formas. La ciencia del color habla de colores entre el rango 0.0 y 1.0. Los valores de estos colores también pueden ser descritos como porcentajes (0 % hasta 100 %), como números en el rango 0-255 (opción más extendida en informática) o de manera hexadecimal (generalmente precedidos por el prejo #). Existe una variante de RGB que incluye un canal extra de 8 bit para las transparencias, dando como resultado un formato de 32 bpp. El canal de transparencia es conocido comúnmente como canal alfa, de ahí su nombre RGBA. No se considera como un modelo de color distinto, es solo un formato que integra información de transparencia junto a la información de color.

• CMYK El modelo de color Cyan Magent Yellow blacK (CMYK), utilizado en impresión, es un modelo sustractivo que dene los colores basándose en los componentes cian, magenta, amarillo y negro. En los modelos de color sustractivos, como CMYK, el color (es decir, la tinta) se añade a una supercie, como puede ser un papel en blanco. A continuación, el color sustrae brillo de la supercie. Cuando el valor de cada componente de color (C,M,Y) es 100, el color resultante es el negro. Cuando el valor de cada componente es 0, no se añade ningún color a la supercie, por lo que se verá la supercie misma; en este caso, el papel blanco, como podemos ver en la Fig.3.3. El negro (K) se incluye en el modelo de color por motivos de impresión, ya que la tinta negra es más neutra y oscura que su equivalente al mezclar cantidades iguales de C, M e Y. El modelo CMYK es adecuado principalmente para la creación de imágenes que se van a imprimir ya que la imagen mostrada en pantalla suele presentar diferencias con su versión impresa.

• HLS Muchas personas consideran el modelo de color Hue Lightness Saturation (HLS) más intuitivo porque dene los colores en función del matiz, la claridad (o luminosidad) y la saturación. Para especicar un color, puede seleccionar su matiz en un espectro de arco iris, seleccionar su saturación (la pureza del color) y establecer su luminosidad (de claro a oscuro). El rojo vivo es 42 3.1. MAPA DE BITS

Figura 3.2: RGB Figura 3.3: CMYK

un color brillante muy saturado. Los tonos pastel, como el rosa claro, son menos saturados. El matiz se especica en grados (de 0 a 360 grados) y la saturación y la claridad se especican en porcentajes de 0 hasta 100 por ciento. Todo color HLS con cero saturación es un gris neutro.

• HSB/HSV El modelo de color Hue Saturation Brightness (HSB) es muy similar al HLS, excepto en que se usa el valor B (luminosidad) del color en lugar de claridad. El modelo de color HSB utiliza los matizes H, S y B como componentes para denir los colores. HSB también se denomina Hue Saturation Value (HSV). El matiz describe el pigmento de un color y se expresa en grados para representar la ubicación del espectro de colores estándar. Por ejemplo, el rojo tiene 0 grados, el amarillo 60 grados, el verde 120 grados, el cian 180 grados, el azul 240 grados y el magenta 300 grados (Fig.3.4. La saturación determina si un color es vivo o apagado. Cuanto mayor es el valor de saturación, más vivo es el color. El brillo determina la cantidad de blanco que contiene el color. Como ocurre con la saturación, los valores de brillo varían de 0 a 100 y representan porcentajes (cuanto mayor es el valor, más brillante es el color).

• Modelo de color de escala de grises El modelo de color de escala de grises dene el color en un único canal, la luminosidad, que se mide con valores comprendidos en un rango denido similar al de la Fig.3.5 (0-255 , 0-1). Cada uno de los colores de la escala de grises tiene un valor equivalente de los componentes rojo, verde y azul del modelo de color RGB. Al cambiar el color de una fotografía a escala de grises se crea una fotografía comúnmente conocida como en blanco y negro.

Figura 3.4: HSB Figura 3.5: Escala de grises

3.1.2 Formatos de imagen de mapa de bits

En función de la estructura de la información almacenada, la imagen se puede almacenar en diferentes formatos. Los más extendidos son: CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 43

Sin compresión

• BMP Windows Bitmap o Bit Mapped Picture (BMP). Se caracterizan por ser muy poco ecientes en su uso de espacio en disco, pero pueden mostrar un buen nivel de calidad. No son utilizables en páginas Web debido a su gran tamaño en relación a su resolución. Dependiendo de la profundidad de color que tenga la imagen cada píxel puede ocupar uno o varios bytes. Generalmente estos archivos se suelen transformar en otros formatos, tales como JPEG, GIF o PNG, que utilizan algoritmos de compresión para obtener un menor tamaño del archivo.

Con compresión

• PNG Portable Network Graphic Format (PNG) es un formato gráco basado en un algoritmo de compresión sin pérdida para no sujeto a patentes. Usan la extensión .png y se ha establecido como un tipo Multipurpose Internet Mail Extensions (MIME). Sus principales características son:

– Admite imágenes indexadas con transparencia de 1 bit. – Generalmente PNG realiza una buena compresión, aunque en algunas ocasiones se generan cheros de mayor tamaño. Esta característica tiene relación con la posibilidad de generar imágenes en este formato con distintos niveles de compresión, que permite diferentes tamaños de chero según las necesidades, a expensas de una posible pérdida de velocidad en su representación como consecuencia del proceso de descompresión. En cualquiera de sus niveles, la calidad de la imagen es idéntica. – El PNG admite formatos con una profundidad de color de millones de colores y canal alfa, lo que proporciona rangos de color muy ricos y precisos y una disposición de valores de transparencia intermedios. – No soporta animación.

• JPG/JPEG El formato de archivos Join Photographic Experts Group (JPEG) se abrevia a JPG debido a que algunos sistemas sólo aceptan tres letras de extensión. Es un algoritmo diseñado para comprimir imágenes con 24 bits de profundidad o en escala de grises. Se trata de un algoritmo de compresión con pérdida. Esto signica que al descomprimir la imagen no obtenemos exactamente la misma imagen que teníamos antes de la compresión. Una de las características que hacen muy exible el JPEG e el poder ajustar el grado de compresión. JPEG es también el formato de chero que utiliza este algoritmo para comprimir imágenes. El algoritmo de compresión JPEG se basa en dos defectos visuales del ojo humano. Uno es el hecho de que es mucho más sensible al cambio de luminancia que en la crominancia, es decir, notamos mejor los cambios de brillo que de color. El otro es que notamos con más facilidad pequeños cambios de brillo en zonas homogéneas que en zonas donde la variación es grande, como en los bordes de los cuerpos.

• GIF Graphics Interchange Format (GIF). Es un formato gráco utilizado ampliamente en la World Wide Web, tanto para imágenes como para animaciones. GIF consiguió ser muy popular porque podía usar el algoritmo de compresión LZW (Lempel Ziv Welch) para realizar la compresión de imagen. Sus principales características son:

– Profundidad de color: 8 bits máximo. 44 3.2. IMAGEN VECTORIAL

– Permite transparencia de 1 bit. – Permiten hacer animaciones simples. – Permite utilizar entrelazado en imágenes.

• TIFF Tagged Image File Format (TIFF). Su nombre se debe a que los cheros contienen, además de los datos de la imagen, una serie de etiquetas en las que se archiva información sobre las características de la imagen que sirven para su posterior tratamiento. Estas etiquetas describen el formato que puede ser de distinta naturaleza:

– Binarias (blanco y negro). Adecuadas para texto, entre otras. – Niveles de gris. Utilizadas para representación de tonos continuos como imágenes en blanco y negro. – Paleta de colores. Útil para el almacenamiento de diseños grácos con un número limitado de colores – Color real. Adecuadas para imágenes de tono continuo, como fotos en color.

Las etiquetas también nos indican el tipo de compresión aplicado. Este tipo de compresión puede utilizar distintos métodos como PackBits, Human modicado, LZW o JPEG. También puede no presentar ningún tipo de compresión

3.2 IMAGEN VECTORIAL

Las imágenes vectoriales son imágenes constituidas por objetos geométricos autónomos (líneas, curvas, polígonos, etc), denidos por ciertas funciones matemáticas (vectores) que determinan sus características (forma, color, posición, etc). Los elementos grácos presentes en un archivo vectorial se denominan objetos. Cada objeto es una entidad completa con propiedades tales como color, forma, contorno, tamaño y posición en la pantalla, que están incluidas en su denición. Por tanto una imagen vectorial es el resultado de una serie de cálculos matemáticos relativos a la posición y los atributos de cada elemento que la compone. Por ejemplo, donde un programa de dibujado digital como el Adobe Photoshop representa un círculo como un conjunto de píxeles otro programa de ilustración vectorial como el genera una instrucción geométrica, dibujando un círculo con centro en el punto (x,y) con un radio r, como podemos ver en la Fig. 3.6. Al modicar sus dimensiones o su forma no existe ningún tipo de distorsión o pérdida de calidad, como sí ocurre con los mapas de bits, sino que simplemente el programa recalcula las uniones entre los puntos y devuelve una nueva imagen, tan nítida como la anterior. Los formatos de las imágenes vectoriales o la extensión del chero está muy ligados al tipo de software que se utiliza para crearlas o interpretarlas, y aunque existen maneras de convertir de un formato a otro, siempre existe pérdida de información en dicha conversión, pudiendo llegar a estropear la imagen dando lugar a pérdida de información. Los formatos de imagen vectorial más extendidos son: Tecnologías propietarias:

• Adobe Illustrator Artwork (AI). El formato Adobe Illustrator Artwork (AI) es un formato de archivo propietario desarrollado por Adobe Systems. El formato de archivo AI se compone de rutas establecidas mediante la conexión de puntos. CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 45

Figura 3.6: Comparación entre una representación bit a bit y una vectorial.

• CorelDRAW (CDR). El formato de archivo CDR fue desarrollado por Corel Corporation y se utiliza principalmente para dibujos e imágenes de grácos vectoriales. El formato de archivo CDR es reconocido por la mayoría de programas de edición de imagen.

• Encapsulated PostScript (EPS) Es un archivo PostScript que satisface algunas restricciones adi- cionales. Un archivo EPS contiene un comentario BoundingBox (bordes de la caja), describiendo el rectángulo que contiene a la imagen. Muchas aplicaciones pueden utilizar esta información para distribuir elementos en una página.

• ShockWave Flash (SWF). Es un formato de archivo de grácos vectoriales creado por la empresa Macromedia (actualmente Adobe Systems). Suelen ser ejecutados sobre el navegador mediante un plugin llamado Adobe Flash Player, aunque también pueden ser encapsulados para ejecutarse de forma autónoma. Básicamente es un formato vectorial aunque también admite bitmaps, con posibilidades de animación.

Tecnologías libres:

• Open Document format for Graphics (ODG). Los archivos con la extensión ODG son archivos de imagen y documentos grácos enlazados con la versión 2 de OpenDocument de OpenOce. La extensión ODG se utiliza como especicación del archivo vectorial de OpenDocument. El objetivo básico de estos archivos es ofrecer un tipo gratuito no propietario accesible por cualquier usuario en cualquier sistema operativo.

• Portable Document Format (PDF). El formato de documento portátil (PDF) se utiliza para pre- sentar e intercambiar documentos de forma able, independiente del software, el hardware o el sistema operativo. Inventado por Adobe, PDF es ahora un estándar abierto y ocial reconocido por la Organización Internacional para la Estandarización (ISO), y cuenta con el software pro- pietario y gratuito de la compañía para su visualización (Acrobat Reader DC). Los archivos PDF pueden contener vínculos y botones, campos de formulario, audio, vídeo y lógica empresarial. Permite rma electrónica.

• Scalable Vector Graphics (SVG). Es un formato vectorial basado en XML con un uso ampliamente extendido en la representación de imágenes en la web.

• Drawing Exchange Format (DXF). El formato DXF es un formato de archivo CAD que surge ante la necesidad de interoperabilidad del formato DWG de AutoCad con otros formatos 46 3.3. COMPARACIÓN BIT VS VECTOR

3.3 COMPARACIÓN BIT VS VECTOR

En la Tabla 3.1 se exponen de forma resumida las características principales de los modos de representación de la imagen vistos anteriormente: mapa de bits e imagen vectorial.

Imagen de mapa de bits Imagen vectorial Los píxeles requieren menos operaciones Requieren mayor cantidad de operaciones del procesador del procesador para ser decodicados. para ser decodicados y desplegados en la pantalla, ya que siempre se convierten nalmente en una imagen de píxeles a través de un proceso de render Como consecuencia del almacenamiento Almacenan en pocos bytes información compleja, de manera de cada punto de la imagen, ocupan ma- que se transeren rápidamente a través de las redes. yor espacio en memoria, y requieren un tiempo mayor de transferencia a través de las redes. Tienen una resolución ja, determinada Son independientes de la resolución, es decir, con la descrip- por la cantidad de pixeles que se hayan ción geométrica almacenada se pueden generar imágenes de almacenado en el archivo. Cualquier ope- diversos tamaños de pixeles, tan sólo ampliando la escala del ración de reducción o ampliación de la vector. cantidad de pixeles, redunda en una pér- dida de información o aliasing. Son buenos para almacenar texturas No son buenos para almacenar texturas, sino más bien áreas complejas. de color plano o representaciones matemáticas como degra- dados. Son aptas para la representación de ob- En general, no son aptas para la representación de objetos jetos del mundo real. del mundo real aunque se puede utilizar con ese propósito.

Tabla 3.1: Mapa de bits VS imagen vectorial. [7]

3.4 COMPARACIÓN DXF-SVG

Debido a los requisitos para el desarrollo de este TFG y a las tecnologías utilizadas en Indra, en esta sección se estudiarán en más detalle las tecnologías DXF y SVG. Se trata de las dos tecnologías candidatas para su utilización durante el desarrollo de los proyectos en relación con la vectorización e imagen vectorial. A continuación se exponen las características de estos formatos, y los motivos por los que han sido considerados para formar parte de este desarrollo.

3.4.1 Drawing Exchange Format (DXF)

El formato nativo de los dibujos de Autocad se basa en los archivos DWG, que son archivos compactos con formatos no documentados (propietario) lo cual hace complicado trabajar directamente con ellos. El nombre de la extensión .dwg se originó de la palabra inglesa "drawing". Para facilitar el intercambio de información se desarrolló el formato DXF, escritos de manera secuencial, que permite la lectura y escritura desde otros programas. Son archivos American Standard Code for Information Interchange (ASCII) escritos por parejas de datos, correspondientes a un identicador y en la línea siguiente un valor para este identicador que lo precede. La estructura general de los archivos DXF [17] consta de varias secciones: CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 47

• HEADER: se incluyen los valores correspondientes a la información general del archivo Auto- cad. • TABLES: Contiene deniciones de las entidades. – LTYPE: Tipos de líneas. – LAYER: Capas. – STYLE: Estilos de texto. – VIEW: Vistas. – UCS: Sistemas de coordenadas del usuario. – VOPRT: View Ports. – DIMSTYLE: Tipos de estilos de dimensionado. – APPID: Identicación de aplicaciones • BLOCKS: Esta sección contiene las entidades de dibujo que dene cada uno de los bloque empleados en el mismo. • ENTITIES: Incluye la información de todas las entidades que lo componen. Contiene todos los elementos de dibujo incluyendo las referencias hechas a los bloques insertados en el mismo. • END OF FILE: Compuesta simplemente por el identicador de sección y un EOF.

Estructura DXF

Un pseudo ejemplo de la organización general del archivo DXF se muestra en el listado 3.1. Listado 3.1: DXF

1 0 § ¤ 2 SECTION 3 2 4 HEADER 5 [[[ Aquí se incluye la información de la sección HEADER ]]] 6 0 7 ENDSEC 8 0 9 SECTION 10 2 11 TABLES 12 [[[ Aquí se incluye la información de la sección TABLES ]]] 13 0 14 ENDSEC 15 0 16 SECTION 17 2 18 BLOCKS 19 0 20 [[[ Aquí se incluye la información de la sección BLOCKS ]]] 21 0 22 ENDSEC 23 0 24 SECTION 25 2 26 ENTITIES 27 [[[ Aquí se incluye la información de la sección ENTITIES ]]] 28 0 29 ENDSEC 30 0 31 EOF

¦ ¥ 48 3.4. COMPARACIÓN DXF-SVG

Podemos ver como cada sección va enmarcada dentro de una nomenclatura repetitiva, que consiste en ir precedida de las líneas del Listado 3.2:

Listado 3.2: sectionDXF

1 0 § ¤ 2 SECTION 3 2

¦ ¥ Y naliza con:

Listado 3.3: nDXF

1 ENDSEC § ¤ ¦ ¥ En la tabla 3.2 podemos observar los distintos valores para los identicadores en un archivo DXF.

Identicador Descripción 0 Inicio de una entidad, Entrada de Tabla o separador de archivo. 1 Texto primario de una entidad 2 Nombre: Tabla, Atributo, bloque etc... También identica una sección DXF 3 - 4 Otros valores de Texto 5 Manejador hexadecimal 6 Nombre de Tipo de Línea 7 Nombre de Estilo de texto 8 Nombre de Layer 9 Nombre de Variable (Solo en sección HEADER)

Tabla 3.2: identicadores generales para TEXTO (0-9)

3.4.2 Scalable Vector Graphics (SVG)

Es un estándar abierto y basado en eXtensible Markup Language (XML), promovido por el World Wide Web Consortium (W3C)[22]. Por otra parte, el formato presenta características propias implícitas en su nombre:

• Scalable: Aumentan o disminuyen su tamaño de manera uniforme.

• Vector: Los grácos vectoriales contienen objetos geométricos. Esto proporciona una mayor exibilidad en comparación con los mapas de bits que tienen que almacenar información para cada píxel del gráco.

• Graphics: Proporciona una descripción rica y estructurada de grácos vectoriales.

SVG es un lenguaje de descripción de imágenes vectoriales en dos dimensiones que trabaja con 3 tipos de objetos grácos:

• Objetos grácos de formas vectoriales.

• Imágenes raster.

• Texto. CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 49

Los objetos grácos se pueden transformar y agrupar facilitando su tratamiento. SVG permite animaciones sencillas y ecientes. Los archivos SVG permiten utilizar las tipografías con trazados y también permite incluirlas dentro del propio archivo. Esto ofrece una gran capacidad para que los motores de búsqueda sean capaces de indexarlo, por lo que mejora el Search Engine Optimization (SEO). Debido a su compatibilidad y relación con otros estándares de Web, características como el scripting pueden ser aplicadas a elementos SVG y a otros elementos XML. Los archivos SVG soportan estilos CSS (Cascading StyleSheets), de tal manera que si cambiamos el estilo de nuestra web también se cambiará dentro del archivo. Ayudan en el diseño responsive, es decir, facilitan el diseño de web apps que se adapten a cualquier pantalla, ya sea de un ordenador, de una tablet o de un smartphone.

Estructura del formato SVG

El formato SVG está estructurado en los siguientes elementos:

• Elemento ‘svg’ Un fragmento SVG consta de cualquier cantidad de elementos contenidos en un elemento “svg”. Puede contener desde un fragmento vacío, algún elemento sencillo como un círculo o una recta, hasta una gran colección de elementos “svg” anidados. Todos los objetos se encuentran enmarcados en una ventana, con un ancho y un alto determinados con números enteros.

• Elemento ‘g’ El elemento ‘g’ es un contenedor de objetos que permite agrupar elementos grácos relacio- nados. Un grupo de objetos, al igual que los elementos individuales, pueden identicarse con el atributo ‘id’. Estas agrupaciones pueden utilizarse para propósitos como animaciones o reutilización de objetos. Los objetos grácos están formados por atributos, y todos comparten algunos atributos genéricos:

– Color, representable con 4 opciones posibles ∗ Nominalmente. Red, yellow, blue, aqua, salmon, tomato, orange, lightgreen,.. ∗ Hexadecimal. ∗ Hexadecimal resumido. ∗ Funcional. Enteros o porcentuales. rgb(255,32,50) rgb(100 %,10 %,0 %) Se toma el color negro por defecto. – Contorno, cuyo grosor y color pueden ser modicados, respectivamente, usando los parámetros stroke-width y stroke. – Relleno (ll). – Opacidad (opacity).

Existen numerosos tipos de datos en SVG, podemos encontrar un buen número de deniciones de propiedades y atributos en: hps://www.w3.org/TR/SVG/types.html Podemos ver un ejemplo sencillo de código en el listado 3.4.

Listado 3.4: ejemplo SVG

1 § ¤ 2 4 6 Two groups, each of two rectangles 50 3.4. COMPARACIÓN DXF-SVG

7 8 9 10 11 12 13 14 15 16 17 19

hps://www.w3.org/TR/SVG/images/struct/grouping01.svg¦ (Enlace para la visualización¥ del anterior ejemplo)

• Elementos ‘defs’ y reutilización. SVG permite reutilización de elementos grácos. A veces se desea denir un objeto gráco y evitar que se represente directamente. Solo está para ser referenciado en otra parte. Para hacer esto, y para permitir una agrupación conveniente de contenido, SVG proporciona el elemento ’defs’. Se recomienda que, siempre que sea posible, los elementos referenciados se denan dentro de un elemento ’defs’. Entre los elementos a los que siempre se hace referencia son: ’altGlyphDef ’, ’clipPath’, ’cursor’, ’ltro’, ’linearGradient’, ’marker’, ’mask’, ’pattern’, ’radialGra- dient’ y ’symbol’. La denición de estos elementos dentro de un elemento ’defs’ promueve la comprensibilidad del contenido SVG y por lo tanto promueve el acceso. Los elementos breve- mente analizados ‘svg’, ‘g’ y ‘defs’ junto con ‘desc’, ‘title’, ‘symbol’, ‘use’ e ‘image’, conforman la estructura básica de un fragmento SVG. Para un mayor grado de estudio y detalle se puede consultar el siguiente enlace: hps://www.w3.org/TR/SVG/struct.html SVG usa un “modelo de pintores” para su renderizado. Aplica operaciones sobre un área del dispositivo de salida. Cuando una nueva acción se superpone sobre el área de otra, esta nueva acción tapa total o parcialmente lo anterior. El orden en el que los elementos son renderizados es el orden natural del archivo *.svg.

3.4.3 Conclusiones de la comparativa

A la hora de realizar la comparación entre ambos formatos, se han tenido en cuenta parámetros como el tamaño del archivo resultante, tiempo de carga, soporte para 3D, modelado, animación y renderizado. Experimentos realizados en el estudio [11] muestran que un archivo SVG es de media 4 veces menor que un archivo DXF. El análisis también permite observar que el tiempo de carga de un archivo SVG es hasta 6 veces menor. Estas características hacen que SVG sea una mejor opción para la representación de imágenes en la web. En el ámbito del modelado 3D, es DXF el que presenta unas mejores condiciones, puesto que SVG no soporta dicho modelado de forma implícita. Por otra parte, ambos soportan renderizado y animaciones, a través de la utilización de objetos o entidades. Finalmente, DXF cobrará mayor importancia en el desarrollo del proyecto ya que en el grupo Imaging de Indra S.L. han trabajado anteriormente con software que trata dicho formato , y en vista a desarrollos futuros que pueden presentar la necesidad de utilizar tecnologías 3D. No obstante, SVG también será una opción relevante en este trabajo. CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 51

3.5 VECTORIZACIÓN

Entendemos como vectorización el proceso de transformar una imagen de mapa de bits en una imagen vectorial. El proceso de vectorización de una imagen no cuenta con una única y exclusiva secuencia de realización. Existen distintas proposiciones conceptuales a la hora de vectorizar una imagen, teniendo cada una sus propias características. A continuación, se va a tratar el proceso de vectorización desde un punto de vista teórico, abordando distintas metodologías. Para un mejor entendimiento de los siguientes algoritmos, puede resultar de interés la introducción de los conceptos de triangulación de Delaunay y diagrama de Voronoi, por lo que a continuación se introducirán brevemente estos conceptos matemáticos:

• Una triangulación de Delaunay es una red de triángulos conexa y convexa que cumple la condición de Delaunay. Esta condición dice que la circunferencia circunscrita de cada triángulo de la red no debe contener ningún vértice de otro triángulo. Podemos ver dos ejemplos sobre la satisfacción de esta condición en la Fig. 3.7 y Fig. 3.8.

Figura 3.7: Ejemplo que satisface la condición de Figura 3.8: Ejemplo que no satisface la condición Delaunay de Delaunay

• Los diagramas de Voronoi son unas estructuras ampliamente utilizadas dentro de la Geometría Computacional que almacenan información referente a la proximidad entre puntos. Son uno de los métodos de interpolación más simples, basados en la distancia euclidiana, trazando una serie de mediatrices como se muestra en la Fig. 3.9. Las intersecciones de estas mediatrices generan un conjunto de polígonos en un espacio bidimensional en función del conjunto de puntos de control, consiguiendo que el perímetro de los polígonos generados sea equidistante a los puntos vecinos. Podemos ver un ejemplo de la red completa en la Fig. 3.10.

Figura 3.9: Construcción de la región de Voronoi Figura 3.10: Diagrama de Voronoi 52 3.5. VECTORIZACIÓN

3.5.1 Procedimientos teóricos. Algoritmos

En las siguientes líneas se exponen varios algoritmos empleados para la vectorización, abordados únicamente desde una perspetiva teórica con un alto nivel de abstracción.

VISTA

Vectorized Segmentation via Trixel Agglomeration (VISTA)[10] . Método implementado para transformar una imagen formada por píxeles en una imagen vectorizada compuesta por una pluralidad de polígonos. La imagen pixelada es procesada para extraer píxeles de borde que sirven de separación entre diferentes colores basando sus cálculos en triangulaciones de Delaunay. Es por tanto, un método implementado para segmentar una imagen en color formada por píxeles, siguiendo el procedimiento que se muestra en el Algoritmo 3.1.

Algoritmo 3.1: VISTA • Procesar la imagen para extraer píxeles de borde que separan diferentes colores en dicha imagen pixelada.

• Realizar una triangulación de Delaunay restringida de los píxeles de borde para formar una pluralidad de triángulos que tienen bordes que cubren la imagen pixelada

• Determinar un color para cada uno de la pluralidad de triángulos a partir de los píxeles de color dentro de cada triángulo

• Denir un ltro que tiene un conjunto de reglas de agrupamiento relacionadas con las características de la imagen pixelada

• Aplicar el ltro a la pluralidad de bordes triangulares para unir triángulos adyacentes consistentes en polígonos

• Transformar la imagen pixelada en una matriz de polígonos.

HSVGen

Conversión de mapa de bits a imagen vectorial para análisis y visualización multinivel[9]:

Algoritmo 3.2: HSVGen 1. Segmentación inicial de nivel no.

2. Renamiento de los contornos lineales de la segmentación de nivel no a subpíxeles precisos y simplicados.

3. Unión de los segmentos con los contornos en un árbol jerárquico de segmentos de la.

4. Conversión de los segmentos del árbol en una imagen SVG.

Los pasos mostrados en el Algoritmo 3.2 son en gran medida independientes y cualquier técnica de segmentación podría utilizarse para la segmentación inicial en el primer paso y cualquier técnica de segmentación jerárquica que produzca una jerarquía de bi-particiones podría utilizarse para el tercer paso. CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 53

Sin embargo, el enfoque se basa en el mismo algoritmo de fusión de regiones para ambos pasos con la única diferencia de que en el primer paso, comienza a fusionar desde el nivel de píxeles a una segmentación de nivel no y en el tercer paso, comenzamos desde la segmentación de nivel no y fusionamos hasta que la imagen completa está en un solo segmento. Ambos pasos trabajan con el mismo conjunto de restricciones que se combinan en un criterio de variación. Se consideran valores similares de luminosidad y color dentro de la misma región, y el tamaño y la longitud denen los límites de una región. Generalmente existen dos métodos de segmentación de imágenes: basado en regiones o basado en bordes. HSVGen podría decirse que utiliza un método híbrido similar a VISTA.

RaveGrid

RaveGrid (RAster to VEctor GRaphics for Image Data) [15] es un software que descompone una imagen digital consistente en píxeles en polígonos que corresponden a las características visuales de la imagen. Utiliza sólo un pequeño subconjunto de puntos de imagen, píxeles de borde, para lograr la descomposición poligonal de la imagen. Podemos observar un resumen del procedimiento que utiliza RaveGrid en el Algoritmo 3.3:

Algoritmo 3.3: RaveGrid 1. Calcular polígonos a partir de los bordes con escala na.

2. Calcular el histograma óptimo de los polígonos.

3. Seleccionar la ubicación del mayor modo de histograma como granularidad dominante de la imagen.

4. Fusionar polígonos con áreas inferiores o iguales al área de granularidad dominante con un polígono adyacente de distancia mínima.

5. Repite las etapas de la 2 a la 4 hasta que el número de polígonos converja o se obtenga el resultado deseado.

SVGStat

SVGStat [16] es una técnica de conversión de imagen raster a vectorial que consta de 3 pasos principales, los cuales se muestran en el Algoritmo 3.4:

Algoritmo 3.4: SVGStat 1. Partición de la imagen en regiones poligonales utilizando fusión de regiones estadísticas SRM (Statistical Region Merging)

2. Rastreo de fronteras de regiones segmentadas

3. Codicación de regiones con primitivas SVG.

Existen otras fuentes de interés que han servido como objeto de estudio en esta investigación sobre los distintas metodologías de vectorización, pero que por motivos de sintetización no se han expuesto en este documento [14][8][12][SVGadvanced]. 54 3.5. VECTORIZACIÓN

No todas estas soluciones teóricas cuentan con una implementación de dichos algoritmos, por lo que para el desarrollo de este proyecto optaremos por otras opciones que cuenten con un mayor soporte inicial, quedando relegadas para un posible desarrollo posterior de estas ideas.

3.5.2 Soware de vectorización

Se presentan a continuación distintas herramientas actuales que permiten realizar ya de una manera tangible la vectorización , tanto de tecnologías privadas y comerciales como opensource.

Propietario

Existen numerosas opciones para la vectorización a través de software comercial, entre los que cabe destacar:

• Adobe Streamline ->Adobe Illustrator (Live Trace). Adobe Streamline es un programa desarrollado y publicado por Adobe Systems. Su propósito principal es convertir mapas de bits escaneados en imágenes vectoriales. Streamline inicialmente se anunció como una utilidad independiente en lugar de una utilidad adicional dentro de una suite completa de dibujo, pero posteriormente se vio interrumpida cuando Adobe Illustrator CS2 introdujo una nueva herramienta Live Trace, que proporciona un trazado rápido y un control muy preciso.

• Corel® PowerTRACE™ es una utilidad para convertir mapas de bits en grácos vectoriales editables. Esta herramienta está integrada en CorelDraw. Su funcionalidad reside principalmente en utilizar curvas abiertas y cerradas sin rellenar. Su utilidad se adecua a la perfección para trazar ilustraciones técnicas, mapas, líneas y rmas.

• MagicTracer es un convertidor para Windows que cuenta con más de 100 funciones persona- lizables. MagicTracer funciona como su herramienta multiuso para la conversión de ráster a vector. Tiene una interfaz simple y vistas previas en tiempo real que le permiten ver cómo una conguración personalizada afectará a su proyecto.

• Scan2CAD es una herramienta que habilita la edición de archivos y herramientas CAD/CAM a partir de la recuperación de imágenes en formatos a priori no compatibles, como puedan ser fotografías o escaneados de planos. Permite reconocimiento de objetos, OCR, suavizado de líneas pixeladas y edición, entre otras funciones.

• Vectormagic es un conversos de imágenes en mapa de bits a vectorial, con una versión online y otra de escritorio. Es compatible con numerosos formatos de entrada como JPG, PNG, BMP y GIF, y ofrece también los principales formatos más demandados como salida, SVG, EPS, PDF, DXF y AI.

• RaveGrid es una de las opciones de vectorización y segmentación de imágenes disponible, toma imágenes las transforma en imágenes vectoriales en formato SVG. Sus números en cuanto a velocidad y la escala de conversión de archivos son signicativos. RaveGrid puede acomodar imágenes con ruido y bajo contraste, anomalías que causan que otros productos puedan fallar durante el proceso de conversión. Se requiere una licencia comercial para cualquier uso más allá del uso personal e informal.

• Super Vectorizer es una de las opciones para vectorizar imágenes para MAC. Su trabajo está pensado para logotipos comúnmente de imágenes escaneadas para limpiar los contornos con todos los detalles necesarios. Convierte imágenes de mapa de bits en grácos vectoriales como AI, SVG, DXF y PDF. CAPÍTULO 3. ESTADO DEL ARTE. ANTECEDENTES 55

Opensource

Existen alternativas opensource que ofrecen resultados muy similares en el proceso de vectoriza- ción, pese a no ser en ocasiones éste su propósito principal. A continuación tratamos algunos ejemplos:

• Geographic Information System (GIS). Un sistema de información geográca es una solución tecnológica capaz de capturar. analizar, gestionar e interpretar datos con un componente geográco. Presentan internamente componentes encargados de la transformación, en algunos casos vectorización, de la imágenes obtenidas del mundo real (ej: vía satélite), en imágenes con un formato especíco para su tratamiento mediante la formación de mapas y rutas. Algunos de los GIS[4] estudiados en este proceso son:

– QGRASS – QGIS – Google Earth Engine API

• AutoTrace. Autotrace es un software destinado especícamente a la conversión de mapas de bits a grá- cos vectoriales. Su objetivo es proporcionar una funcionalidad similar a CorelTrace o Adobe StreamLine. Distribuido bajo licencia GNU’s Not Unix (GNU) General Public License (GPL).

• Potrace Potrace (TM) es una herramienta para transformar un mapa de bits en una imagen vectorial suave y escalable. Software opensource y multiplataforma desarrollado por Peter Selinger y que permite la obtención de imágenes vectoriales en formatos muy extendidos como SVG, DXF o PDF. Está integrado dentro de herramientas de diseño como Inkscape o de composición tipográca de partituras como LilyPond.

CAPÍTULO 4 ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS

El objetivo principal de este TFG es la creación de un sistema que pueda vectorizar imágenes de unas determinadas características con el n de con ello facilitar el desempeño de distintas tareas de la empresa Indra. Durante el desarrollo del presente capítulo se analizarán y describirán los componentes necesarios para el desarrollo y validación de este proyecto.

4.1 POTRACE. PO-LYGON TRACE-R.

Software opensource y multiplataforma que permite la conversión de imá- genes de mapa de bits en imágenes vectoriales, como SVG, DXF o PDF. Está integrado dentro de herramientas de diseño como Inkscape o de composi- ción tipográca de partituras como LilyPond. El objetivo principal del sistema desarrollado en este TFG es una correcta y eciente vectorización que aporte benecios a algunos proyectos que trabajan con tratamiento de imagen. Por lo que tras haber estudiado las diferentes posibilidades y comparado con otras metodologías presentadas en el Capítulo 3 de este TFG, se ha seleccionado Potrace porque:

• Soporta el formato DXF, tecnología conocida y empleada en otros proyectos del grupo de desarrollo de visión articial de Indra S.L., además de ser de código libre y de uso extendido.

• Soporta el formato SVG, que cuenta con un uso muy extendido tanto en el mundo vectorial como en la representación de grácos en desarrollos web.

• Presenta una buena documentación sobre su estructura, API y parámetros, lo que aporta un grado de formalidad.

• Forma parte de Inkscape, un software opensource de contrastada reputación.

Para asegurarnos de que Potrace es una opción válida para nuestro sistema, es necesario el conocimiento de la estructura interna y funcionamiento de Potrace. Como su nombre indica, Potrace utiliza un algoritmo de vectorización basado en polígonos. Este nombre no implica que la salida resultante sea un polígono, sino una serie de contornos suavizados a partir de curvas de Bézier. El nombre del algoritmo deriva del hecho de que utiliza polígonos como una etapa intermedia en la vectorización de imágenes. 58 4.1. POTRACE. PO-LYGON TRACE-R.

El algoritmo de Potrace está diseñado para trabajar con grandes resoluciones de imágenes. Dos de las funciones que utiliza son: encontrar la curva más plausible que se aproxima a un contorno dado, y detectar esquinas. Un ajuste muy preciso es una tarea compleja, puesto que si se detectan demasiadas esquinas, aparecerá la imagen demasiado poligonalizada. Por otra parte, en el extremo contrario se puede producir una imagen demasiado redondeada. Podemos ver un ejemplo en la Fig. 4.1.

Figura 4.1: (a) Original (b) Alta detección de esquinas (c) Alta aproximación de curvas (d) Buen ajuste

Por tanto, se ha escogido Potrace como núcleo de este proyecto, llevando a cabo la parte principal del proceso, la vectorización. Pero antes de empezar con el estudio de Potrace, haremos una breve explicación de una herra- mienta opcional, que puede resultar de gran ayuda realizando un preprocesamiento (binarizado) a nuestras imágenes. MkBitmap.

4.1.1 MkBitmap. Preprocesamiento.

Mkbitmap es un programa distribuido con Potrace que permite preprocesar la entrada, con el n de obtener un mejor comportamiento en la vectorización de imágenes en escala de grises o en color. Es particularmente útil para convertir imágenes de líneas escaneadas, como dibujos animados, texto escrito a mano, etc, en imágenes bitonales de alta resolución. Los formatos de entrada admitidos para Mkbitmap son PNM (PBM, PGM, PPM) y BMP. Los formatos de salida son PBM para bitmaps y PGM para greymaps. Esta librería carga una imagen para posteriormente aplicar una o más de las siguientes operaciones, en el siguiente orden: inversión, ltrado highpass, escalado y umbralización. Cada operación puede controlarse individualmente y elegir su activación. La llamada a esta herramienta tiene la siguiente forma: mkbitmap [options] [lename]

Opciones de procesamiento de imagen

A continuación se van a exponer una a una las diferentes opciones que presenta Mkbitmap con el objetivo de hacer un repaso de las más importantes, ya que sin algunas de estas opciones nuestro proceso de vectorización se ve seriamente afectado y no conseguiría los resultados esperados.

• -x, –nodefaults Desactiva los valores por defecto. Normalmente las siguientes opciones son las preseleccionadas por defecto: -f 4 -s 2 -3 -t 0.45.

• -i, –invert Invierte la imagen de entrada. Si esta opción es elegida, se aplica a la imagen antes que cualquier otra. Esta opción es comúnmente utilizada en imágenes de blanco sobre negro, tales como las CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 59

realizadas sobre una pizarra. Este comportamiento no es igual que invertir el bitmap de salida, a no ser que el thresholding también se invierta.

• -f n, –lter n Aplica un ltro highpass a la imagen. Este ltro es Gaussiano y no direccional. El efecto es preservar detalles pequeños. El parámetro n es un radio (en pixels) el cual corresponde aproximadamente con el tamaño de detalle que queremos preservar. Más en concreto, el ltro está implementado para sustraer una imagen difuminada de la imagen orignial. El parámetro n es igual que la desviación estándar del blur. El radio por defecto es 4.

• -n, –nolter Desactiva el ltro highpass

• -b n, –blur n Desdibuja la imagen. El efecto e un suavizado y una reducción del ruido visual en la imagen. El parámetro n es el radio de blurring (1 es un buen valor). Blurring se aplica después del ltro highpass pero antes que el escalado y el umbral. Si esta opción no está especicada, lo normal es que no se aplique.

• -s n, –scale n Escala la imagen con un factor n>0. El escalado se efectúa después del ltro highpass, pero antes del ltro de umbral. Un factor de escala de 1 indica que no se ha realizado ninguna escala. Por otra parte, una interpolación se realiza para completar el nuevo espacio entre pixels. Si la salida de Mkbitmap es utilizada como entrada de otro software (Potrace en este caso) un factor de 2 es lo recomendado. Un factor de 1 conllevaría una pérdida de información. Del mismo modo, con un factor de 3 o superior, la interpolación tienda a ’inventarse’ información.

• -1, –linear Se usa la interpolación lineal para un escalado a una resolución mayor. Es ligeramente más rápida, pero menos precisa que la interpolación cúbica.

• -3, –cubic Se usa la interpolación cúbica cuando se escala a una resolución mayor. Esta es la opción por defecto. Es más lenta que la interpolación lineal pero obtiene mejores resultados.

• -t n, –threshold n Establece el umbral de gris para la conversión en dos niveles. El parámetro n es un valor de brillo entre 0 (negro) y 1 (blanco). Set the threshold grey value for bilevel conversion.

• -g, –grey Desactiva la conversión en dos niveles. Si esta opción es escogida, el proceso se detiene después del escalado y el resultado es una imagen en escala de grises.

En los siguientes párrafos, se exponen algunos puntos que se han considerado de interés especíco para este trabajo y que resultan útiles en el empleo de estas opciones que nos ofrece Mkbitmap. 60 4.1. POTRACE. PO-LYGON TRACE-R.

Puntos clave

El ltro highpass se puede usar para garantizar que las características de primer plano, como las líneas y el texto, se conserven, a la vez que se compensa el fondo irregular. Se puede aplicar un desenfoque opcional para suavizar la imagen y eliminar el ruido visual.

El escalado es importante porque una imagen escaneada en escala de grises contiene más detalles visuales que una imagen a dos niveles con la misma resolución. Al escalar la imagen a una resolución más alta (utilizando la interpolación) antes de ajustarla, se conserva parte de este detalle.

Otro punto de interés es el umbral. Denir un valor para esta umbralización signica convertir una imagen en escala de grises en una imagen binaria utilizando solo píxeles blancos y negros. Los píxeles que son más oscuros que un cierto valor de umbral se convierten a negro, en el caso contrario, a blanco. La inversión de estas imágenes binarias, que es un intercambio de valores de 0 y 1 (blanco y negro), puede resultar útil cuando las imágenes de entrada muestran características brillantes sobre fondo oscuro, un claro ejemplo es una imagen de dibujos de tiza en una pizarra.

En resumen, transforma imágenes en mapas de bits utilizando factores de escalado y diversos tipos de ltros, que facilitarán la obtención de una mejor imagen en formato vectorial tras su vectorización utilizando Potrace.

Ejemplos Mkbitmap

Las siguientes imágenes ilustran el efecto del ltrado highpass y escalado.

Figura 4.2: Imagen original

Si aplicamos un método de umbralización simple para convertir imágenes en escala de grises a blanco y negro, no obtendremos el umbral correcto. El fondo se vuelve negro antes de que el primer plano sea satisfactorio. Véase el conjunto de imágenes de la Fig.4.3. CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 61

Figura 4.3: Umbralización sin ltro highpass

El ltrado highpass suprime las irregularidades a gran escala, como las variaciones de fondo, mientras que conserva los detalles a pequeña escala, como las líneas. El ltrado depende de un parámetro llamado radio de ltro, que corresponde aproximadamente al tamaño de las características que se conservan. El radio del ltro también se puede identicar con el grosor de la línea. La siguiente secuencia de imágenes de la Fig. 4.4 ilustra el efecto del parámetro de radio de ltro.

Figura 4.4: Umbralización con ltro highpass

Un mapa en escala de grises contiene más información por píxel que un mapa de binario. Nor- malmente, cuando se ingresan los umbrales, se pierde este detalle adicional. Sin embargo, se pueden recuperar algunos de estos detalles escalando la imagen a una resolución más alta (usando la in- terpolación para calcular píxeles intermedios) antes de aplicar el paso de umbral. Las siguientes ilustraciones muestran dos imágenes escaladas por un factor de 2. La primera ilustración (Fig. 4.5) 62 4.1. POTRACE. PO-LYGON TRACE-R. muestra el resultado de la escala después del umbral. Mientras que la segunda ilustración (Fig. 4.6) muestra el resultado de la escala antes del umbral. Como se puede observar, la segunda imagen conserva mucho más detalles que la primera.

Figura 4.5: Escalado posterior al umbralizado: Figura 4.6: Escalado previo al umbralizado: mk- mkbitmap -f 2 -s 1 -t 0.48 | pnmscale 2 bitmap -f 2 -s 2 -t 0.48

Las siguientes dos imágenes ilustran cómo la salida de mkbitmap puede ser utilizada por Potrace facilitando su trabajo. La primera imagen (Fig. 4.7) no se ha escalado antes del umbral. La segunda imagen (Fig.4.8) se ha escalado antes del umbral. Por lo tanto, en la segunda imagen, se pasó un mapa de bits de mayor resolución a Potrace. Es claramente visible que la segunda imagen muestra muchos más detalles que la primera. Esto es particularmente visible en la sección de texto.

Figura 4.7: Sin escalado: mkbitmap -f 2 -s 1 -t 0.48 Figura 4.8: Escala 2: mkbitmap -f 2 -s 2 -t 0.48 | | potrace -t 5 potrace -t 5 CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 63

4.1.2 Algoritmo de Potrace

En primer lugar, podemos resumir el algoritmo empleado por Potrace en 5 etapas (4 + 1 opcional). Para ello se muestra el siguiente Algoritmo 4.1

Algoritmo 4.1: Potrace 1. Descomposición del mapa de bits en un conjunto de caminos, los cuales conforman las fronteras entre las áreas blancas y negras.

2. Aproximación de cada camino por un polígono para conseguir una optimización.

3. Transformación de cada polígono en una curva suavizada.

4. (Opcional) Optimización de la curva resultante a través de la unión de curvas de Bezier próximas y consecutivas cuando sea posible.

5. Generación de la salida en el formato requerido

1. Formación de caminos Construye un grafo dirigido a partir de la información que nos proporciona el mapa de bits. Si v y w son vértices, decimos que hay un borde de v a w si:

• La distancia euclidiana entre v y w es 1. • El segmento de línea recta de v a w separa un píxel negro de un píxel blanco.

Denimos un camino como una secuencia de vértices entre los cuales existen aristas o bordes formando una secuencia. Un camino se denomina cerrado si el vértice nal coincide con el inicial. La longitud de un camino corresponde con el número de aristas. Potrace usa el siguiente método directo para descomponer un mapa de bits en caminos. Comienza seleccionando un par de píxeles adyacentes de diferente color. Continúa moviéndose a lo largo de los bordes entre los píxeles, y cada vez que encontramos una esquina, sigue recto, gira a la izquierda o derecha, siguiendo las políticas de giro que se explicarán a continuación. Se realiza este procedimiento hasta que volvemos al vértice inicial, deniendo así un camino cerrado.

• Políticas de giro: En el algoritmo de Potrace, la elección de continuar recto, girar a izquierda o derecha, queda denida en una política de giro, la cual se dene a través del parámetro –turnpolicy. Existen varias opciones para esta elección. La política por defecto es minority, que conecta con el vértice adyacente cuyo color ocurre con una menor frecuencia. • Despeckling: Realiza una extracción de los caminos cuyo tamaño sea menor a un tamaño t, el cual se establece a través del parámetro –turdsize.

2. Formación de polígonos.

Transforma un camino cerrado de entrada en un polígono que se aproxima al camino como salida. A continuación se denen algunos conceptos utilizados por Potrace para una mejor comprensión del algoritmo.

• Caminos rectos: Denimos una ruta p como recta si es aproximada por algún segmento de línea, en la cual no ocurren en dicha ruta las cuatro direcciones de giro posibles. 64 4.1. POTRACE. PO-LYGON TRACE-R.

Figura 4.9: Ejemplo de caminos rectos (imagen de Potrace).

• Polígonos: Denimos como polígono, dentro del contexto de esta fase del algoritmo, a un camino cerrado, el cual es una secuencia vértices y aristas que posee una forma similar y aproximada al segmento de referencia.

• Optimizaciones y polígono óptimo: Uno de los criterios de optimización es el número de segmentos, consideramos más optimizado un polígono cuando presenta un número menor de segmentos. Podemos observar este hecho en la Fig. 4.10. Sin embargo, existen otras características a tener en cuenta partiendo de polígonos que puedan presentar el mismo número de segmentos. Un ejemplo de ello son las penalizaciones. Tomando como partida un posible segmento que va desde i a j, se asocia a él la línea recta que va desde i a j. La penalización asociada al segmento es igual a la distancia Euclidiana de i a j X veces, siendo X la desviación Euclidiana de los puntos del camino de i a j. Desde un una perspectiva más simple, podemos concluir que presenta una mayor optimización el polígono con una menor penalización. Se reduce el problema de la optimización, a la búsqueda de un ciclo óptimo en un grafo dirigido. Esto hace que nuestro algoritmo no sea local, a diferencia de la fase anterior y la posterior, ya que necesita el conocimiento del camino completo.

Figura 4.10: Polígono óptimo vs polígono no óptimo (imagen de Potrace).

3. Formación de curvas.

Esta fase del algoritmo transforma el polígono anteriormente obtenido en un conjunto de líneas curvas suavizadas. En un paso previo, se ajusta la posición de los vértices del polígono para ajustarse CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 65 lo máximo posible al mapa de bits original. Posteriormente, en la fase principal, se calculan esquinas y curvas basadas en las líneas adyacentes y los ángulos existentes. De manera aclaratoria y para una mejor entendimiento de los siguientes puntos, denimos una curva de Bezier como una línea formada a partir de 4 puntos y una ecuación paramétrica. Como observación destacar que distintos conjuntos de puntos pueden generar la misma curva resultante.

• Ajuste de vértices. Se realiza un ajuste ve los vértices del camino cerrado, situándolos en el plano en una distancia como máximo de 1/2 sobre la distancia original.

• Suavizado y análisis de esquinas. Realiza un estudio de cada esquina del polígono ajustado resultante de la etapa anterior. A través de un estudio se ajusta una aproximación mediante una curva suavizada o un ángulo agudo. Existe un parámetro alpha que nos marca la frontera entre aproximar con una curva o mediante líneas rectas. Por defecto este valor está marcado en 1, siendo transformados en curvas cuando dicho valor para cada esquina es menor o igual a 1, y quedando dos líneas rectas cuando dicho valor es mayor a 1. Este valor puede ser modicado a través del parámetro –alphamax. La aparición de esquinas rectas está favorecida por los ángulos agudos y los segmentos largos.

Figura 4.11: Ejemplo de curvatura y diferentes tipos de esquinas (imagen de Potrace).

4. Optimización de curvas.

En la etapa anterior se ha obtenido un resultado muy similar a la salida nal que nos ofrece Potrace. Este resultado consiste en un conjunto de curvas de Bezier y líneas rectas. Pero no obstante, una mayor optimización a partir de la unión de curvas de Bezier adyacentes es posible. Esta optimización ofrece una mejora que normalmente no es visible, pero sí que aporta un resultado más compacto en cuanto a su estructuración. Esta optimización se puede deshabilitar con el parámetro –longcurve. Esta optimización sigue las siguientes ideas.

• La primera, es que solamente se unen líneas curvas adyacentes, nunca líneas rectas o esquinas.

• En segundo lugar, solo se unen curvas adyacentes que concuerdan en convexidad.

• Y tercero, solo se unen líneas curvas cuyo cambio de dirección sea como máximo 179 grados. 66 4.1. POTRACE. PO-LYGON TRACE-R.

5. Generación de una salida.

Por último, el algoritmo de Potrace presenta una serie de procedimientos que permiten unos mejores resultados en el proceso de vectorización:

• Escalado y rotación El algoritmo de Potrace produce un conjunto de curvas (de Bezier y rectas) en las que los puntos nales y de control están arbitrariamente situados en el plano. Dependiendo de los parámetros establecidos en Potrace, se realiza una transformación lineal (escalado y rotación de la imagen para la obtención del tamaño deseado).

• Código redundante Las curvas de Bezier presentan en ocasiones información que puede ser reducida para una mayor eciencia. Dichas redundancias de código pueden ser seleccionadas con el parámetro –longcoding. Este tratamiento de código reduntante solo están soportadas por el proceso de backend en PostScript.

• Cuantización Para la mayoría de los backend, las coordenadas nales, que son números reales, se cuantican, lo que signica que están redondeados al 1/10 píxel más cercano. Por lo tanto, el número de dí- gitos decimales necesario para representar cada coordenada se reduce colocando efectivamente todos los puntos de control en una cuadrícula muy na. Las coordenadas de los puntos se pueden dar como enteros. La constante de cuanticación predeterminada de 1/10 generalmente da buenos resultados, sin embargo, se puede congurar a través de la opción –unit.

Tras haber realizado estos último procesos de optimización de la salida, el último paso por realizar es la traducción de esta información al formato de imagen vectorial indicado. CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 67

Ejemplo completo.

En la Fig. 4.12 podemos observar de una manera visual las 5 etapas explicadas anteriormente por las que pasa una imagen durante el proceso de vectorización con Potrace

Figura 4.12: Ejemplo completo del proceso de vectorización con Potrace: (a) bitmap original, (b) descom- posición de camino y polígono óptimo c) ajuste de vértices, análisis de esquinas y suavizado, (d) optimización de curvas, (e) resultado nal. (imagen de Potrace).

4.1.3 API

La Api de Potrace proporciona una conversión de bitmap a una representación mediante vectores (curvas de Bezier y líneas rectas). No incorpora funcionalidad frontend como la preparación de bitmaps para su procesado, la lectura de un chero o thresholding. Tampoco incorpora funcionalidad backend como el postprocesado de la imagen vectorial para la conversión en un determinado formato. 68 4.1. POTRACE. PO-LYGON TRACE-R.

Representación de datos

A continuación se exponen las diferentes estructuras que componen el cuerpo de Potrace.

1. Bitmap

(a) Sistema de coordenadas El origen del sistema de coordenadas se establece en la esquina inferior izquierda. Siendo w y h, el ancho y alto respectivamente, el bitmap tiene como coordenadas de sus cuatro esquinas (0, 0), (0, h), (w, h), (w, 0). Se establece un píxel [i,j] mediante las coordenadas de sus 4 esquinas: (i, j), (i, j + 1), (i + 1, j + 1), (i + 1, j). Por tanto, dado un píxel [i,j], observamos que éste tiene su centro en las coordenadas (i + 0.5, j + 0.5). Para evitar confusiones, se utilizará la nomenclatura de [i,j] para referirse al píxel, e (i,j) para referirse al punto. (b) Representación bitmap La librería de Potrace requiere bitmaps en el siguiente formato, denido en el listado 4.1 que forma parte de potracelib.h:

Listado 4.1: potrace_bitmap

1 struct potrace_bitmap_s { § ¤ 2 int w, h; /* width and height, in pixels */ 3 int dy; /* scanline offset in words */ 4 potrace_word *map; /* pixel data, dy*h words */ 5 }; 6 typedef struct potrace_bitmap_s potrace_bitmap_t;

potrace_word¦ es un entero sin signo denido en potracelib.h. Es equivalente a una palabra¥ nativa de lenguaje máquina. En la explicación, asumimos que el tipo potrace_word contiene N bits. Un mapa de bits de dimensiones w * h se divide, de abajo arriba, en h líneas de exploración horizontales. Cada línea de exploración se divide, de izquierda a derecha, en bloques de N píxeles. Cada uno de esos bloques de N píxeles se almacenan como un solo potrace_word. Los píxeles de color negro, se representan con un bit de valor 1, siendo 0 en caso contrario. Es importante tener muy en cuenta que estos bitmaps se almacenan como cadenas de palabras, y no de bytes. Esto conlleva que exista una diferenciación entre arquitecturas big-endian o little-endian, por lo que hay que tener en cuenta el byte-order. 2. Formato vectorial

(a) Puntos Un punto en el plano Euclídeo está representado en Potrace con el tipo potrace_dpoint_t (listado 4.2).

Listado 4.2: potrace_dpoint

1 struct potrace_dpoint_s { § ¤ 2 double x, y; 3 }; 4 typedef struct potrace_dpoint_s potrace_dpoint_t;

x e y ¦se corresponden con lo valores habituales de anchura y altura en el plano de¥ una imagen. (b) Segmentos Las líneas en Potrace se están compuestas por dos tipos de segmentos que se pueden observar en la Fig.4.13. • Curvas de Bezier. • Segmentos rectos o con esquinas. CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 69

Figura 4.13: a) Curva de Bezier, b) Segmento recto

Figura 4.14: Curva cerrada formada por 4 segmentos.

(c) Curvas Las curvas son segmentos que unen un conjunto de puntos y que no presentan esquinas. Se representan con el tipo potrace_curve_t, mostrado en el listado 4.3.

Listado 4.3: potrace_curve

1 struct potrace_curve_s { § ¤ 2 int n; /* number of segments */ 3 int *tag; /* array of segment types */ 4 potrace_dpoint_t (*c)[3]; /* array of control points. */ 5 }; 6 typedef struct potrace_curve_s potrace_curve_t;

(d) Descomposición¦ de bordes de imágenes vectoriales bitonales. ¥ Una curva cerrada es simple si no se cruza consigo misma. Cada curva cerrada simple divide el plano en dos regiones, el interior y el exterior de la curva. Si C1 y C2 son curvas simples cerradas, decimos que C1 está contenido en C2, escrito C1

Figura 4.15: a) Imagen vectorial. b) Descomposición jerárquica de bordes. (imagen de Potrace)

Listado 4.4: potrace_path

1 struct potrace_path_s { § ¤ 2 int area; /* enclosed area */ 3 int sign; /* ’+’ or ’-’ */ 4 potrace_curve_t curve; /* vector data */ 5 struct potrace_path_s *next; /* list structure */ 6 struct potrace_path_s *childlist; /* tree structure */ 7 struct potrace_path_s *sibling; /* tree structure */ 8 struct potrace_privpath_s *priv; /* private state */ 9 }; 10 typedef struct potrace_path_s potrace_path_t;

Cada¦ estructura contiene una curva simple, y éstas mantienen relación con otras a través¥ de los punteros next, childlist y sibling. • sign contiene el signo de la curva ( ’+’ o ’-’ en ASCII). • curve contiene el vector de datos de la curva descrito anteriormente (potrace_curve_t). • area indica aproximadamente la magnitud del área que alberga la curva. • priv es usado internamente por Potrace y no es accesible por otras aplicaciones. • next establece relaciones con otras curvas de la imagen vectorial mediante una linked list. Cada miembro de la lista lleva al siguiente elemento hijo a través de next, siendo el último miembro next==NULL. El orden de estos elementos no está especicado, pero sí que cumple algunas condiciones: a) Las curvas exteriores aparecen antes que las interiores. b) Cada curva positiva es seguida inmediatamente por todos sus hijos • childlist y sibling denen un conjunto de curvas, que pueden ser usadas indepen- dientemente de la linked list. Para cada curva childlist hace referencia al primer hijo, o a NULL si no tiene hijos. sibling es un puntero al siguiente hermano, o NULL si éste no existe.

3. Parámetros de vectorización La operación de vectorización en Potrace está controlada por un número de parámetros, los cuales se denen en el fragmento de código que se muestra en el listado 4.5.

Listado 4.5: potrace_param

1 struct potrace_param_s { § ¤ 2 int turdsize; 3 int turnpolicy; 4 double alphamax; 5 int opticurve; 6 double opttolerance; CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 71

7 potrace_progress_t progress; 8 }; 9 typedef struct potrace_param_s potrace_param_t;

¦ ¥ La función potrace_param_default() devuelve el conjunto de parámetros por defecto.

(a) Turdsize El parámetro turdsize establece un valor con el cual se indican que las curvas, cuyo área sea menor que dicho valor, deben ser extraídas. (b) Turnpolicy Este parámetro nos determina como resolver las ambigüedades durante la descomposición de bitmaps en curvas o caminos. Existen diversos valores para el parámetro turnpolicy en función de las preferencias para la optimización del camino. (c) Alphamax El parámetro alphamax es un umbral para la detección de esquinas. Controla la suavidad de la curva trazada. El valor predeterminado actual es 1.0. El rango de este parámetro es de 0.0 (polígono) a 1.3334 (sin esquinas). (d) Opticurve y opttolerance El parámetro opticurve es un booleano que nos permite controlar la optimización redu- ciendo el número de curvas de Bezier. Opttolerance tiene un rango de 0 a innito, aunque no se suelen tomar valores superiores a 1. Por defecto toma el valor 0.2. Valores altos reducen el número de segmentos. (e) Informe de progreso Durante un proceso largo de vectorización, Potrace nos ofrece un informe de progreso para darnos un feedback a través del parámetro progress, el cual es del tipo potrace_progress_t, véase el listado 4.6:

Listado 4.6: potrace_progress

1 struct potrace_progress_s { § ¤ 2 void (*callback)(double progress, void *privdata); 3 void * data ; 4 double min, max; 5 double epsilon; 6 }; 7 typedef struct potrace_progress_s potrace_progress_t;

Si callback¦ no es nulo, la información del progreso está habilitada ¥

4. Estado de Potrace Un estado contiene el resultado de la vectorización. Se dene como se muestra en el listado 4.7:

Listado 4.7: potrace_state

1 struct potrace_state_s { § ¤ 2 int status ; 3 potrace_path_t *plist; /* vector data */ 4 struct potrace_privstate_s *priv; /* private state */ 5 }; 6 typedef struct potrace_state_s potrace_state_t;

¦ ¥ El valor de status, nos indica si la operación se ha realizado correctamente o no plist contiene la representación de la imagen vectorial priv es usado internamente por Potrace 72 4.1. POTRACE. PO-LYGON TRACE-R.

Funciones de la API

A continuación se exponen el conjunto de funciones que componen el núcleo de la API de Potrace:

• potrace_trace (véase listado 4.8)

Listado 4.8: potrace_trace

1 potrace_state_t *potrace_trace(const potrace_param_t *param, § ¤ 2 const potrace_bitmap_t *bm);

Esta función¦ vectoriza un bitmap entrante utilizando el conjunto de parámetros de vectorización¥ indicado. Si el proceso se efectúa correctamente, la llamada retorna un estado de Potrace con el campo status con el valor POTRACE_STATUS_OK. En caso contrario, se establecerá un valor para errno, y el campo status tomará el valor POTRACE_STATUS_INCOMPLETE.

• potrace_state_free (véase listado 4.9).

Listado 4.9: potrace_state_free

1 void potrace_state_free(potrace_state_t *st); § ¤

Esta función¦ libera la memoria y otros recursos asociados a un estado de Potrace. ¥

• potrace_param_default (véase listado 4.10).

Listado 4.10: potrace_state_free

1 potrace_param_t *potrace_param_default(); § ¤ Devuelve¦ un conjunto de parámetros de vectorización, inicializados por defecto. Suele¥ ser utilizado para la creación de un objeto de tipo potrace_param_t para su posterior modicación.

• potrace_param_free() (véase listado 4.11).

Listado 4.11: potrace_param_free

1 void potrace_param_free(potrace_param_t *p); § ¤ Esta función¦ libera la memoria ocupada por un conjunto de parámetros. Solo se liberan¥ los parámetros inicializados por Potrace.

• potrace_version() (véase listado 4.12).

Listado 4.12: potrace_version()

1 const char *potrace_version(); § ¤

Esta función¦ retorna una cadena de texto identicando la versión utlizada de potracelib¥ CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 73

4.2 MSYS2

MSYS (Minimal SYStem), es un sistema de intérprete de línea de comandos de Bourne Shell. MSYS es una alternativa al cmd.exe de Microsoft, proporciona un entorno de línea de comandos de propósito general, que es particularmente adecuado para usar con MinGW, por lo que permite portar muchas aplicaciones de código abierto a la plataforma MS-Windows. Incluye una pequeña selección de herramientas Unix, elegidas para facilitar ese objetivo. Minimal SYStem 2 (MSYS2) es una reescritura independiente de MSYS, basada en la moderna Cygwin (capa de compatibilidad Portable Operating System Interface uniX (POSIX)) y MinGW con el objetivo de tener una mejor interoperabilidad con el software nativo de Windows. MSYS2 es por tanto: un Shell, un entorno de desarrollo de código abierto completo y un sistema completo. Gracias a ello permite construir aplicaciones nativas de Windows usando MinGW toolchains. Cuenta con un sistema de gestión de paquetes para proporcionar una instalación sencilla de paquetes, Pacman. Ofrece muchas funciones potentes, como la resolución de dependencias y las simples actualizaciones completas del sistema, así como la creación directa de paquetes. Admite y puede funcionar para arquitecturas de 32 bits y 64 bits. La elección de esta herramienta se debe a la necesidad de compilación de la librería de Potrace para una arquitectura de 64 bits, puesto que con las herramientas habituales utilizadas en Indra, como son CMake y Visual Studio 2015 no ha sido posible. Otra razón de peso ha sido la compatibilidad que ofrece esta herramienta ante la migración de los proyectos a arquitecturas GNU Linux nativas. MSYS2 facilita una instalación conjunta y sencilla de herramientas como MinGW y OpenCV x64, cuyo proceso se explicará detalladamente más adelante en el capítulo referente a la instalación. Toda esta tarea ha sido conseguida por MSYS2 tras el estudio, realización de pruebas y descarte con otras posibilidades.

4.2.1 MinGW

Minimalist GNU for Windows (MinGW) es un entorno de desarrollo minimalista para aplicaciones nativas de Microsoft Windows. MinGW proporciona un conjunto completo de herramientas de programación de código abierto que es adecuado para el desarrollo de aplicaciones nativas de MS- Windows, la cual no depende de ninguna DLL de C de terceros. Está enfocada para el uso de desarrolladores que trabajan en la plataforma nativa MS-Windows, pero también disponible para uso compartido cruzado. MinGW incluye:

• Una colección de compiladores de GNU-GCC(C, C++, ADA y Fortran).

• GNU binutils para Windows (ensamblador, enlazador, administrador de archivos)

• Un instalador de línea de comandos y una interfaz gráca opcional.

Los compiladores MinGW proporcionan acceso a la funcionalidad de C de Microsoft y algunos tiempos de ejecución especícos del lenguaje. 74 4.2. MSYS2

MinGW no proporciona un entorno POSIX para la implementación de la aplicación en MS- Windows. Si se pretende implementar la aplicación POSIX en esta plataforma, Cygwin es una solución más apropiada. Por petición de Indra S.L., MinGW es escogido para este trabajo fruto de la necesidad de com- pilación de la librería Potrace para arquitecturas de 64 bits y compatibilidades con proyectos GNU Linux.

4.2.2 Qt

Qt es un Software Development Kit (SDK) multiplataforma con herramientas diseñadas para simplicar la creación de aplicaciones e interfaces de usuario para plataformas de escritorio, integradas y móviles con C++. Qt es desarrollado como un software libre y de código abierto a través de Qt Project, donde participa tanto la comunidad, como desarrolladores de Nokia, Digia y otras empresas. Qt es distribuido bajo los términos de GNU-Lesser GPL. Utiliza el lenguaje de programación C++ de forma nativa, adicionalmente puede ser utilizado en varios otros lenguajes de programación a través de bindings. También es utili- zado en sistemas informáticos embebidos para automoción, aeronavegación y aparatos domésticos. La API cuenta con funcionalidad para acceder a bases de datos mediante SQL, así como uso de XML, gestión de hilos, soporte de red, y multitud de métodos para el manejo de cheros, además de estructuras de datos tradicionales. La elección de este SDK es consecuencia de la previa utilización por parte de varios componentes del grupo Imaging para este tipo de desarrollos y su directa relación con la utilización del lenguaje C++. Por lo que la unicación de mi trabajo en este entorno con otras tecnologías es importante.

QMake

qmake es un programa que automatiza la creación de cheros Makeles. Estos cheros Makeles son usados por el programa Make para compilar el código de manera automática y hacen mucho más cómoda la compilación de proyectos relativamente medianos, pero a medida que la complejidad del proyecto aumenta, los cheros Makele pueden llegar a crecer y complicarse demasiado. Aquí es dónde entra en juego qmake, automatizando el proceso a un nivel superior. qmake crea makeles que se adaptan a la plataforma deseada puesto soporta diferentes sistemas operativos como: Linux, Apple Mac OS X, Symbian, Android y Microsoft Windows. Tienes sus orígenes en su creación por Trolltech (ahora propiedad de Digia), y forma parte del framework de Qt. Aunque posee características adicionales que facilitan el desarrollo con Qt, automatiza la creación de los códigos moc (meta object compiler) y rcc (resource compiler), que pueden usarse para desarrollar cualquier proyecto software. CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 75

4.3 VISUAL STUDIO 2015

Microsoft Visual Studio es un entorno de desarrollo integrado (IDE) para sistemas operativos Windows. Incorpora varios lenguajes de programación, tales como C++, C#, Visual Basic, .NET, Java o Python, entre otros. También cuenta con entornos de desarrollo web, como Django, a lo cual hay que sumarle las nuevas capacidades con Windows Azure.

Visual Studio permite a los desarrolladores crear sitios y aplicaciones web, así como servicios web en cualquier entorno que soporte la plataforma .NET. De este modo se crean aplicaciones que se comunican entre estaciones de trabajo, páginas web, dispositivos móviles, dispositivos embebidos o consolas, entre otros.

Visual Studio 2015 ha sido escogido como herramienta de este proyecto puesto que es ampliamente conocido por el grupo Imaging en primer lugar. Pero además, cuenta con la posibilidad de montar entornos para servicios web de forma intuitiva y eciente.

4.4 CMAKE

El nombre es una abreviatura para Cross platform Make (make multipla- taforma). CMake es un conjunto de herramientas multiplataforma de código abierto diseñadas para construir, probar y empaquetar software. La suite de herramientas CMake fue creada por Kitware.

CMake se usa para controlar el proceso de compilación de software usando una plataforma simple y archivos de conguración independientes del compi- lador. Genera makeles nativos y espacios de trabajo utilizables en el entorno del compilador elegido.

El proceso de construcción se controla creando uno o más cheros CMake- Lists.txt en cada directorio (incluyendo subdirectorios). Cada archivo consiste en uno o más comandos.

CMake ha sido empleado para la generación de los citados archivos CMakeLists.txt para la posterior compilación con Microsoft Visual Studio Compiler (MVSC) de las librerías de OpenCV, empleadas para numerosas pruebas durante el desarrollo de este trabajo.

4.5 DXFLIB

dxib [dxib05] es una biblioteca escrita en C++, para leer y escribir archivos DXF. Esta librería analiza el archivo y llama a funciones que denimos en nuestras propias clases C++. Permite la transformación de las entidades de los cheros DXF y otros objetos encontrados en el archivo en objetos de nuestra clase. Hay que tener en cuenta que dxib no almacena las entidades u otra información, esto queda reservado para el desarrollo propio.

Incorporamos dxib ante la necesidad de albergar las estructuras leídas de DXF en código C++. Gracias a este software se ha conseguido la lectura de los archivos DXF generados por Potrace, permitiendo así el almacenamiento de las entidades en estructuras y tipos de C++, que han facilitado 76 4.5. DXFLIB su estudio y comprensión.

Algoritmo 4.2: dxib 1. DXF File

2. Parsing

3. dxib

4. Function calls for adding entities

5. C++ class

Figura 4.16: Esquema explicativo del funcionamiento de dxib (imagen de dxib).

La clase C++ que maneja las entidades DXF debe derivar de DL_CreationInterface o DL_CreationAdapter, la cual se puede ver en el listado 4.13. En ocasiones, la segunda opción es más conveniente, ya que no obliga a implementar todas las funciones.

Listado 4.13: dxib DL_CreationAdapter

1 class MyDxfFilter : public DL_CreationAdapter { § ¤ 2 virtual void addLine(const DL_LineData& d); 3 ... 4 }

La¦ implementación típica de estas funciones normalmente conlleva añadir las entidades¥ en contenedores o usar la información de algún modo. Para la lectura del archivo DXF únicamente pasamos el descriptor de archivo y una referencia al objeto implementado como se puede ver en el listado 4.14.

Listado 4.14: Lectura con dxib

1 MyDxfFilter f; § ¤ 2 DL_Dxf dxf ; 3 if (!dxf.in("drawing.dxf",&f)){ 4 std:cerr <<"draqing.dxf could not be opened. \n"; 5 }

¦ ¥ CAPÍTULO 4. ANÁLISIS Y SELECCIÓN DE LAS TECNOLOGÍAS 77

4.6 OPENCV

Open Source Computer Vision Library (OpenCV)[20] es una biblioteca de software de visión y aprendizaje automático de código abierto. Esta librería fue construida para proporcionar una infraestructura común destinada a apli- caciones de visión por computador e inteligencia articial. Al ser un producto con licencia BSD, OpenCV facilita a los usuarios utilizar y modicar el código. La biblioteca incluye un conjunto completo de algoritmos de visión articial y de aprendizaje automático tanto clásicos como avanzados. Estos algoritmos se pueden usar para detectar y reconocer rostros, identicar objetos, clasicar acciones humanas en vídeos, rastrear movimientos de la cámara, rastrear objetos en movimiento, extraer modelos 3D de objetos o producir nubes de puntos 3D desde cámaras estéreo, entre otras. OpenCV tiene una gran comunidad de usuarios y cantidad de descargas que lo abalan. La biblioteca se usa ampliamente en compañías, grupos de investigación y por organismos gubernamentales. Junto con compañías bien establecidas como Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda y Toyota que emplean la biblioteca y que hacen un uso extensivo de OpenCV surgen nuevas empresas y perspectivas. OpenCV está escrito nativamente en C++ y tiene una interfaz que funciona a la perfección con contenedores STL. Tiene interfaces en C++, Python, Java y MATLAB y es compatible con Windows, Linux, Android y Mac OS. OpenCV se inclina principalmente hacia las aplicaciones de visión en tiempo real y proporciona un gran set de algoritmos recogidos de forma modular. En la estructura modular de OpenCV destacamos los citados a continuación:

• Core: un módulo compacto que dene las estructuras de datos básicas, incluyendo el denso array multi-dimensional Mat y funciones básicas usadas por otros módulos.

• Imgproc: un módulo de procesamiento de imágenes que incluye ltrados lineales y no lineales de imágenes, transformación geométrica de imágenes, conversión de color, histogramas, etc.

• Video: un modulo de análisis de vídeo que incluye estimación de movimiento, sustracción de fondos y algoritmos de seguimiento de objetos.

• Calib3d: algoritmos geométricos básicos multi-vistas.

• Features2d: detección de características más destacadas, descriptores.

• Objdetect: detección de objetos y ejemplos de clases predenidas.

• Highgui: un interfaz de uso fácil para la captura de vídeo.

• Gpu: algoritmos GPU-acelerados de diferentes módulos OpenCV.

• Otros módulos de ayuda.

OpenCV ha sido utilizado en este TFG como herramienta de apoyo gracias a sus funciones visuales de representación, en concreto líneas, puntos y algunas formas geométricas, que han permitido tener una mayor comprensión de las salidas ofrecidas por Mkbitmap y Potrace. Esta funcionalidad ha sido de ayuda para la representación de los puntos que utiliza Potrace en sus etapas intermedias antes de realizar su unión a través de curvas de Bezier para la formación de la imagen vectorial. 78 4.6. OPENCV

Por otra parte, la representación de los resultados vectoriales en formato DXF, a diferencia de SVG que contaba con soporte para su visualización en Qt, se ha realizado contando con la funcionalidad citada de OpenCV para lograr una simulación visual de los resultados obtenidos en este formato para CAD. En vistas de posibles desarrollos futuros, se ha estudiado la posibilidad de representación de conjuntos de puntos mediante formas geométricas soportadas por OpenCV, las cuales actualmente representa y almacena Potrace en forma de las citadas anteriormente curvas, en alguno de los formatos soportados. CAPÍTULO 5 FASES DE TRABAJO Y METODOLOGÍA

n el presente capítulo se detallan las fases de trabajo seguidas en la confección de este TFG. E Además se describen los medios, tanto hardware como software, utilizados para alcanzar los objetivos marcados. Para nalizar, se realiza una explicación de la metodología de desarrollo seguida para la implementación de las aplicaciones y del sistema creado en este TFG.

5.1 FASES DE TRABAJO

Durante el desarrollo del proyecto se han seguido las siguientes fases de trabajo, enumeradas y explicadas a continuación:

• Fase 1. Estudio del estado del arte. Para el desarrollo de este trabajo se presenta la necesidad de realizar una revisión sobre los estudios del campo de la imagen vectorial, teniendo en cuenta las últimas novedades tecnológicas del sector.

• Fase 2. Comparativa de las herramientas y métodos existentes y selección de la más adecuada Realizaremos un estudio sobre las novedades en este campo, analizando exhaustiva- mente y contrastando las técnicas y métodos disponibles para abordar el problema, centrán- donos en las tecnologías opensource de manera que podamos obtener a través de una visión global y actual, una solución conjunta y, en el caso que sea necesario, mejorada a través de un desarrollo propio. Para ello se seleccionarán una serie de herramientas y tecnologías mediante el estudio anteriormente citado.

• Fase 3. Desarrollo del sistema Este desarrollo se sitúa en un dominio donde destacan las técnicas con un alto nivel de abstracción, por lo que los lenguajes de programación a utilizar serán orientados a objetos o similares (Ej: C++,Python,C#), aprovechando librerías especícas dentro del campo de la visión por computador (Ej: OpenCV).

• Fase 4. Documentación. Esta fase se desarrolla en paralelo al resto de fases y consiste tanto en la recopilación de información como en la generación de documentación de las diferentes partes de las que consta el presente TFG.

5.2 MEDIOS Y METODOLOGÍA DE DESARROLLO

Para el desarrollo de este trabajo, se ha seguido una metodología de desarrollo concreta, apoyada en unos medios, tanto software como hardware, los cuales se exponen a continuación: 80 5.2. MEDIOS Y METODOLOGÍA DE DESARROLLO

5.2.1 Medios Hardware

Se dispondrá de un computador personal, facilitado por parte de la empresa, necesario para la rea- lización del proyecto como de la memoria. Las características del mismo se disponen a continuación:

1. Servidores. Windows Server 2016 Standard para desarrollo. Arquitectura de 64 bits, con 2 CPU’s y 4 GB de memoria RAM.

2. Ordenador portátil. Proporcionado por la empresa. Empleado tanto para la realización de la implementación de la lógica del proyecto como para la documentación.

Características Sistema Operativo Windows 10 Pro de 64 bits Procesador Intel(R) Core(TM) i5-5300U CPU @2.30 GHZ Grácos Intel(R) HD Graphics 5500 Disco 119 GB Memoria RAM 8,00 GB

Tabla 5.1: Características del PC

3. Ordenador personal.

Características Sistema Operativo Windows 10 Education de 64 bits Procesador Intel(R) Core(TM) i5-6400 CPU @2.70 GHZ Grácos Intel(R) HD Graphics 5500 Disco 1 TB Memoria RAM 8,00 GB

Tabla 5.2: Características del ordenador personal

5.2.2 Medios Soware

El tratamiento de imágenes se realizará en frameworks desplegados sobre máquinas virtuales de plataformas GNU/Linux. Los sistemas donde llevaremos a cabo el despliegue son Ubuntu 16.04/17.04.

1. Entornos integrados de desarrollo (IDEs):

• Qt Creator 4.5.0 • Qt 5.10.0 (GCC 7.2.0, 64 bit) • Visual Studio 2015 (C#,C++, Python): entorno de desarrollo integrado para sistemas opera- tivos Windows.

2. Librerías:

• OpenCV 3.4.0 • Potrace 1.15 • dxib 3.17.0

3. Documentación: CAPÍTULO 5. FASES DE TRABAJO Y METODOLOGÍA 81

• LATEX[19]: sistema de composición de textos orientado a la creación de documentos escritos que presenten una alta calidad tipográca. • Texmaker: herramienta para la creación de textos con Latex. • Texlive

4. Herramientas de apoyo:

• Cross platform Make (Cmake) : herramienta multiplataforma de generación o automatiza- ción de código. • MSYS2 • MinGW-w64

5.2.3 Metodología de desarrollo

La metodología de desarrollo empleada para este proyecto será una metodología ágil basada en Dynamic Systems Development Method (DSDM) adaptada a las necesidades del proyecto, en la cual se denen distintos hitos que van satisfaciéndose a través de un desarrollo iterativo y creciente. Se establecen unas metas u objetivos nales basados en los requisitos del sistema, pero los objetivos más prioritarios se establecerán mediante sprints a corto plazo. De este modo, las funcionalidades básicas quedarán satisfechas, incluyéndose de manera progre- siva de mayor a menor prioridad. A esta sistemática se la conoce como regla "MoSCoW". Must have: requisitos fundamentales y prioritarios. Son la base funcional y obligatoria en este desarrollo. Should have: requisitos importantes con planicación a corto plazo, los cuales complementan y aportan consistencia al sistema. Could have: requisitos que pueden desatenderse si las necesidades obligan a ello. No forman parte de los componentes imprescindibles pero su incorporación es de especial interés. Want to have: requisitos complementarios que adicionan valor al proyecto, pudiendo ser apla- zada su integración para futuros desarrollos.

CAPÍTULO 6 DISEÑO DEL SISTEMA

urante el desarrollo del presente capítulo se explicará de forma precisa y detallada el proceso D completo de creación del sistema capaz de realizar la vectorización. Como se ha mencionado en la Sección 5.2, durante el proceso de creación del sistema se ha seguido la metodología ágil DSDM, adaptándola a las necesidades del proyecto. Ésta se basa en un desarrollo iterativo e incremental, en donde los requisitos y soluciones pueden variar en el tiempo según las necesidades impuestas por el proyecto.

6.1 REQUISITOS DEL DISEÑO

6.1.1 Must have

• Desarrollo de una API sencilla y robusta que permite su utilización integrada en otros proyectos de mayor magnitud.

• Soporte para los formatos SVG y DXF. La incorporación de esos dos formatos es una prioridad debido a los criterios anteriormente mencionados. La producción de estos formatos forma parte del código fuente facilitado por Potrace aunque no forma parte de la API principal.

6.1.2 Should have

• Desarrollo de una interfaz visual para el visionado instantáneo e integrado de los resultados del proceso de vectorización. Tras haber realizado las primeras iteraciones del sistema sin una interfaz gráca, conseguimos aumentar el rendimiento y rapidez en el desarrollo de pruebas gracias a la utilización mucho más intuitiva que nos proporcionan los elementos de selección y visualización grácos. • Parametrización de las variables inuyentes en los procesos de binarización y vectorización, que permite una mayor facilidad y rapidez en la realización de pruebas.

6.1.3 Could have

• Despliegue del sistema como servicio. Indra demanda el desarrollo de una API que proporcione a través de un servicio web una funcionalidad consumible por otros proyectos de manera aislada, con el único conocimiento de una interfaz de entradas y salidas. Esto se ha llevado a cabo utilizando la metodología de trabajo recomendada por la empresa, y utilizando sus tecnologías habituales(.NET). 84 6.2. HITOS

• Detección de formas matemáticas simples o patrones en la imagen. Con esto se consigue un aumento de la diversidad de formas geométricas que podemos alma- cenar en estos formatos vectoriales, con su correspondiente eciencia implícita.

6.1.4 Want have

Estos requisitos forman parte de un proyecto de futuro inmediato en los desarrollos del grupo Imaging.

• Incorporación de color al proceso. En los casos de uso realizados para proyectos reales con el grupo de trabajo, el sistema actual ha bastado para conseguir los objetivos a partir de los resultados obtenidos en blanco y negro. Pero aunque para estas problemáticas este contexto ha sido suciente, se han propuesto diferentes corrientes de estudio para el desarrollo de segmentaciones por color en el mundo vectorial.

• Inclusión de una mayor variedad de formatos de entrada y salida. Actualmente el sistema cuenta con dos formatos de salida para sus imágenes, DXF y SVG. Estos dos formatos han sido prioritarios por su integración dentro de soluciones dentro de la empresa (DXF) y por otro lado, por su alto nivel de expansión dentro del ecosistema de la imagen vectorial (SVG).

6.2 HITOS

El sistema ha sido desarrollado a través de un proceso iterativo, cumpliendo con una serie de requisitos establecidos. De este modo, se ha priorizado la consecución de objetivos funcionalmente más relevantes. Este procedimiento se ha llevado a cabo en distintas etapas o hitos, los cuales se desglosan a continuación:

6.2.1 Hito 1

El punto de partida de este proyecto, cuya funcionalidad reside en la vectorización prestada por Potrace, han sido los archivos ejecutables que desde la propia página web se proporcionan. Estas herramientas ejecutables permiten una parametrización a través de argumentos en una ejecución por consola, que resultan fácilmente entendibles e intuitivos gracias a su manual como se ha mostrado anteriormente. Este primer hito cuenta con una ejecución en dos pasos. En primer lugar la binarización realizada por mkbitmap, necesaria en la mayoría de casos para la obtención de resultados válidos para los ejemplos probados para casos prácticos de la empresa. Y en segundo lugar, la propia vectorización, llevada a cabo mediante la ejecución de Potrace, donde meramente se ha indicado el formato de salida siguiendo la sintaxis de la línea de comandos. CAPÍTULO 6. DISEÑO DEL SISTEMA 85

6.2.2 Hito 2

En nuestra segunda iteración del sistema, se incluyen dos avances que facilitan de manera notable el desarrollo de pruebas y visualización de resultados. Estos aportes son:

• Desarrollo de una interfaz gráca (Fig. 6.1): Incorporación de ventanas que permiten la vi- sualización desde la aplicación de las distintas imágenes que forman parte del proceso de vectorización. Las diferentes etapas disponen de un visor de la imagen desplazable y escalable. Se ofrece por tanto un servicio más integrado y cómodo.

• Desde un punto de vista funcional, el sistema hace uso de la funcionalidad de Potrace a través de la librerías compiladas de su API básica, en lugar de los archivos ejecutables. Las entradas y salidas de la API, se incluyen en nuestro proyecto como código fuente, permitiendo así un futuro ajuste de los parámetros en nuestra interfaz anteriormente tratados como argumentos de consola.

Figura 6.1: Hito 2. Captura de pantalla de la interfaz del proyecto.

Como consecuencia de los dos puntos anteriores, esta etapa permite la selección entre los dos formatos para la imagen vectorial (SVG y DXF) escogidos para nuestro sistema. Para los intereses de la empresa, cabe destacar la utilización de la funcionalidad de este hito para la detección de defectos de pintura en cadenas de montaje, ya que gracias a la imagen vectorial se consiguen mejores resultados. 86 6.2. HITOS

6.2.3 Hito 3

En la tercera iteración del sistema, el avance reside en la incorporación de un conjunto de widgets, entre los que predominan listas, botoneras y otras formas de selección intuitivas, que nos permiten el ajuste de los parámetros de la vectorización, y una visualización de resultados en tiempo real. También se ha llevado a cabo una representación sencilla de los puntos clave que nos ofrece como salida la API de Potrace, con el n de poder observar los puntos sobre los que posteriormente se realiza el cálculo matemático (curvas de Bézier) para la representación de la totalidad de puntos, disponible en la función OpenCV Control Points. Gracias a esta visualización se puede realizar una interpretación y comprender mejor el funcionamiento y ahorro que puede proporcionar este software.

Figura 6.2: Hito 3. Captura de pantalla de la interfaz del proyecto.

Durante el desarrollo de este hito, se han realizado numerosas pruebas reales con algunos proyectos de la empresa, entre los que podemos resaltar el representado en la Fig. 6.2 donde se pretende la vectorización de la imagen para facilitar el reconocimiento y tratamiento de los distintos elementos como objetos. Esta situación se basa en la generación de contornos cerrados y seleccionables como un conjunto de todos sus puntos de una manera abstracta.

6.2.4 Hito 4

El siguiente hito de nuestro sistema ha consistido en la realización de un servicio web, con el objetivo de proporcionar la funcionalidad de atender peticiones externas al sistema. El framework uti- lizado ha sido Visual Studio 2015, siguiendo una metodología de desarrollo y estructura comúnmente CAPÍTULO 6. DISEÑO DEL SISTEMA 87 utilizada dentro del grupo de trabajo en la empresa. Estas pautas de trabajo responden a cuestiones tales como uso de tipos, clases o distintas versiones de las que proporciona el entorno de Visual Studio. Este servicio se ha montado sobre una versión ejecutable sin interfaz gráca del hito anterior. En este nuevo contexto, la parametrización de nuestro proceso de vectorización se realiza en una nueva interfaz similar a la anterior, pero desarrollada con la tecnología .NET.

Figura 6.3: Interfaz servicio web (localhost).

Figura 6.4: Hito 4. Captura de pantalla de la interfaz del lado cliente.

El servicio web desarrollado presenta una estructura clásica de cliente-servidor. En el lado del cliente (Fig.6.4), podemos ver la interfaz de usuario del sistema. En un primer lugar, la interfaz permite el ajuste de los parámetros para la vectorización, agrupándolos en un archivo XML que se envía al servicio web. Del mismo modo y en paralelo, se envía también la imagen sobre la que se realiza la 88 6.2. HITOS vectorización. Ambos archivos (archivo XML e imagen) se envían serializados y por separado. En el listado 6.1 se muestra un ejemplo con la estructura del anteriormente citado arhivo XML que sirve de conguración para los parámetros de los procesos de binarización y vectorización. El archivo XML utilizado para enviar los parámetros está compuesto de dos grupos principales: MKBITMAP y POTRACE. En el primer grupo se recogen algunos parámetros con relación a la binarización, únicamente se incorporan al archivo de conguración los atributos que hayan sufrido alguna modicación en la interfaz de nuestro sistema respecto a la conguración por defecto. En segundo lugar, aparece el conjunto de variables que se involucran en el proceso de vectorización mediante Potrace. Del mismo modo que con los parámetros de Mkbitmap, únicamente se añaden al archivo los parámetros que hayan cambiado sus valores originales.

Listado 6.1: Xml le (parameters)

1 § ¤ 2 3 4 0.34 5 2 6 Linear 7 8 9 SVG 10 Black 11 12

En¦ el lado del servidor, se realiza el procesamiento de ambos archivos, produciendo la salida¥ resultante en función de la parametrización, y enviándola de vuelta al cliente. Una vez recibida la imagen, esta se muestra en el visor. La comunicación entre cliente y servidor se realiza como un stream de bytes. Tras haber realizado la simulación del Servicio Web de manera local, la última etapa ha sido el despliegue de la plataforma en una máquina con una mayor capacidad computacional suministrada por Indra. CAPÍTULO 6. DISEÑO DEL SISTEMA 89

6.3 ARQUITECTURA GENERAL.

Finalmente, el sistema de vectorización realizado en este trabajo, presenta la estructura que podemos observar en la Fig. 6.5.

Figura 6.5: Arquitectura general.

La arquitectura consiste en la aplicación cliente que se encarga de seleccionar la imagen, atribuir valores a los parámetros de conguración y de enviar la petición de vectorización, y el servidor, que se ocupa de asignar los parámetros, llamar al proceso vectorizador y devolver la imagen vectorial al cliente. A continuación se profundiza en cada uno de los elementos con la ayuda de diferentes tipos de diagramas.

6.3.1 Diagrama UML

En el siguiente diagrama UML (Fig. 6.6) se presentan las clases junto con sus atributos y funciones más representativas, que componen nuestro sistema nal que cuenta con el servicio web realizado mediante Visual Studio. En la clase cliente, prioriza la gestión de conguración de nuestro sistema, así como estructuras y funciones para la visualización y tratamiento de cheros. En el servidor, se realizan labores de comunicación y preparación de los datos para, nalmente, realizar la vectorización a través de la clase dedicada para este procedimiento. Este proceso se realiza en dos etapas denominadas mkbitmap() y potrace(). También se ha incluido sin ningún tipo de enlace con el resto del sistema la clase VectorImagetracer (Standalone Version) de la versión previa del proyecto que cuenta con una interfaz gráca para el usuario, así como con algunas funciones que permiten la realización de pruebas y visionado de resultados. Ejemplo de este hecho son las funciones render() u openCvControl(), que son eliminadas en el paso a versión sin interfaz al no ser necesarias. En este diagrama UML se puede observar el conjunto de estructuras y funciones que componen este sistema, y a continuación con un diagrama secuencial se ejemplicarás las interacciones de su funcionamiento. 90 6.3. ARQUITECTURA GENERAL.

Figura 6.6: Diagrama UML

6.3.2 Diagrama de secuencia

Los componentes principales del sistema completo son la aplicación cliente y el servidor, que ejecutan una secuencia de acciones tal y como nos muestra la Fig. 6.7. La númeración nos indica el orden dentro de una visión conjunta de la interacción del cliente y el servidor. Dentro del cliente disponemos de las siguientes funcionalidades:

• 1. Selección de la imagen .

• 2. Asignación de parámetros de conguración

• 3. Serialización de los archivos: un archivo XML de conguración, y un archivo BMP de imagen.

• 4. Envío de una petición de vectorización al servicio web. Esta petición contiene los datos serializados de la etapa anterior.

• 9. Recepción de la imagen en formato vectorial y deserialización.

• 10. Representación visual de la imagen vectorial. CAPÍTULO 6. DISEÑO DEL SISTEMA 91

Mientras que aplicación servidor se encarga de:

• 5. Recepción de la petición, deserialización de los archivos.

• 6. Ejecución del proceso de vectorización.

• 7. Serialización de la imagen vectorizada.

• 8. Envío al cliente de la imagen en formato vectorial.

Figura 6.7: Diagrama de secuencia

CAPÍTULO 7 RESULTADOS Y CASOS PRÁCTICOS

n esta sección se describe el sistema desde una perspectiva global. Los resultados principales E obtenidos tras la realización de este TFG son: una aplicación de vectorización de imágenes y un sistema cliente-servidor para vectorización de imágenes.

Por otro lado y como resultado de haber realizado este trabajo, se han realizado pruebas sobre casos de uso reales que han permitido descubrir numerosas posibilidades y campos en los que la imagen vectorial se abre camino y evidenciar que los resultados en casos prácticos son relevantes.

7.1 APLICACIÓN DE VECTORIZACIÓN DE IMÁGENES.

En primer lugar, el trabajo está focalizado en el desarrollo de un sistema que permita la vectoriza- ción a partir de imágenes en mapa de bits. Este resultado conlleva la consecución del Objetivo 2.1.1 indicado en la sección 2, podemos observar este proceso y sus etapas en la Fig. 7.1.

Figura 7.1: Diagrama de ujo del proceso vectorizador. 94 7.2. SISTEMA CLIENTE-SERVIDOR PARA VECTORIZACIÓN DE IMÁGENES.

7.2 SISTEMA CLIENTE-SERVIDOR PARA VECTORIZACIÓN DE IMÁ- GENES.

En segundo lugar, se ha conseguido el despliegue de un sistema que proporciona esta funcionalidad a través de un servicio con una arquitectura cliente-servidor como la de la Fig. 7.2. Este hecho surge ante la petición de la empresa de dar soporte a otros proyectos que puedan requerir de las características que aporta la imagen vectorial, de una manera sencilla y aislada mediante una solicitud a este servicio.

Figura 7.2: Visión global del sistema.

Este resultado conlleva la consecución de los Objetivos 2.1.2 y 2.1.3 indicados en la sección 2. Podemos ver otro ejemplo de la aplicación cliente en la Fig. 7.3 CAPÍTULO 7. RESULTADOS Y CASOS PRÁCTICOS 95

Figura 7.3: Aplicación cliente del sistema.

7.3 CASOS PRÁCTICOS.

Todos estos ejemplos prácticos son posibles casos de uso aplicados a los problemas en los que se trabaja actualmente en la empresa gracias a la implementación de nuestra aplicación, siendo únicamente pruebas de concepto para posibles soluciones en un futuro próximo.

7.3.1 Detección de fallos en cadenas de montaje en el sector de la automoción.

Debido a la producción masiva en el sector de la automoción, la labor de control de calidad y fallos es una labor demasiado costosa para ser realizada por un humano. Pese a ser una labor destinada actualmente a ser realizada por máquinas, existen numerosos casos en los que la detección por medio de procedimientos articiales no obtiene los resultados deseados. A través de estos procedimientos se han llevado a cabo varios tipos de pruebas en un proyecto actual de Indra S.L. consistente en la detección de defectos de pintura en distintos componentes en el sector de automoción. Los ejemplos mostrados a continuación son concretamente ejemplos sobre retrovisores de coches. La mayoría de estas pruebas se han realizado sobre imágenes obtenidas con cámaras industriales, como la de la Fig. 7.4, que en ocasiones difícilmente detectan las irregularidades mediante los procedimientos habituales utilizados basados en imágenes píxel. 96 7.3. CASOS PRÁCTICOS.

Figura 7.4: Imagen original.

Gracias a la imagen vectorial se han conseguido resultados que permiten una mejor detección y visualización de resultados, como podemos observar en la Fig. 7.5.

Figura 7.5: Imagen vectorial.

Esta mejoría es debida a dos características. La primera es que a nivel visual debido a la condición de escalabilidad de la imagen vectorial se puede ampliar sin perder nitidez. Y en segundo lugar, y aún más importante puesto que esta labor pretende ser relegada a las máquinas, la detección de motas o manchas resulta de fácil tratamiento gracias a la estructura de los formatos vectoriales traduciendo esa información en algún tipo de elemento. Cabe destacar el hecho de que una misma conguración no permite en ocasiones la obtención de CAPÍTULO 7. RESULTADOS Y CASOS PRÁCTICOS 97 resultados deseados en labores de detección, por lo que distintos conjuntos de parámetros se utilizan para conseguir distintos resultados sobre una misma imagen. Esta labor ha sido facilitada gracias a este sistema que proporciona una interfaz intuitiva y que agiliza la visualización de la salida. En el ejemplo que podemos ver en las Fig. 7.6 y Fig. 7.7, se muestra la problemática de conseguir la detección de dos manchas situadas en un umbral diferente. La solución planteada se basa en la utilización de conjuntos de parámetros (en este caso 2) predenidos con sus valores más habituales.

Figura 7.6: Primera parametrización.

Por último, en la Fig. 7.8 se muestra un ejemplo conocido como piel de naranja. Es un caso típico en la casuística de este proyecto, donde la incorporación de este sistema facilita la detección de gránulos o rugosidades. La piel de naranja es un defecto cuya detección no es una tarea trivial a simple vista, puesto que en ocasiones si no cuenta con unas condiciones lumínicas adecuadas incluso esta tarea puede resultar imposible. En este contexto es donde la imagen vectorial producida por nuestro sistema, junto con unas condiciones de luz mínimas, consigue realizar la detección de esta irregularidad gracias al tratamiento de los elementos que componen las imágenes vectoriales, tanto SVG como DXF. 98 7.3. CASOS PRÁCTICOS.

Figura 7.7: Segunda parametrización.

Figura 7.8: Ejemplo de piel de naranja. CAPÍTULO 7. RESULTADOS Y CASOS PRÁCTICOS 99

7.3.2 Smart Retail. Detección de productos en supermercados.

Otro proyecto en el cual se han realizado pruebas con este sistema trata sobre la detección y control de productos en supermercados. En este contexto se pretende que mediante la imagen vectorial, se pueda hacer un inventario de los productos que se muestran en una imagen, aprovechando la posibilidad de selección de productos haciendo uso de los contornos cerrados. El segundo objetivo que se busca a través del tratamiento de la imágenes con esta herramienta, es la obtención de formas o contornos que ayuden en la identicación de patrones comunes para la detección de productos (véase la Fig. 7.9).

Figura 7.9: Detección de formas en estantería de supermercado.

Actualmente estas funciones se realizan apoyándose en funcionalidades de OpenCV como el shapeMatching, extracción de características y descriptores y utilización de redes neuronales convo- lucionales.

7.3.3 Detección de formas y patrones.

Previamente a la realización de pruebas en detección de patrones y formas, se han llevado a cabo algunas simulaciones con imágenes básicas que permitan entender y comprobar los usos potenciales de los formatos vectoriales. A continuación, en la Fig. 7.10 se puede ver como la detección de formas se realiza a la perfección. También podemos observar en la Fig. 7.11, como gracias a la herramienta Inkscape podemos seleccionar cada conjunto cerrado (path en SVG) como un único elemento. Este hecho sugiere posibles pruebas a realizar, tanto en el tratamiento de los puntos de un modo más global, como para la detección de grupos de puntos pertenecientes a un único elemento. 100 7.3. CASOS PRÁCTICOS.

Figura 7.10: Detección de formas en formato SVG.

Figura 7.11: Prueba de selección de formas como objetos individuales mediante Inkscape.

7.3.4 Detección de objetos en entornos no controlados.

La detección de objetos en entornos no controlados presenta un abanico amplio de posibilidades de estudio, como es el hecho de deducción del movimiento realizado usando la imagen vectorial, pudiendo usar los propios vectores grácos para así calcular y trabajar con el movimiento de los CAPÍTULO 7. RESULTADOS Y CASOS PRÁCTICOS 101 vehículos. Otro posible contexto en el que se sitúa esta detección de objetos en entornos no controlados es el de las smart cities, donde las labores de reconocimiento de mobiliario urbano o personas entre otros, cada vez están más a la orden del día, y donde la imagen vectorial puede resultar de utilidad. En último lugar, también se han realizado pruebas en entornos no controlados, situados en el exterior, como pueden ser sectores urbanos o autopistas. Del mismo modo que en los casos anteriores, se pretende una detección y tratamiento de los objetos como elementos únicos que engloban la totalidad de los píxeles que los componen. Los resultados se pueden ver a continuación en la Fig. 7.12 y la Fig. 7.13.

Figura 7.12: Detección de elementos en autopista.

Figura 7.13: Selección de formas como objetos individuales en entorno no controlado.

CAPÍTULO 8 CONCLUSIONES Y TRABAJO FUTURO

ara nalizar, durante el desarrollo del presente capítulo se describen los objetivos y contribu- P ciones alcanzados durante la realización de este TFG. Además se indicarán las posibles líneas de trabajo futuro a realizar teniendo como base todo lo realizado durante este proyecto.

8.1 CONCLUSIONES.

En este TFG se ha implementado una solución basada en la transformación de imágenes almace- nadas en un formato de mapa de bits, a una representación más abstracta y eciente, que permite un abanico más amplio de posibilidades en lo relativo a su tratamiento, como es la imagen vectorial. Los benecios que ofrece nuestro sistema son:

• Ofrece una transformación a imagen vectorial con una buena detección de bordes que facilita el reconocimiento de patrones y formas.

• Cuenta con una interfaz gráca para la selección de los parámetros de vectorización, así como para la visualización de las imágenes, agilizando el proceso.

• Proporciona un servicio que permite la utilización de manera remota, que lleva a cabo el subobjetivo del despliegue del sistema que implemente el algoritmo.

Gracias a estos 3 benecios citados anteriormente se satisfacen respectivamente los 3 subobjetivos presentados en el Capítulo 2 de este trabajo. Con las nuevas posibilidades que ofrece este sistema y el formato vectorial se establecen en Indra S.L. una serie de líneas de trabajo futuro.

8.2 LÍNEAS DE TRABAJO FUTURO.

• Incorporación de color a los resultados de la vectorización. El objetivo de la incorporación de color en la vectorización es facilitar el tratamiento y detección de objetos no solo mediante sus patrones y formas, si no también haciendo uso de sus valores de color. Con la integración de valores de color en nuestro sistema se pretende poder hacer un tratamiento global para todos los puntos que compartan dicho valor de color al pertenecer al 104 8.3. LÍNEAS DE TRABAJO DERIVADAS DE ESTE TFG

mismo elemento, a diferencia del tratamiento individual que requiere una imagen en mapa de bits. Tras haber realizado el estudio para este trabajo, y observado el proceso de algunos software contrastados como Inkscape, se ha optado por la elección de ImageMagick como candidato para el inicio de la incorporación de color al proyecto. ImageMagick® es una herramienta que permite crear, editar, componer o convertir imágenes de mapa de bits. Puede leer y escribir imágenes en una variedad de formatos (más de 200) incluyendo PNG, JPEG, GIF, Postscript, PDF y SVG, entre otros. La funcionalidad de Image- Magick se utiliza normalmente desde la línea de comandos o puede utilizar las funciones de la interfaz que implemente algún lenguaje especíco como Magick++ (C++), JMagick (Java) o PythonMagick (Python). Magick++ es la interfaz escogida debido al contexto de nuestro desarrollo. Proporciona una interfaz C++ orientada a objetos para ImageMagick. Otro punto a su favor es que puede utilizar OpenCL, obteniendo aceleración por hardware de la GPU para el procesado de imágenes.

• Detección de formas geométricas básicas. La sintetización de curvas de Bezier en formas geométricas básicas cuando la composición de los puntos lo permita implica una mayor simplicación de la información, lo que conlleva un ahorro de espacio en el almacenamiento. Este proceso se puede realizar mediante la funcionalidad que nos facilita OpenCV. A continuación, una vez identicadas los patrones o formas a almacenar, formaría parte del desarrollo propio de este sistema la traducción o implementación de estos elementos en los formatos requeridos, en este caso SVG y DXF. Esta detección de formas simples tiene como nalidad servir de apoyo para la detección de objetos que presenten patrones sencillos en entornos no controlados.

8.3 LÍNEAS DE TRABAJO DERIVADAS DE ESTE TFG

Los posibles usos derivados de este TFG serían:

• Facilitar el uso y redimensionado de imágenes y grácos gracias al ámbito del diseño gráco. Transformación de imágenes para la utilización de las resultantes en procesos de diseño asistido por computador Computer-Aided Design (CAD).

• Aplicaciones geomáticas que permitan el tratamiento de mapas y sistemas de geolocalización a partir de imágenes aéreas o por satélite.

• Soporte para soluciones Optical Character Reader (OCR), encargadas de la transcripción y digitalización de textos y rmas.

• Optimización en el almacenamiento de contornos, permitiendo conseguir menor tamaño y coste computacional.

• Tratamiento de imágenes o elementos grácos de una manera más abstracta y en bloque consiguiendo resultados similares al tratamiento sobre objetos.

• Ayuda para el reconocimiento de innidad de patrones de en distintos contextos o situaciones. Desde sistemas de producción industrial para la detección de fallos en piezas en cadenas de montaje hasta reconocimiento de mobiliario urbano. ANEXO A COSTES DEL PROYECTO

T odoslos costes que han conllevado la realización de este TFG son presentados a continuación: A.1 COSTES HARDWARE

Al tratarse de un proyecto que se basa mayoritariamente en software, únicamente tendremos en cuenta como parte de los costes hardware el equipo prestado por Indra S.L. para el desarrollo. Puesto que el equipo forma parte del stock con el que cuenta la empresa, no asumimos ningún coste adicional.

A.2 COSTES DE DESARROLLO

En cuanto a los costes necesarios al desarrollo, teniendo en cuenta que el software utilizado es opensource o la empresa cuenta con licencia corporativa, solo se ha tenido que costear la remuneración establecida en la convocatoria del programa FORTE durante un período de 6 meses (Octubre 2017 - Marzo 2018). Por tanto se concluye el coste del proyecto en un total de 3600€ (6 meses x 600 €/mensuales de sueldo de desarrollador).

ANEXO B LICENCIAS Y PROPIEDAD INTELECTUAL.

B.1 MARCO REGULATORIO

B.1.1 Indra S.L.

No existe ninguna restricción por parte de la empresa en relación a la realización o exhibición de este trabajo. Este hecho se debe al pertenecer este trabajo a su ámbito de I+D, a diferencia de cuando se trata de proyectos en desarrollo, donde habría que concretar un NDA de condencialidad.

B.1.2 IDE’s

• Qt es distribuido bajo los términos de GNU-Lesser GPL.

• Visual Studio 2015 bajo licencia corporativa.

B.1.3 Librerías de imagen

• Potrace. Software libre redistribuible y/o modicable bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation.

• OpenCV Software distribuido balo licencia Berkeley Software Distribution (BSD).

• dxib La utilización de la librería dxib es permitida para este uso, puesto que queda indicado al formar parte de la licencia de QCAD de código abierto.

• ImageMagick. Software libre en una distribución binaria para uso tanto en aplicaciones abiertas como propie- tarias. Se distribuye bajo la licencia Apache 2.0. Se ha revisado la licencia de este software en vistas de desarrollos futuros.

ANEXO C MANUAL DE INSTALACIÓN

n el presente manual se explicarán las acciones a llevar a cabo para la instalación de los diferentes E elementos que son necesarios para la correcta ejecución del sistema nal desarrollado a la largo de este TFG.

C.1 INSTALACIÓN DE COMPONENTES

A lo largo de esta sección se explicará como crear un entorno de desarrollo compatible con un sistema Windows 10 de 64 bits, puesto que este sistema es el seleccionado nalmente por la empresa Ïndra S.L."para el desarrollo de sus soluciones corporativas. Qt y Visual Studio 2015 como herramientas principales.

C.1.1 Instalación del entorno de desarrollo

La instalación de Visual Studio 2015 se ha realizado de manera remota por parte del personal técnico de Indra S.L., incluyendo una licencia corporativa. Qt se ha instalado siguiendo un procedimiento menos habitual, ya que se ha utilizado una distribución empaquetada dentro del entorno MSYS2.

MSYS2

Los elementos esenciales que el equipo debe tener para el desarrollo de una parte del desarrollo son: framework de desarrollo (Qt) y un compilador (MinGW ). Dicha composición de elementos presenta algunas dicultades para su instalación de manera nativa con una arquitectura de 64 bits, la cual es necesario para la compilación de las librerías de Potrace en nuestro sistema. Por este motivo, se ha optado por el despliegue apoyándonos en MSYS2. Para su instalación, el usuario debe descargar el instalador ejecutable (x64) disponible a continua- ción: hp://www.msys2.org/ Una vez descargado el instalador, seguiremos la guía facilitada por éste y ejecutaremos MSYS2. MSYS2 proporciona una interfaz de comandos, sobre la cual actualizaremos la base de datos y paquetes del sistema con la siguiente instrucción:

1 pacman -Sy § ¤ 2 pacman --needed -S bash pacman pacman-mirrors msys2-runtime

¦ ¥ 110 C.1. INSTALACIÓN DE COMPONENTES

Si fuera necesario, para completar la actualización reiniciaremos MSYS2 Y ejecutaremos:

1 pacman -Su § ¤

Tras¦ nalizar la conguración y actualización de MSYS2, prepararemos el entorno Qt + MinGW-¥ w64. Para ello instalaremos los paquetes:

1 pacman -S base-devel git mercurial cvs wget p7zip § ¤ 2 pacman -S perl ruby python2 mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

1 ¦ pacman -S mingw-w64-x86_64-qt mingw-w64-x86_64-qt-creator ¥ § ¤

Este¦ comando instalará la última versión estable de Qt Creator y de Qt, incorporándolas dentro¥ del entorno de 64 bits de MinGW. Realizada la instalación, ejecutamos en el terminal: qtcreator Tras lanzar el editor QtCreator, podremos observar una correcta instalación que permite una conguración de kits de desarrollo autodetectada. Esta conguración permite una adecuada inter- relación entre el proyecto, compiladores, debuggers y otros componentes. De no ser así, podemos congurar estos componentes de manera manual a través de la opción Manage Kits.

C.1.2 Instalación de las librerías de imagen

• Potrace 1.15.

– Compilado del núcleo con MinGW x64 asistido por la herramienta CMake. – Inclusión de código fuente modicado.

• OpenCV 3.4.0.

1 mkdir /c/msys2/repos § ¤ 2 cd /c/msys2/repos 3 git clone https://github.com/Alexpux/MINGW-packages.git

Nos situamos¦ en el directorio del paquete que vamos a instalar: ¥

1 updpkgsums § ¤ 2 makepkg-mingw -fsiL

1 ¦ pacman -U ${package-name}’’’.pkg.tar.xz ¥ § ¤ ¦ ¥ • dxib 3.17.0. Procedimiento estándar:

1 ./configure § ¤ Windows¦ : ¥

1 MinGW32-make § ¤ Unix/¦Linux ¥

1 make § ¤ Esto último¦ crea el archivo estático dxib.a. ¥ BIBLIOGRAFÍA

CONTEXTO

[1] Adobe. Adobe Streamline User Guide (version 3 for Windows ed.) Mountain View, CA: Adobe Systems, 1992. [2] Corel. User Guide, CorelDRAW X3 Graphics Suite. Tracing bitmaps and editing traced results. Ottawa, ON: Corel Corporation, pp. 213–220, 2005. [3] Explicación de los modelos de color. Ayuda de CorelDRAW para usuarios de Adobe Illustrator. 2018. [4] Las mejores aplicaciones GIS open source. MappingGIS. 2018. url: hps://mappinggis.com/2012/ 09/aplicaciones-gis-open-source/. [5] Modelos de color Microsoft Expression Studio 2.0. 2017. url: hps://msdn.microso.com/es- es/library/dd129721.aspx. [6] UNED. Tecnología de los contenidos multimedia. Tema 1. Grácos vectoriales y de mapa de bits. Master en Comunicaciones, Redes y Gestión de Contenidos, 2008. [7] Comparación entre imagen Mapa de Bits y Vectorial. 2017. url: hps://es.wikiversity.org/wiki/ Formatos_y_procesamiento_de_imagen.

VECTORIZACIÓN

[8] Girija Dharmaraj. Algorithms for Automatic Vectorization of Scanned Maps. Department of Geomatics Engineering. School of Engineering. The University of Calgary., 2005. [9] Darren MacDonald. Jochen Lang. Bitmap to Vector Conversion for Multi-level Analysis and Visualization. 2008. url: hp://www.svgopen.org/2008/papers/42- Bitmap_to_Vector_ Conversion_for_Multilevel_Analysis_and_Visualization/. [10] P. Lakshaman y A. Skourikhine. Vectorized image segmentation via trixel agglomeration. Ago. de 2007. url: hps://encrypted.google.com/patents/EP1812886A1?cl=en. [11] Saima Farhan Muhammad Abuzar Fahiem. Representation of Engineering Drawings in SVG and DXF for Information Interchange. Department of Computer Science. Lahore College for Women University, Lahore. PAKISTAN. Department of Computer Science, Engineering. University of Engineering y Technology, Lahore. PAKISTAN, 2007. [12] Ojaswa Sharma. A methodology for raster to vector conversion of colour scanned maps. Geodesy y Geomatics Engineering. UNB. Technical Report no. 240.University of New Brunswick. P.O. Box 4400. Fredericton, N.B. Canada, 2006. [14] Giovanni Gallo Sebastiano Battiato. SVG rendering by watershed decomposition. Researchgate. University of Catania., 2005. 112 TECNOLOGÍAS

[15] Lakshman Prasad Sriram Swaminarayan. Raster to Vector Graphics for Image Data. Los Alamos National Laboratory. USA. Lakshman Prasad, 2007. [16] A Novel Rendering Strategy for SVG Vectorization. 2007. url: hp://www.svgopen.org/2007/ papers/NovelRenderingOrderSVGVectorization/index.html.

TECNOLOGÍAS

[17] AutoCAD. DXF Reference. Autodesk, Inc, 2012. [18] Gloria Bueno García y col. Learning Image Processing with OpenCV. Packt Publishing., 2015. [19] Miguel Mata Pérez. Bibliografía en LATEX. Una guía concisa de BibTEX. 2014. [20] OpenCV - Open Source Computer Vision Library. 2018. url: hps://opencv.org/. [21] Potrace - Transforming bitmaps into vector graphics. 2017. url: hp://potrace.sourceforge.net/. [22] Scalable Vector Graphics (SVG) 1.1 (Second Edition). 2017. url: hps://www.w3.org/TR/SVG/.