Diseño, Implementación y Prueba de un Algoritmo de Visualización, Seccionamiento y Conversión de Archivos de Video YUV

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Diseño, Implementación y Prueba de un Algoritmo de Visualización, Seccionamiento y Conversión de Archivos de Video YUV"

Transcripción

1 Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica Diseño, Implementación y Prueba de un Algoritmo de Visualización, Seccionamiento y Conversión de Archivos de Video YUV Por: Oscar Andrés Castro Campos Ciudad Universitaria Rodrigo Facio, Costa Rica 10 de diciembre de 2013

2

3 Diseño, Implementación y Prueba de un Algoritmo de Visualización, Seccionamiento y Conversión de Archivos de Video YUV Por: Oscar Andrés Castro Campos IE-0499 Proyecto eléctrico Aprobado por el Tribunal: Dr. Geovanni Martínez Castillo Profesor guía Ing. Peter De Ford González Profesor lector M.Sc. Luis Diego Rojas Muñoz Profesor lector

4

5 Resumen Este proyecto fue realizado en el Laboratorio de Investigación en Procesamiento Digital de Imágenes y Visión por Computador (IPCV-LAB por sus siglas en inglés) de la Escuela de Ingeniería Eléctrica de la Universidad de Costa Rica. En él se diseñó, implementó y probó, un algoritmo capaz de desplegar en una pantalla, la secuencia de imágenes contenida en un archivo de video YUV. Asimismo, es capaz de extraer del archivo una sección de la secuencia de imágenes, y convertirla ya sea en otro archivo de video YUV, o en un archivo de video de formato AVI, MPEG1, MPEG4 o H263. Igualmente, es capaz de almacenar las imágenes contenidas en una sección de un archivo de video YUV en archivos separados, enumerados secuencialmente, en formato BMP, JPEG, PNG, TIFF, PBM, PGM o PPM. Los archivos de video YUV de entrada o salida, pueden ser de submuestreo de crominancias 4:4:4, 4:2:2, 4:1:1, 4:2:0 o 4:0:0. Complementariamente también se diseñó, implementó y probó una interfaz de usuario que permite de una manera amigable su utilización. Con el algoritmo de conversión de secuencias de imágenes desarrollado, se logró convertir satisfactoriamente a todos los formatos propuestos. Además, mediante el estudio de los procesos de conversión de secuencias de imágenes, se comprendió cómo estas secuencias se pueden almacenar en archivos individuales numerados secuencialmente, o en un solo archivo de video. También se estudió el modelo de color YUV, el cual se utiliza en la creación y manejo de archivos de video YUV con los que el algoritmo de conversión de secuencias de imágenes trabaja. v

6

7 Índice general Índice de figuras Índice de cuadros Nomenclatura ix xiv xv 1 Introducción Objetivos Metodología Formación de video y modelos de color Formación de una señal analógica de video y modelo de color RGB Formación de una señal digital de video Modelo de color YUV Secuencias de imágenes Compresión de video Compresión de imágenes individuales Cámaras de video con sensores CCD y CMOS Cámaras de vídeo con barrido entrelazado y progresivo Descripción del Hardware y Software Instalación de Ubuntu LTS Instalación de Code::Blocks Instalación de OpenCV Integración de OpenCV en Code::Blocks Descripción del Algoritmo Lectura de parámetros de control Conversión secuencias de imágenes individuales en archivo de video Conversión de archivo de video a secuencias de imágenes Descripción interfaz gráfica de usuario GUI Instalación Librería GTK Integración de GTK+ en Code::Blocks vii

8 5.3 Crear una interfaz gráfica de usuario Descripción de la interfaz gráfica de usuario del algoritmo Ejecución del algoritmo y resultados Ejecución del algoritmo Resultados Conclusiones y recomendaciones 119 Bibliografía 123 viii

9 Índice de figuras 2.1 Líneas de barrido en la formación de una señal analógica Imagen bidimensional de una señal analógica de video Imagen bidimensional de una señal digital de video Representación gráfica de un pixel con el modelo de color RGB Formación de colores con pixeles RGB Imagen representada con pixeles RGB Ejemplos de imágenes RGB Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:4: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:2: Representación gráfica de la imagen del modelo de color YUVcon un submuestreo de crominancias YUV 4:1: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:2: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:0: Secuencia de imágenes en una línea de tiempo Secuencia de imágenes de un objeto en movimiento (DIGEST, 2009) Diagrama de bloques del codificador AVI (Hashem, 2012) Diagrama de bloques del decodificador AVI (Hashem, 2012) Diagrama de bloques de la primera etapa Diagrama de bloques de la segunda etapa Efecto de la Transformada Discreta del Coseno (DCT) Patrón de escaneo tipo zigzag (MultimediaWiki, 2007) Diagrama de bloques de la tercera etapa Diagrama de bloques de la cuarta etapa Compensación de movimiento Diagrama de bloques del codificador / decodificador por compensación de movimiento para codificación interframe Transformada Discreta del Coseno de dos dimensiones (2-D DCT) Diagrama de bloques de la compresión de imagen JPEG (Li y Drew, 2003) Reordenamiento zigzag de los coeficientes AC y DC Diagrama del codificador DPCM ix

10 2.29 Entropy coding Sensor CCD (Liarte, 2009) Sensor CMOS (Liarte, 2009) Barrido entrelazado Barrido progresivo Pantalla de bienvenida (Ubuntu, 2013) Pantalla preparación para la instalación (Ubuntu, 2013) Selección de red inalámbrica (Ubuntu, 2013) Tipo de instalación (Ubuntu, 2013) Comprobación de el tipo de instalación (Ubuntu, 2013) Selección de zona horaria (Ubuntu, 2013) Distribucción del teclado (Ubuntu, 2013) Pantalla nombre de usuario y contraseña (Ubuntu, 2013) Pantalla instalación Ubunto (Ubuntu, 2013) Aviso de instalación completa(ubuntu, 2013) Centro de Software de Ubunto Búsqueda CodeBlocks Versión CodeBlocks Configuración de Code::Blocks Pantalla de inicio CodeBlocks Selección de plantilla Selección de lenguaje de programación Creación del poyecto Selección del compilador Pantalla de inicio del proyecto Pantalla de compilación Opciones que soporta OpenCV Archivo de configuración Archivo de configuración P KG CONF IG P AT H Captura Built Options integración dependencias Captura directorio de librerías Captura librerías agregadas Captura incorporación directorio Compiler Captura incorporación directorio Linker Programa ejemplo integración librería OpenCV y Code::Blocks Imagen de Claire Diagrama del algoritmo Lectura de parámetros de control Archivo de control de parámetros x

11 4.4 Conversión de secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente en archivo de video Conversión de archivo de video a secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente o en archivos de video YUV Conversión YUV 4:4:4 a YUV 4:4: Conversión YUV 4:4:4 a YUV 4:2: Conversión YUV 4:4:4 a YUV 4:1: Conversión YUV 4:4:4 a YUV 4:2: Conversión YUV 4:2:2 a YUV 4:2: Conversión YUV 4:2:2 a YUV 4:4: Cuadrángulo de puntos de interpolación Cuadrángulo de puntos de interpolación de las crominancias Cuadrángulo de puntos de interpolación de las crominancias en los bordes Conversión YUV 4:2:2 a YUV 4:1: Conversión YUV 4:2:2 a YUV 4:2: Conversión YUV 4:1:1 a YUV 4:1: Conversión YUV 4:1:1 a YUV 4:2: Conversión YUV 4:1:1 a YUV 4:4: Conversión YUV 4:1:1 a YUV 4:2: Conversión YUV 4:2:0 a YUV 4:2: Conversión YUV 4:2:0 a YUV 4:2: Conversión YUV 4:2:0 a YUV 4:4: Conversión YUV 4:2:0 a YUV 4:1: Transformación imagen YUV a imagen RGB Captura integración de librerías GTK Archivo de texto params.txt Ejemplo de una interface gráfica de usuario simple Diagrama de Bloques del GUI Lectura de parámetros de control Menú principal interfaz gráfica de usuario Ventana de la función Convertir Secuencia de Imágenes Individuales a Archivo de Video YUV Ventana de la función Convertir Archivo de Video YUV a Archivo de Video YUV Ventana de la función Convertir Archivo de Video YUV a Secuencia de Imágenes Individuales Ventana de la función Convertir Archivo de Video a Secuencia de Imágenes Individuales xi

12 5.11 Ventana de la función Convertir Archivo de Video a Archivo de Video YUV Ventana de la función Convertir Archivo de Video YUV a Archivo de Video Ventana de la función Convertir Secuencia de Imágenes Individuales a Archivo de Video Ejecución de la interfaz gráfica de usuario en el entorno de desarrollo Code::Blocks Ejecución del algoritmo de conversión en el entorno de desarrollo Code::Blocks Interfaz gráfica de usuario con los valores correspondientes a la conversión de una secuencia de imágenes individuales a un archivo YUV Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente Secuencia de imágenes almacenada en un archivos de video YUV Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo YUV a otro archivo YUV con diferente sub-muestreo de crominancias Secuencia de imágenes almacenada en un archivos de video YUV Secuencia de imágenes almacenada en un archivos de video YUV Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo YUV a una secuencia de imágenes individuales Secuencia de imágenes almacenada en un archivos de video YUV Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo de Video a una secuencia de imágenes individuales Secuencia de imágenes almacenada en un archivos de video en formato AVI Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo de video a un archivo YUV Secuencia de imágenes almacenada en un archivos de video en formato AVI Secuencia de imágenes almacenada en un archivos de video YUV Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo YUV a un archivo de Video Secuencia de imágenes almacenada en un archivos de video YUV xii

13 6.20 Secuencia de imágenes almacenada en un archivos de video en formato AVI Interfaz gráfica de usuario con los valores correspondientes a la conversión de una secuencia de imágenes individuales a un archivo de Video Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente Secuencia de imágenes almacenada en un archivos de video en formato AVI xiii

14 Índice de cuadros 7.1 Resumen de lo que es capaz el algoritmo xiv

15 Nomenclatura AVI B BIOS BMP BSD C C++ CCD CD CD-ROM Audio Video Interleave / Contenedor de audio y video Blue /Azul Basic Input-Output System/Sistema Básico de Entrada/Salida Bitmap image file/ Archivo de imagen de mapa de bits Berkeley Software Distribution Programming language/lenguaje de programación Programming language/lenguaje de programación charge-coupled device/ Dispositivo de carga acoplada Compact Disc /Disco compacto Compact Disc Read Only Memory/Disco compacto de lectura CMOS Complementary metal-oxide-semiconductor/ Semiconductor complementario de óxido metálico CPU Central Processing Unit /Unidad Central de Procesamiento DVD G GB H236 Digital Versatile Disc /Disco versátil digital Green Gigabyte Estándar de la Unión Internacional de Telecomunicaciones para la codificación de vídeos Hz JPEG Hertz Joint Photographic Experts Group/ Grupo Conjunto de xv

16 Expertos en Fotografía MPEG Moving Picture Experts Group/ Grupo de Trabajo de expertos PBM PCM Portable Bit Map/ Mapa de bits portátil Pulse Code Modulation/ Modulación por impulsos codificados PGM PNG PPM R RAM RGB TIFF Pragmatic General Multicast Portable Network Graphics/ Gráficos de Red Portátiles Portable Pixel Map/Mapa de píxeles portable Red/Rojo Random-access memory/ Memoria de acceso aleatorio Red Green Blue/Modelo de color Tagged Image File Format/Formato de archivo informático para imágenes. t k YUV Instante de tiempo modelo de color xvi

17 1 Introducción En el Laboratorio de Investigación en Procesamiento Digital de Imágenes y Visión por Computador (IPCV-LAB por sus siglas en inglés) de la Escuela de Ingeniería Eléctrica de la Universidad de Costa Rica, surge la necesidad de contar con herramientas de software que permitan convertir secuencias de imágenes a diferentes formatos, así como extraer de estas, solo la cantidad de imágenes de interés. En el mercado existen convertidores de secuencias de imágenes, que permiten convertir muy pocos formatos o que no cuentan con todas las funciones de conversión que se podrían requerir. Como por ejemplo, el YUV Converter de Sunray Image, esta herramienta permite hacer conversiones de un archivo YUV/RGB/BMP a otro. Los archivos fuente y destino pueden ser de formato YUV 4:4:4, 4:2:2 o 4:2:0, o formato RGB 4:4:4, o una secuencia de archivos BMP (Sunray, 2009). El costo de la licencia de este convertidor para un usuario estándar en una máquina es de $229. Teniendo en cuenta que este convertidor no admite conversión a ningún tipo de archivo de video, no satisface todas las necesidades de conversión que se puede requerir. Un ejemplo de un convertidor más completo es el YUV Convert desarrollado por AccepTV, la cual es una empresa con origen en el Instituto de Investigación en Comunicaciones y Cibernética de Nantes. YUV Convert permite convertir archivos de video de cualquier formato a formato YUV sin comprimir (4:2:0, 4:2:2 y 4:4:4), y convertir archivos de vídeo a secuencias de imágenes y viceversa. Sin duda este convertidor tiene más funciones que el de Sunray Image, debido a esto su licencia es más aún más costosa, pero ninguno puede convertir directamente desde un archivo YUV sin comprimir a una secuencia de imágenes o viceversa (AccepTV, 2013). Existen también convertidores de software libres, como el YUVconverter que se puede encontrar en sourceforce.net, pero este convertidor únicamente es capaz de convertir desde un archivo YUV420 a otros formatos de video sin comprimir y viceversa (Geeknet, 2009). Después de analizar los convertidores de secuencias de imágenes que están disponibles en el mercado, y comparar las funciones que ofrecen con las necesidades de conversión de secuencias de imágenes del IPCV-LAB, se concluye que los convertidores comerciales no satisfacen las necesidades de este. Por lo tanto, aun comprando muchos programas para convertir secuencias de imágenes, lo cual resultaría poco práctico y económicamente un desperdicio de recursos, no se abarcaría con todos los formatos y tipos de conversiones que se 1

18 2 1 Introducción requieren. Una posible solución, es encontrar una empresa de soluciones informáticas altamente capacitada, para que desarrolle un software a la medida de lo que se requiere, pero esto significa una inversión económica considerable, y contando con recursos limitados no representa una opción viable. Como respuesta a esta necesidad, se plantea el desarrollo de un algoritmo que permita convertir y seccionar secuencias de imágenes, en los formatos con los que se trabaja habitualmente en el IPCV-LAB. En este proyecto se diseña, implementa y prueba un algoritmo capaz de visualizar en una pantalla la secuencia de imágenes contenida en un archivo de video YUV. Asimismo, es capaz de extraer del archivo una sección de la secuencia de imágenes y convertirla ya sea en otro archivo de video YUV o en un archivo de video de formato AVI, MPEG o H263. Igualmente, es capaz de almacenar las imágenes contenidas en una sección de un archivo de video YUV en archivos separados, enumerados secuencialmente, ya sea de formato YUV o de formato BMP, JPEG, PNG, TIFF, PBM, PGM o PPM. Los archivos de video YUV de entrada o salida pueden ser de submuestreo de crominancias 4:4:4, 4:2:2, 4:1:1, 4:2:0 o 4:0:0. Complementariamente también se diseña, implementa y prueba una interfaz de usuario que permite de una manera amigable modificar los parámetros de control contenidos en un archivo de texto. Se espera alcanzar con la utilización de este algoritmo en el IPCV-LAB, que facilite la escritura de artículos, creación de presentaciones y mejorar la compatibilidad de programas. Esto mediante la conversión de secuencias de imágenes a diferentes formatos. Para introducir al lector en el teoría necesaria para comprender lo realizado en el proyecto, se describirá en el capítulo 2: el proceso de formación de imágenes en un video, luego se profundizará en los modelos de color RGB y YUV, y se detallarán los procesos de compresión de video e imágenes, en la última sección se abarcará una explicación de las cámaras de video con sensor CCD y CMOS, con barrido entrelazado y progresivo. En el capítulo 3 se realizará la descripción del hardware y software utilizado para desarrollar el algoritmo propuesto, así como los tutoriales de instalación, configuración e integración de los programas. El capítulo 4 abarcará la descripción detallada del algoritmo, mediante el diagrama de bloques se explicarán paso a paso las conversiones que es capaz de realizar y las secuencias de imágenes que puede generar. La descripción detallada del funcionamiento de la interfaz gráfica de usuario desarrollada para modificar el archivo de control de parámetros, se realiza en el capítulo 5. Además en este capítulo también se explica cómo desarrollar una interfaz gráfica de usuario simple utilizando las funciones de la librería GTK+.

19 1.1. Objetivos 3 En el último capítulo se explica cómo ejecutar el algoritmo y la interfaz gráfica de usuario. Y también se muestran los resultados que se obtienen al realizar las conversiones de las secuencias de imágenes con el algoritmo. 1.1 Objetivos Para la elaboración de este proyecto se establecieron los siguientes objetivos: Objetivo General Diseñar, implementar y probar un algoritmo de visualización, seccionamiento y conversión de secuencias de imágenes, mediante el lenguaje de programación C, para solventar la necesidad de contar con una herramienta de software que permita la conversión de secuencias de imágenes a diferentes formatos Objetivos específicos Estudiar como una cámara de video con sensor CMOS o CCD, de barrido entrelazado o progresivo, captura una imagen de color de una escena. Estudiar los modelos de color RGB y YUV, así como los métodos de conversión entre ambos modelos. En el caso del modelo de color YUV estudiar también las variantes de submuestreo de crominancias 4:4:4, 4:2:2, 4:1:1, 4:2:0 y 4:0:0. Estudiar el sistema operativo UBUNTU, la plataforma de programación code::blocks, el lenguaje de programación C, así como la herramienta de construcción de interfaces de usuario denominada GTK+. Diseñar, implementar y probar un algoritmo de visualización, seccionamiento y conversión de archivos de video YUV en el lenguaje de programación C, con la ayuda de la plataforma de programación code::blocks, la herramienta de construcción de interfaces de usuario GTK+, bajo el sistema operativo Ubuntu. 1.2 Metodología Para el desarrollo de este trabajo se llevaron a cabo los siguientes pasos: 1. Instalación del sistema operativo UBUNTU, la plataforma de programación Code::Blocks, y la librería Opencv. Así como la integración de OpenCV en Code::Blocks.

20 4 1 Introducción 2. Investigación de las cámaras de video con sensor CMOS y CCD, de escaneo entrelazado y progresivo, para la captura una imagen de color de una escena. Además de investigar el proceso de formación de una señal de video analógica y digital. 3. Estudio bibliográfico de los modelos de color RGB y YUV, y de los métodos de conversión entre ambos modelos. Además, estudio de los tipos de submuestreo de crominancias, para el caso del modelo de color YUV. 4. Investigación de secuencias de imágenes y codecs de compresión de video. 5. Preparación de un diseño, para la elaboración del algoritmo de visualización, seccionamiento y conversión de secuencias de imágenes. 6. Implementación del algoritmo diseñado para la visualización, seccionamiento y conversión de secuencias de imágenes. Por medio del lenguaje de programación C, con la ayuda de la plataforma de programación Code::Blocks. 7. Verificación del algoritmo desarrollado para la visualización, seccionamiento y conversión de secuencias de imágenes. 8. Elaboración de una interfaz de usuario, mediante la herramienta de construcción de interfaces de usuario GTK+, en el sistema operativo Ubuntu.

21 2 Formación de video y modelos de color En este capítulo se abarcará las bases teóricas para comprender el funcionamiento del algoritmo. Se desarrollarán conceptos de la formación de una señal video analógica y digital, los modelos de color RGB y YUV, y los conceptos de secuencia de imágenes y compresión de video. Además se estudiará cómo funcionan las cámaras de vídeo con sensor CMOS y con sensor CCD, y la diferencia entre una cámara de vídeo con escaneo progresivo y con escaneo entrelazado. 2.1 Formación de una señal analógica de video y modelo de color RGB Una señal analógica de video es una secuencia de imágenes bidimensionales que resultan de capturar en el plano de una cámara el color de la luz reflejada por la superficie de los objetos de una escena tridimensional en diferentes instantes de tiempo. Este proceso se conoce como barrido (scanning), y existen dos tipos, el barrido entrelazado (Interlaced Scan) y el barrido progresivo (Progressive Scan). De esta forma se recoge la información acerca de la distribución luminosa que incide en la lente de la cámara a través de unas líneas predefinidas de muestreo, así como la información de control (sincronismos) acerca de la posición horizontal y vertical del punto de barrido en cada momento. La Figura 2.1 ilustra el principio de barrido entrelazado, en el cual dos líneas de barrido son necesarias para desplegar la imagen completa. El barrido impar comienza en la esquina superior izquierda de la imagen, mientras que el barrido par comienza en centro superior de la imagen. Entrelazando los dos barridos completos se dibuja la imagen. Al final de este capítulo se estudiaran las cámaras con barrido entrelazado y con barrido progresivo, así como las principales diferencias entre estas. Como se muestra en la figura 2.1, la señal es discreta en el tiempo, pero en el espacio es continua a lo largo del eje x y discreta a lo largo del eje y. 5

22 6 2 Formación de video y modelos de color Figura 2.1: Líneas de barrido en la formación de una señal analógica. La señal continua, a lo largo de una línea arbitraria capturada en el instante de tiempo t k, se subdivide a la vez en tres señales (componentes) denominadas R (Red), G (Green) y B (Blue), que representan las porciones de cada uno de los tres colores primarios R o, G o y B o, que al mezclarse reproducen el color de la luz que incidió a lo largo de esa línea en el instante de tiempo t k. A este proceso de formación de imágenes se le denomina modelo de color RGB. Figura 2.2: Imagen bidimensional de una señal analógica de video.

23 2.2. Formación de una señal digital de video Formación de una señal digital de video Una señal digital de video, es discreta en el tiempo y el espacio, por lo tanto es discreta tanto en el eje x como en el eje y. Cada muestra espacial está compuesta por tres componentes, un valor R, un valor G y un valor B, y se denomina pixel, por lo tanto, un pixel es la menor unidad homogénea en color que forma parte de una imagen. El nombre pixel es una abreviatura de su nombre en inglés picture element. Los valores R, G y B de cada pixel son cuantizados, usando cuantizadores uniformes de 256 niveles de cuantización y codificados con palabras de código PCM de 8bits. Entonces para escribir el color de cada pixel se utilizan 24 bits, 8 bits por cada componente R, G y B. La calidad de color deseable se alcanzaría con 24 bits de color (8 bits de cada canal RGB), aunque a menudo se usa una solución de compromiso para disminuir los requisitos de tamaño de 16 bits (5 bits R, 6 bits G, 5 bits B, ya que el ojo humano parece ser más receptivo al verde). La figura 2.3 muestra una imagen bidimensional de una señal digital de video. Figura 2.3: Imagen bidimensional de una señal digital de video. Se puede representar cada pixel gráficamente como se muestra en la figura 2.4.

24 8 2 Formación de video y modelos de color Figura 2.4: Representación gráfica de un pixel con el modelo de color RGB. Por lo tanto, una imagen de N ancho y M alto, tiene NxM número de pixels y cada pixel tiene tres componentes RGB. Para formar diferentes colores se deben modificar los valores de cada componente RGB, en la figura 2.5 se muestran algunos ejemplos. Figura 2.5: Formación de colores con pixeles RGB. La representación de una imagen bidimensional de una señal digital de video con pixeles RGB, es como se muestra en la figura 2.6, la cual indica cómo se ordenan los pixeles en el orden R (Rojo), G (Verde) y B (Azul). El modelo RGB es utilizado en todos los sistemas que forman imágenes a través de rayos luminosos, ya sea emitiéndolos o recibiéndolos (Figura 2.7).

25 2.2. Formación de una señal digital de video 9 Figura 2.6: Imagen representada con pixeles RGB. Figura 2.7: Ejemplos de imágenes RGB. Con el modelo RGB se forman casi todas las imágenes digitales, desde las más sencillas hasta las fotografías que se toma con una cámara digital.

26 10 2 Formación de video y modelos de color 2.3 Modelo de color YUV Luego de la segunda guerra mundial, se dieron avances importantes en la tecnología, dando origen a la televisión, pero debido al poco conocimiento sobre la transmisión de imágenes y la tecnología existente, solamente fue posible transmitir señales en escala de grises, lo cual se conoció como televisión en blanco y negro. La señal en blanco y negro puede representarse con un solo valor lineal de brillo, pero una señal a color necesita tres señales independientes que representen el brillo de cada punto filtrado, con un color primario RGB. Por lo tanto, cuando se hizo necesario transmitir señales a color se debió transformar las tres señales RGB en una señal que fuera visualizable por el televisor en blanco y negro, y que al mismo tiempo pudiera trasmitirse por el mismo canal de televisión existente garantizando una imagen en color con una calidad satisfactoria. De esta forma, se creó un nuevo modelo de color el cual consiste en transformar por combinación lineal las tres componentes RGB (rojo, verde, azul), en otras tres señales equivalentes Y, U y V. La componente de luminosidad Y es la que reciben los televisores blanco y negro, y las componentes U y V son las crominancias de color que los nuevos televisores a color, reciben y combinan con la componente de luminosidad Y para obtener la imagen a color. Las componentes U y V se trasmiten en el mismo canal de televisión existente, pero como el receptor del televisor blanco y negro no tiene la capacidad de recibir estas componentes, simplemente las ignora y recibe únicamente la componente de luminosidad Y. El modelo de color YUV surge de una transformación lineal de los tres componentes RGB de cada pixel de una imagen. Por lo tanto, para transformar una imagen del modelo de color RGB al modelo de color YUV, se debe recorrer cada pixel de la imagen y calcular los componentes Y, U y V. Originalmente el modelo de color YUV contemplaba que los componentes de las crominancias adquirieran valores negativos, pero con el desarrollo de la tecnología y las nuevas aplicaciones, fue necesario evitar que estos componentes adquirieran valores inferiores a cero. Para ello se modificaron las ecuaciones para el cálculo del modelo de color YUV, adicionando un factor de 16 en la luminosidad y un factor de 128 en cada una de las crominancias. Con lo cual se obtuvo la ecuación (2.1) del modelo de color YUV compensado. Y +0, , , 098 R 16 U = 0, 148 0, , 439 G (2.1) V +0, 439 0, 368 0, 071 B 128 A la componente U con el factor de desplazamiento se le conoce como Cr y a la componente V como Cb, de ahí la notación YCrCb, que aparece en varios

27 2.3. Modelo de color YUV 11 textos. Para efectos prácticos se le continúa denotando modelo de color YUV, debido al estándar de la extensión de los archivos. El modelo de color YUV, codifica una imagen o video en color, teniendo en cuenta que el ojo humano percibe principalmente los componentes de intensidad, y la porción que es capaz de percibir de las longitudes de onda de la parte visible del espectro electromagnético, es muy pequeña en comparación con todas las existentes, por lo cual el modelo YUV permite utilizar un ancho de banda reducido para los componentes de crominancia, de esta forma, hace que los errores de transmisión o las imperfecciones de compresión, se oculten más eficientemente a la percepción humana, que usando una representación RGB. Debido a esto existen cinco tipos de submuestreos de crominancias para las imágenes: YUV 4:4:4, YUV 4:2:2, YUV 4:1:1, YUV 4:2:0 y YUV 4:0:0. Una vez calculados los componentes Y, U y V de todos los pixeles de la imagen RGB, estos se acomodan de manera diferente a los componentes RGB, ya que se deben colocar todos los componentes de luminosidad Y en primer lugar, luego se colocan todos los componentes de las crominancias U y por último los componentes de las crominancias V. Se pueden representar las imágenes del modelo de color YUV mediante bloques, como se hizo al representar al modelo de color RGB, pero en el caso del modelo de color YUV cada bloque representa los componentes de toda la imagen, mientras que en el caso del modelo de color RGB cada bloque representa una componente de un único pixel de la imagen. El submuestreo de crominancias YUV 4:4:4 realmente no tiene submuestreo, guarda las crominancias del mismo tamaño (ancho por alto) que la componente de intensidad, como se muestra en la figura 2.8. Figura 2.8: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:4:4. El submuestreo de crominancias YUV 4:2:2 guarda las crominancias con la mitad del ancho de la componente de intensidad. Permite reducir en un tercio la cantidad de información por imagen. La representación gráfica se muestra en la figura 2.9.

28 12 2 Formación de video y modelos de color Figura 2.9: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:2:2 El submuestreo de crominancias YUV 4:1:1 guarda las crominancias con un cuarto del ancho de la componente de intensidad. Permite reducir a la mitad la cantidad de información por imagen (Figura 2.10). Figura 2.10: Representación gráfica de la imagen del modelo de color YUVcon un submuestreo de crominancias YUV 4:1:1 El submuestreo de crominancias YUV 4:2:0 guarda las crominancias con un la mitad del ancho y la mitad del alto de la componente de intensidad. Permite reducir a la mitad la cantidad de información por imagen (Figuura 2.11). Figura 2.11: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:2:0

29 2.4. Secuencias de imágenes 13 El submuestreo de crominancias YUV 4:0:0 no guarda crominancias, por lo que este método de submuestreo procesa imágenes sin color, lo que hace que sea más sencillo de trabajar algunas aplicaciones de visión por computador (Figura 2.12). Figura 2.12: Representación gráfica de la imagen del modelo de color YUV con un submuestreo de crominancias YUV 4:0:0 2.4 Secuencias de imágenes Una secuencia de imágenes es un grupo de imágenes sucesivas que pueden estar almacenadas en archivos individuales numerados secuencialmente, o en un solo archivo de video. Figura 2.13: Secuencia de imágenes en una línea de tiempo. En caso de estar almacenadas en archivos individuales numerados secuencialmente, puede ser de formato BMP, JPEG, PNG, TIFF, PBM, PGM, PPM, entre otros. Cuando una secuencia de imágenes esta almacenada en un solo archivo de video, puede ser de formato YUV, AVI, MPEG, H263. Estos archivos de video almacenan la secuencia de imágenes cuadro por cuadro (frame por frame), por lo que se puede tener acceso a cualquier imagen de la secuencia, recorriendo el archivo de video. Cada archivo de imagen representa un fotograma de vídeo, por lo tanto si un clip de 10 segundos de duración, tiene 25 fotogramas por segundo, debería

30 14 2 Formación de video y modelos de color tener 250 archivos de imagen. A la cantidad de fotogramas por segundo se le denomina frame rate, y representa la velocidad con la que se reproducen esas imágenes o frames en un video (Figura 2.13). Esa velocidad se suele expresar en Frames por segundo (fps). La velocidad o Framerate estándar para el sistema NTSC es de 30 frames por segundo o 30 fps. El vídeo comercial emplea un Framerate aproximado de entre fps que es la velocidad considerada como movimiento total o Full motion, por debajo de 15 fps se observan intermitencias en la imagen del vídeo (Figura 2.14). Figura 2.14: Secuencia de imágenes de un objeto en movimiento (DIGEST, 2009).

31 2.5. Compresión de video Compresión de video El video digital actualmente es utilizado en muchas áreas diferentes, como la radiodifusión, teleconferencias, telefonía celular, vigilancia, y entretenimiento. Las personas esperan tener acceso a videos desde una amplia gama de dispositivos, por lo tanto, para proveer este servicio es necesario conocer qué es la compresión de video para el almacenamiento y transmisión (Holtz, 2013). La compresión de imágenes de vídeo se ha convertido en algo necesario y muy importante, debido a que la transmisión y almacenamiento de video sin comprimir sería extremadamente costoso e impráctica. Por ejemplo, una imagen de video no comprimida ocupa 1 MB aproximadamente. Para obtener un video fluido, se necesita una frecuencia de al menos 25 ó 30 imágenes por segundo, lo que genera un flujo de datos de 30 MB/s aproximadamente, es decir, más de 1,5 GB por minuto. Lo cual claramente resulta muy poco práctico. La compresión se refiere al proceso de reducir el número de bits requeridos para representar la imagen de vídeo y se presenta en dos formas sin pérdidas y con pérdidas (Schaab, 2004). La compresión sin pérdida es un proceso para reducir los datos de la imagen o del vídeo para el almacenamiento y la transmisión, y que al mismo tiempo conserva la calidad de la imagen original (es decir, se requiere que la calidad de la imagen decodificada sea idéntica a la calidad de la imagen antes de la codificación). Por otra parte, en la compresión con pérdida, alguna información presente en la imagen original o de vídeo se descarta de manera que la representación original de la imagen o del vídeo sólo puede ser aproximadamente reconstruido a partir de la representación comprimida con alta relación de compresión. En general, las secuencias de vídeo contienen una cantidad significativa de redundancia estadística y subjetiva dentro de y entre los frames. Por lo tanto, el objetivo de la compresión de vídeo, es la reducción de la tasa de bits (bitrate) para el almacenamiento y la transmisión, eliminando la redundancia espacial y temporal, y codificando el conjunto mínimo de información mediante técnicas de codificación sin pérdidas. La redundancia estadística y subjetiva que puede ser eliminada para la compresión, es llamada redundancia espacial y temporal. Un codec de video es un algoritmo que se utiliza para comprimir / descomprimir datos de un vídeo digital de acuerdo al formato de archivo. Logran reducir el número de bits requeridos para representar la imagen de vídeo sin perder información importante. A estos algoritmos se los denomina CoDec debido a las palabras del inglés COmpression/DECompression. A continuación se describen los codec de compresión de los formatos AVI, MPEG y H263 con lo que es capaz de trabajar el algoritmo.

32 16 2 Formación de video y modelos de color Compresión de video AVI En los diagramas de bloques de las figura 2.15 y 2.16, se muestra un sistema para realizar la compresión del archivo de video AVI. Este se puede resumir en cuatro etapas: la primera etapa es la apertura del archivo de video AVI, la segunda etapa consiste en la compresión de la secuencia de frames de video utilizando la Transformada Discreta del Coseno (DCT por sus siglas en inglés) para reducir la redundancia espacial de la imagen, y la técnica de compensación de movimiento para reducir la redundancia temporal, en la última parte de esta etapa se utiliza un método eficiente para codificarlos. En la tercera etapa se invierten las técnicas de compresión para obtener la secuencia de imágenes de video descomprimida, y en la cuarta etapa se reconstruye el archivo de video AVI. En las siguientes secciones se explica cada etapa en detalle. Figura 2.15: Diagrama de bloques del codificador AVI (Hashem, 2012).

33 2.5. Compresión de video 17 Figura 2.16: Diagrama de bloques del decodificador AVI (Hashem, 2012). Primera Etapa: Abrir archivo AVI y convertir imágenes RGB a imágenes YUV Figura 2.17: Diagrama de bloques de la primera etapa.

34 18 2 Formación de video y modelos de color Como se muestra en la Figura 2.17, en la primera etapa el algoritmo abre la estructura AVI y obtiene la secuencia de frames o imágenes del video, luego toma la información del encabezado AVI, como el número total de frames, la altura y el ancho de la imagen, y divide el video en tres bandas que guarda en tres matrices individuales llamadas RED, GREEN, y BLUE, que son necesarias en las próximas etapas para comprimirlo. Después se convierte la imagen RGB en una imagen YUV con submuestreo 4:2:0. Obteniendo tres matrices llamadas Y, U y V, donde las matrices U y V tienen un tamaño igual a la cuarta parte de la matriz Y, debido al submuestreo 4:2:0. Este procedimiento se explicará en secciones posteriores. Segunda Etapa: Compresión y codificación de la secuencia de frames de video Figura 2.18: Diagrama de bloques de la segunda etapa. A las tres matrices Y, U, y V se le aplica la Transformada Discreta del Coseno (DCT por sus siglas en inglés). Esta transformación permite comprimir mediante la concentración de la mayor parte de la información de la imagen en un menor dominio espacial (Figura 2.19).

35 2.5. Compresión de video 19 La transformada discreta del coseno (DCT), es la que se utiliza más ampliamente en compresión de imágenes. Esta transformada cuenta con una buena propiedad de compactación de energía y produce coeficientes incorrelados, La decorrelación de coeficientes es muy importante para la compresión, ya que, el posterior tratamiento de cada coeficiente se puede realizar de forma independiente, sin pérdida de eficiencia de compresión. Otro aspecto importante de la DCT es la capacidad de cuantificar los coeficientes utilizando valores de cuantificación que se eligen de forma visual (Martin, 1993). Figura 2.19: Efecto de la Transformada Discreta del Coseno (DCT). En la compresión de vídeo, muchas partes de los bloques del frame actual son idénticos al correspondiente bloque del frame anterior. Por lo tanto, para lograr una codificación eficiente, se realiza una predicción a partir del frame de referencia anterior (Motion Compensated Predictor/ Predicción por compensación de movimiento). Se requiere que el codificador estime el movimiento de la imagen a fin de encontrar el área correspondiente en un frame anterior. En predicción por compensación de movimiento, el codificador busca una porción de un frame anterior que es similar a la parte del nuevo frame a transmitir. Luego, envía un vector de movimiento indicándole al descodificador qué parte del frame anterior se utilizará para predecir el nuevo frame. También envía el error de predicción, por lo que el nuevo frame puede ser reconstituido de manera exacta (Bretl, 2001). Se debe tener en cuenta que una estimación precisa del objeto de movimiento no es un requisito absoluto, pero es muy útil para encontrar cualquier parte del frame anterior que es similar al frame actual.

36 20 2 Formación de video y modelos de color El procedimiento consiste en tomar sólo la componente de luminancia Y de la secuencia de frames, de la cual se calcula el error de predicción por compensación de movimiento para cada frame, después se hace la diferencia absoluta de los frames sucesivos para reducir el valor de píxeles. Después de la cuantificación, es muy común que más de la mitad de los coeficientes DCT sean iguales a cero, por lo tanto se puede usar un patrón de escaneo tipo zigzag, como se muestra en la figura 2.20, para reordenar los coeficientes, de modo que todos los que son iguales a cero queden juntos, esto es muy utilizado en los métodos de compresión sin pérdidas. Figura 2.20: Patrón de escaneo tipo zigzag (MultimediaWiki, 2007). El proceso de escaneo en zigzag se aplica al algoritmo para convertir coeficientes de los bloques de 8*8 cuantizados, en un vector dimensional de 64 coeficientes. Finalmente se utiliza la compresión RLE (del inglés Run-Length Encoding) para comprimir los coeficientes.

37 2.5. Compresión de video 21 La compresión RLE es una forma muy simple de compresión de datos, en la que secuencias de datos con el mismo valor consecutivas son almacenadas como un único valor más su recuento. Esto es más útil en datos que contienen muchas de estas secuencias, como gráficos sencillos con áreas de color plano. Por ejemplo, considera una pantalla que contiene texto en negro sobre un fondo blanco. Habría muchas secuencias de este tipo con píxeles blancos en los márgenes vacíos, y otras secuencias de píxeles negros en la zona del texto. Supongamos una única línea, con N representando las zonas en negro y B las de blanco: BBBBBBBBBBBBNBBBBBBBBBBBBNN NBBBBBBBBBBBBBBBBBBBBBBBBNB Si aplicamos la codificación run-length a esta línea, obtendríamos lo siguiente: 12B1N12B3N24B1N1B Interpretado esto como 12 letras B, 1 letra N, 12 letras B, 3 letras N, etc. El código run-length representa el original de 67 caracteres en tan sólo 17 (Barlow, 2012). Esto quiere decir que la línea original pesa 67 bytes y la cadena codificada pesa sólo 17 bytes. Esta codificación traducida a binario, cuyo principio es el mismo, se utiliza para el almacenamiento de imágenes. Incluso ficheros de datos binarios pueden ser comprimidos utilizando este método. El primer byte contiene un número que representa el número de veces que el carácter está repetido. El segundo byte contiene al propio carácter. En otros casos se codifican en un solo byte: 1 bit (0 o 1) y 7 bits para especificar el número de caracteres consecutivos.

38 22 2 Formación de video y modelos de color Tercera Etapa: Proceso inverso del codificador El diagrama de bloque de la figura 2.21, muestra cómo se invierten las técnicas de compresión para obtener la secuencia de imágenes de video descomprimida. Figura 2.21: Diagrama de bloques de la tercera etapa. Esta parte consiste de varios algoritmos que son necesarios para descomprimir los datos de vídeo desde el archivo comprimido (es decir, la operación inversa de compresión), en la figura 2.21, se representan los bloques con la inversa de cada etapa del codificador.

39 2.5. Compresión de video 23 Cuarta Etapa: Reconstrucción del archivo de video AVI Como se muestra en la figura 2.22, el último bloque del decodificador es el que reconstruye el archivo de video AVI, utilizando la secuencia de imágenes que se obtiene de las etapas anteriores del decodificador. Figura 2.22: Diagrama de bloques de la cuarta etapa Compresión de video MPEG y H263 A pesar de utilizar el mismo algoritmo de compresión, los estándares MPEG y H263 se diferencian en su aplicación, tamaño e imágenes por segundo (framerate). Para comprender las diferencias entre estos, es necesario abordar las cinco iniciativas más importantes en la codificación de video que han dado lugar a una serie de estándares de vídeo (Haskell y Puri, 2012). Codificación de vídeo para la videoconferencia RDSI (Red Digital de Servicios Integrados), la cual dio lugar al estándar de codificación de vídeo de la UIT llamado H.261. La UIT (Unión Internacional de Telecomunicaciones) es el organismo especializado de las Naciones Unidas para las tecnologías de la información y la comunicación. H.261 es también la base del modo de vídeo para la mayoría de sistemas de conferencia multimedia. Es importante aclarar que en textos en inglés a la RDSI se le llama ISDN (Integrated Services for Digital Network), y a la UIT se le llama ITU (International Telecommunication Union).

40 24 2 Formación de video y modelos de color Codificación de vídeo para la baja tasa de bits de vídeo de las redes de telefonía POTS2, con tan solo 10 kbits / s asignados a video y 5,3 kbits / s asignado a la voz de codificación, la cual llevó al estándar de codificación de vídeo UIT llamado H.263. La baja tasa de bits del codec de vídeo H.263, es utilizada en velocidades de módem de 14,4 a 56 kbits / s, donde la tasa de módem incluye la codificación de vídeo, codificación de voz, control de la información, y otros canales lógicos de datos. H.263 se desarrolló a partir del estándar H.261, el cual sirve de base para el desarrollo de MPEG optimizado para tasas de bits más elevadas. Contiene una componente para una compresión temporal más intensa y funciona preferiblemente con secuencias de vídeos, que presentan cambios reducidos entre imagen e imagen. Codificación de vídeo para almacenar películas en CD- ROM, la cual cuenta con 1,2 Mbits / s asignados para la codificación de vídeo y 256 kbits / s asignados para la codificación de audio, la que originó el estándar inicial ISO MPEG- 1 (por su nombre en inglés Motion Picture Experts Group). Codificación de video para la banda ancha RDSI, difusión y almacenamiento de vídeo en DVD (discos de vídeo digital), esta cuenta con Mbits / s asignados para la codificación de audio y vídeo, y dio origen al estándar de codificación de video ISO MPEG- 2. La UIT ha denominado este estándar con el nombre H.262. Codificación de vídeo para codificación basada en objetos a velocidades de 8 kbits / s hasta 1 Mbit / s o más altas, lo que llevó al estándar de codificación de vídeo ISO MPEG- 4. Los aspectos clave de este estándar incluyen codificación independiente de los objetos en una imagen; la capacidad de agrupar interactivamente estos objetos en una escena en la pantalla; la capacidad de combinar gráficos, objetos animados, y objetos naturales en la escena; y finalmente, la capacidad de transmitir escenas en formatos de dimensión más altas (por ejemplo 3D). Dado que la compensación de movimiento es un elemento clave en la mayoría de los codificadores de vídeo, a continuación se explican los conceptos básicos de esta fase del proceso. Para la facilidad de procesamiento, cada frame de vídeo es uniformemente particionado en unidades más pequeñas llamadas macrobloques, donde cada macrobloque consiste en un bloque de de luminancia y los correspondientes bloques de crominancias. La forma en que funciona el estimador de movimiento se ilustra en la Figura 2.23.

41 2.5. Compresión de video 25 Figura 2.23: Compensación de movimiento. Cada bloque de píxeles en el frame actual se compara con un conjunto de bloques de candidatos de igual tamaño en el frame anterior para determinar el que mejor predice el bloque actual. El conjunto de bloques incluye aquellos dentro de una región de búsqueda en el frame anterior, centrado en la posición del actual bloque en el frame actual. Cuando se encuentra el mejor bloque de adaptación, un vector de movimiento se determina, que especifica el bloque de referencia. La figura 2.24 muestra el diagrama de bloques general del codec con compensación de movimiento. La idea principal es combinar la codificación por transformación (en la forma de la Transformada Discreta del Coseno (DCT por sus siglas en inglés) de 8 8 bloques de píxeles) con la codificación predictiva (en la forma de Differential Pulse Code Modulation, DPCM) con el fin de reducir el almacenamiento y el procesamiento de la imagen comprimida, y al mismo tiempo para dar un alto grado de compresión y adaptabilidad.

42 26 2 Formación de video y modelos de color Figura 2.24: Diagrama de bloques del codificador / decodificador por compensación de movimiento para codificación interframe. Dado que la compensación de movimiento es difícil de realizar en el dominio de la frecuencia (transformada), el primer paso en el codificador interframe es crear un error de predicción por compensación de movimiento en el dominio espacial (píxeles). Para cada bloque del frame actual, se debe encontrar un bloque de predicción en el frame de referencia, utilizando el vector de movimiento, el cual se calculó durante la estimación de movimiento, y diferenciarlo para generar la señal de error de predicción. Este cálculo requiere sólo una única memoria para el frame en el codificador y el decodificador. La señal de error resultante es transformada utilizando 2D DCT, la cual implementa de forma separada dos transformadas de una dimensión (1-D), una

43 2.5. Compresión de video 27 a lo largo de la dirección vertical y otra a lo largo de la dirección horizontal (Figura 2.25). Figura 2.25: Transformada Discreta del Coseno de dos dimensiones (2-D DCT). Luego es cuantizada con un cuantificador adaptativo, codificada sin pérdidas usando un Codificador de Longitud Variable (VLC por sus siglas en inglés) y almacenada temporalmente para la transmisión sobre un canal de velocidad fija.

44 28 2 Formación de video y modelos de color 2.6 Compresión de imágenes individuales Como se mencionó en la seccion 2.5, la compresión de imágenes se ha convertido en algo necesario y muy importante, incluso para algunas aplicaciones es indispensable. Al igual que en los videos, los algoritmos que realizan la compresión de imágenes lo ejecutan de dos diferentes maneras, sin pérdidas y con pérdidas. Algunos de estos métodos de compresión están diseñados para tipos específicos de imágenes, por lo que no funcionan para otros tipos de imágenes (Aguilera, 2006) Compresión de imágenes sin pérdidas A continuación se describen algunos formatos de representación de imágenes sin pérdidas: BMP (bitmap) es un formato de gráficos de mapa de bits utilizado internamente por el subsistema de imágenes de Microsoft Windows (GDI por sus siglas en inglés), y se utiliza comúnmente como un formato sencillo de gráficos en esa plataforma. Es un formato sin compresión. PNG (Portable Network Graphics), es un formato de imagen de mapa de bits que utiliza la compresión de datos sin pérdidas. PNG se creó para mejorar y reemplazar el formato GIF con un formato de archivo de imagen que no requiere una licencia de patente para su uso. Se utiliza el algoritmo de compresión DEFLATE, que utiliza una combinación del algoritmo LZ77 y la codificación Huffman. PNG fue diseñado para la distribución de imágenes en Internet. TIFF (Tagged Image File Format) es un formato de archivo para almacenar principalmente imágenes, incluyendo fotografías y dibujos lineales. Es uno de los formatos de imagen de mapa de bits más populares y flexibles, entre los formatos que se pueden utilizar sin licencia. Originalmente creado por la compañía Aldus, conjuntamente con Microsoft, para su uso en la impresión PostScript. TIFF es un formato popular para imágenes de profundidad de color alta, junto con JPEG y PNG. El formato TIFF es soportado por una gran variedad de aplicaciones de manipulación de imágenes, por escáneres, fax, procesamiento de textos, reconocimiento óptico de caracteres, y otras aplicaciones.

45 2.6. Compresión de imágenes individuales Compresión de imágenes con pérdidas JPEG (Joint Photographic Experts Group), es un algoritmo de compresión con pérdidas, fue diseñado para comprimir imágenes con una profundidad de 24 bits o imágenes en escala de grises. Una de las características que hacen que el algoritmo sea muy flexible es que la tasa de compresión es ajustable. Con una tasa de compresión menor se obtiene una mejor calidad, pero el tamaño de la imagen resultante será más grande. Esta compresión consiste en hacer los coeficientes en la matriz de cuantificación más grandes cuando se quiere comprimir más, y más pequeños cuando se quiere menos compresión. JPEG es el formato más utilizado para almacenar y transmitir imágenes en Internet. La figura 2.26 muestra el diagrama de bloques de la compresión de imagen JPEG. Figura 2.26: Diagrama de bloques de la compresión de imagen JPEG (Li y Drew, 2003).

46 30 2 Formación de video y modelos de color A continuación se detallan los principales pasos en la compresión JPEG Convertir imagen RGB a imagen YUV. Si se tiene una imagen en la cual el color es representado mediante el modelo de color RGB, se debe transformar en una imagen YUV con algún submuestreo, el más común es el submuestreo 4:2:0. El procedimiento para realizar el submuestreo se explicará en secciones posteriores. Aplicar la Transformada Discreta del Coseno (DCT) La DCT transforma la información del dominio espacial al dominio de la frecuencia. El dominio espacial muestra la amplitud del color y como este se mueve en el espacio. Mientras que el dominio de la frecuencia muestra como la amplitud del color cambia rápidamente de un pixel al siguiente en el archive de imagen. El dominio de la frecuencia es una mayor representación para la información debido a que esta hace posible separar información que no es muy importante para la percepción humana. El ojo humano no es muy sensible a cambios de alta frecuencia, especialmente en fotografías, por lo tanto la información de alta frecuencia puede hasta cierto punto ser desechada. Luego de aplicar la transformación DCT se obtienen bloques con coeficientes. Al coeficiente de la esquina superior izquierda de cada bloque se le conoce como coeficiente DC, y cuenta con la mayor magnitud, los 63 coeficientes restantes son llamados coeficientes AC (Figura 2.27). Cuantización Los coeficientes resultantes de aplicar la transformación DCT, son valores punto flotante, estos se transforman en números enteros mediante la cuantización. La cuantificación implica dividir cada coeficiente por un número entero entre 1 y 255 y luego redondear. La tabla de cuantificación se elige para reducir la precisión de cada coeficiente a no más de lo necesario. La cuantización es la mayor fuente de pérdidas en la compresión JPEG. Reordenar los coeficientes cuantizados. Se utiliza un patrón de escaneo tipo zigzag, para reordenar los coeficientes, esto se realiza para que los coeficientes se ordenen de forma creciente de frecuencia. Después de la cuantización la mayoría de los coeficientes tienden a ser cero, por lo tanto es el coeficiente con mayor frecuencia. El reordenar los coeficientes mejora la compresión del RLC (Run-Length Coding).

47 2.6. Compresión de imágenes individuales 31 Figura 2.27: Reordenamiento zigzag de los coeficientes AC y DC. Codificación DPCM y RLC DPCM (del inglés Differential Pulse Code Modulation), es un codificador de forma de onda que parte de la base de PCM pero añade algunas funcionalidades basadas en la predicción de las muestras de la señal. Se parte de una señal analógica (continua en el tiempo) la cual se quiere codificar. El primer paso a realizar es el proceso de muestreo (tomar el valor de la señal cada cierto período regular de tiempo). Con eso se consigue una señal discreta en el tiempo (compuesta por toda una serie de muestras equiespaciadas). El siguiente paso es la cuantificación, se preestablecen unos niveles (amplitudes) y se tienen dos opciones: se coge el valor de dos muestras consecutivas, se resta el valor de la segunda menos la primera, se cuantifica el resultado y finalmente se codifica, o bien se hace la predicción de una muestra a partir de las muestras anteriores y se calcula la diferencia entre el valor de la muestra actual real y la predicción (el resultado es el error de predicción), se cuantifica el error y se codifica. Aplicando uno de estos dos procesos se elimina la redundancia de la señal a corto término y se consiguen factores de compresión del orden de 4 (el tamaño del fichero se divide por 4). El motivo por el cual se reduce el tamaño del fichero es porque como se hace la diferencia entre dos muestras, el resultado será un valor pequeño y hasta cercano a cero y, por lo tanto, en codificación se necesitarán menos bits. En resumen, se puede decir que la potencia de la señal diferencia es mucho menor que la de la señal discreta original. A continuación se presenta el diagrama que ilustra el procedimiento de la DPCM (Figura 2.28).

48 32 2 Formación de video y modelos de color Figura 2.28: Diagrama del codificador DPCM. RLC es considerado uno del algoritmo de compresión más sencillos. Su principio consiste en contar el número de caracteres idénticos consecutivos y transformar esta secuencia que indica el número de repeticiones de la información y repetir un carácter especial para informarles de la presencia de una repetición. Es utilizado para codificar los coeficientes AC de cada bloque, en este caso particular, los coeficientes de la DCT cuantizados tienden a formar cadenas de ceros. Realizar una codificación sin pérdidas (Entropy coding). La base del entropy coding utiliza una codificación de Huffman para codificar los coeficientes DC que se obtienen luego de la codificación DPCM. La idea es reemplazar un número por un par de símbolos (TA- MAÑO, AMPLITUD), donde el TAMAÑO especifica cuantos bits son necesarios para representar el número, y la AMPLITUD contiene los bits actuales. En textos en inglés el par de símbolos se denomina (SIZE, AMPLITUDE). Para representar un número por un par (TAMAÑO, AMPLITUD), se debe convertir el valor absoluto del número en una representación binaria para determinar el TAMAÑO. La AMPLITUD es equivalente a la representación binaria para números positivos y al complemento a uno de la representación binaria para números negativos. El TAMAÑO es codificado mediante Huffman pero la AMPLITUD no, debido a que el valor de esta puede variar ampliamente.

49 2.7. Cámaras de video con sensores CCD y CMOS 33 La Figura 2.29 muestra el procedimiento del entropy coding, aplicándola a los coeficientes DC resultantes después de la codificación DPCM. Figura 2.29: Entropy coding. 2.7 Cámaras de video con sensores CCD y CMOS Actualmente existen dos tipos de tecnologías utilizadas para la fabricación de sensores de cámaras digitales, ya sean compactas o réflex. Se trata de los sensores CCD (Charge Coupled Device) y CMOS (Complementary Metal Oxide Semiconductor). Ambos tipos de sensores están formados en su esencia por semiconductores de metal-óxido (MOS) y están distribuidos en forma de matriz. Su función es la de acumular una carga eléctrica en cada una de las celdas de esta matriz. A estas celdas se les llama píxeles. La carga eléctrica almacenada en cada celda, dependerá en todo momento de la cantidad de luz que incida sobre el mismo. Cuanta más luz incida sobre el píxel, mayor será la carga que este adquiera. Aunque en su esencia, los CCD y CMOS funcionan de una manera muy similar, hay algunas diferencias que diferencian ambas tecnologías Cámaras de vídeo con sensor CCD En el caso del sensor CCD, éste convierte las cargas de las celdas de la matriz en voltajes y entrega una señal analógica en la salida, que será posteriormente digitalizada por la cámara (figura 2.30). En los sensores CCD, se hace una lectura de cada uno de los valores correspondientes a cada una de las celdas. Luego esta información se traduce mediante un convertidor analógico-digital en forma de datos. La estructura interna del sensor CCD es muy simple, pero se requiere de un chip adicional que se encargue del tratamiento de la información proporcionada por el sensor, lo cual genera mayor costo y equipos de mayor tamaño.

50 34 2 Formación de video y modelos de color Figura 2.30: Sensor CCD (Liarte, 2009). El rango dinámico es el coeficiente entre la saturación de los píxeles y el umbral por debajo del cual no captan señal. El rango dinámico del sensor CCD supera por el doble al del CMOS, debido a que al ser menos sensible, los extremos de luz los tolera mucho mejor. En cuanto al ruido, también son superiores a los CMOS, debido a que la señal se procesa en un chip externo, y este puede optimizarse mejor para realizar esta función. En cambio, en el CMOS, como se realiza todo el proceso de la señal dentro del mismo sensor, se obtienen peores resultados, ya que hay menos espacio para colocar los foto-diodos encargados de recoger la luz. La respuesta uniforme es el resultado que se espera de un píxel sometido al mismo nivel de excitación que los demás, y que éste no presente cambios apreciables en la señal obtenida. En este aspecto, el sensor CMOS es más propenso a sufrir fallos, debido a que está constituido por píxeles individuales. En cambio el sensor CCD, al ser toda la matriz de píxeles uniforme, tiene un mejor comportamiento. Mediante la adición de circuitos con realimentación se puede solucionar este problema en los sensores CMOS, pero igualmente los sensores CCD tienen un mejor rendimiento Cámaras de vídeo con sensor CMOS En los sensores CMOS, cada celda es independiente, y la principal diferencia es que la digitalización de los píxeles se realiza internamente en unos transistores que lleva cada celda, por lo que todo el trabajo se lleva a cabo dentro del sensor y no se hace necesario un chip externo encargado de esta función (figura 2.31). Con esto se logra reducir costos y se obtienen equipos más pequeños.

51 2.7. Cámaras de video con sensores CCD y CMOS 35 Figura 2.31: Sensor CMOS (Liarte, 2009). Además de ofrecer más eficiencia, los sensores CMOS son más baratos de fabricar precisamente por lo que se explicó anteriormente. Otra de las grandes ventajas de los sensores CMOS, es que son más sensibles a la luz, por lo que en condiciones pobres de iluminación se comportan mucho mejor. Esto es debido principalmente a que los amplificadores de señal se encuentran en la propia celda, por lo que hay un menor consumo con la misma alimentación. Lo contrario a lo que ocurre en los sensores CCD. Los sensores CMOS son claramente superiores a los CCD en velocidad, debido a que todo el procesado se realiza dentro del propio sensor, reduciendo los tiempos de procesamiento. Esta una de las principales razones por las que los fabricantes de cámaras empezaron a utilizar sensores CMOS en sus cámaras, logrando que éstas permitan grabar vídeos a velocidades de hasta 1000 fps. Otro aspecto en el que los sensores CMOS son superiores a los CCD es en el blooming. Este fenómeno se produce cuando un píxel se satura por la luz que incide sobre él y a continuación empieza a saturar a los que están a su alrededor. Aunque este defecto puede solucionarse gracias a algunos trucos en la construcción, en los sensores CMOS no se tiene este problema.

52 36 2 Formación de video y modelos de color 2.8 Cámaras de vídeo con barrido entrelazado (interlaced scan) y con barrido progresivo (progresive scan) Las señales de televisión analógicas, como las de la estación local de televisión, compañía de cable, o VCR se muestran en una pantalla de televisión usando una tecnología conocida como barrido entrelazado. Esta tecnología utiliza dos campos para crear un frame. Uno de los campos contiene todas las líneas impares en la imagen, y el otro contiene todas las líneas pares de la imagen. Una televisión hace un barrido de 60 campos por segundo (30 impares y 30 pares). Estas dos series de 30 campos se combinan para crear un frame completo cada 1/30 de segundo, lo cual muestra una imagen en pantalla a 30 frames por segundo (Figura 2.32). Figura 2.32: Barrido entrelazado. Básicamente, existen dos sistemas dominantes de barrido entrelazado en uso en el mundo: NTSC y PAL. NTSC se basa en 525 líneas, de 60 campos/30 frames por segundo en un sistema de 60 Hz para la transmisión y visualización de imágenes de vídeo. Este es un sistema de entrelazado en el que cada frame es barrido por dos campos de 262 líneas, que se combinan para mostrar un frame de vídeo con

53 2.8. Cámaras de vídeo con barrido entrelazado y progresivo líneas de barrido. NTSC es el estándar oficial de vídeo analógico en los EE.UU., Canadá, México, algunas partes de América Central y Sur América, Japón, Taiwán y Corea (Silva, 2013). PAL es el formato dominante en el mundo de la radiodifusión de televisión analógica y visualización de vídeo y se basa en 625 líneas, 50 campos/25 frames por segundo, en un sistema de 50 Hz. La señal es entrelazada, como NTSC, en dos campos, compuestos de 312 líneas cada uno. Algunas características que lo diferencian son: 1. Mejor visión de imagen que NTSC, debido al aumento en la cantidad de líneas de barrido. 2. Dado que el color era parte del estándar desde el principio, la consistencia del color entre las estaciones y los televisores son mucho mejores. Además, PAL tiene una taza de frames por segundo (framerate) más cercano al de un film. PAL tiene una tasa de 25 frames por segundo, mientras un film tiene un framerate de 24 frames por segundo. Países en el sistema PAL incluyen al Reino Unido, Alemania, España, Portugal, Italia, China, la India, la mayor parte de África, y el Medio Oriente (Silva, 2013). Con la llegada de los ordenadores personales, se descubrió que el uso del televisor tradicional para la visualización de imágenes digitales no da buenos resultados, sobre todo con el texto. Esto, debido al parpadeo, la poca resolución y los problemas de calidad del barrido entrelazado. Con el fin de visualizar imágenes en un ordenador de una forma más agradable y precisa, se desarrolló el barrido progresivo. El barrido progresivo se diferencia del barrido entrelazado en que la imagen es mostrada en una pantalla, barriendo cada línea (o fila de píxeles) en un orden secuencial, en lugar de un orden alternativo, como se realiza con el barrido entrelazado. En otras palabras, en el barrido progresivo, las líneas de imagen (o filas de píxeles) son barridas en orden numérico (1, 2, 3) por la pantalla de arriba abajo (Figura 2.33), en vez de en un orden alterno (líneas o filas 1, 3, 5, etc... seguido de líneas o filas 2, 4, 6).

54 38 2 Formación de video y modelos de color Figura 2.33: Barrido progresivo. El barrido progresivo de una imagen en una pantalla cada 1/60 de segundo, en lugar del barrido entrelazado de líneas alternas cada 1/30 de segundo, produce una imagen más suave y más detallada. Esta imagen es ideal para mostrar los detalles finos, como por ejemplo texto, y también es menos susceptible al parpadeo. Las cámaras con barrido progresivo transfieren inmediatamente un frame completo del sensor de imagen, sin necesidad de realizar líneas de entrelazado. El mayor beneficio de este diseño se encuentra en las aplicaciones de detección de movimiento, y su principal desventaja es la incompatibilidad con los sistemas de televisión estándar. Sin embargo, las aplicaciones de procesamiento de imágenes por computador no requieren que las imágenes RAW de la cámara se muestran en un monitor de televisión. Entonces, se utiliza la cámara como el sensor y dispositivo de entrada a una tarjeta de adquisición del computador, el cual tiene una tarjeta de visualización integrada que es capaz de manejar la salida de la tarjeta de adquisición directamente. Los diseños de cámara con escaneo progresivo están ganando popularidad para estas aplicaciones informáticas, porque incorporan salida digital directa y eliminan muchos otros pasos que requieren mucho tiempo y procesamiento innecesario asociados a los sistemas televisivos.

55 3 Descripción del Hardware y Software En este capítulo se abordará la descripción de las herramientas con las cuales se desarrolló el algoritmo de visualización, seccionamiento y conversión de archivos de video YUV. El algoritmo se desarrolla en el lenguaje de programación C, con la ayuda del entorno de desarrollo integrado libre Code::Blocks y la librería OpenCV, bajo el sistema operativo Ubuntu. En este capítulo se explica cómo instalar el sistema operativo Ubuntu LTS, la plataforma de programación Code::Blocks y la integración de la librería OpenCV. El hardware utilizado es un equipo DELL modelo Optiplex 7010, con un procesador Intel(R) Core(TM) i GHz 3.2GHz, y 4,00 GB de memoria instalada (RAM). 3.1 Instalación de Ubuntu LTS El proceso de instalación de Ubuntu desde un CD es muy sencillo. A continuación se presentan los pasos a seguir. Coloque el CD de instalación de Ubuntu en la unidad de CD/DVD. Reinicie su computadora. Al reiniciar deberá ver una pantalla de bienvenida (Figura 3.1), que le solicita elegir su idioma y que le da la opción de instalar Ubuntu, o de ejecutarlo desde el CD. Si usted no recibe este menú significa que su ordenador está configurado para arrancar directamente desde el disco duro. Para solucionar esto entrar en la BIOS, y activar el arranque desde la unidad de CD-ROM, y asegurarse de que el CD-ROM está delante del disco duro en el orden de arranque. En la pantalla de bienvenida hacer clic en el botón Instalar Ubuntu. Esto desplegará una ventana (Figura 3.2), que le indica si su ordenador tiene suficiente espacio para instalar Ubuntu y verifica su conexión a internet. En caso de que su ordenador sea portátil se recomienda conectarlo a una fuente de alimentación para asegurar que la instalación no sea interrumpida. Para reducir el tiempo de instalación se recomienda quitar la selección de Descargar actualizaciones durante la instalación e instalar el software de terceros. En caso de querer instalar las actualizaciones e instalar el software de terceros debe estar conectado a internet. 39

56 40 3 Descripción del Hardware y Software Figura 3.1: Pantalla de bienvenida (Ubuntu, 2013). Figura 3.2: Pantalla preparación para la instalación (Ubuntu, 2013).

57 3.1. Instalación de Ubuntu LTS 41 Si no está conectado a Internet, se le pedirá que seleccione una red inalámbrica, si está disponible (Figura 3.3). Figura 3.3: Selección de red inalámbrica (Ubuntu, 2013). Hacer clic en el botón Continuar para seguir adelante con la instalación. Esto desplegará una ventana de Tipo de Instalación (Figura 3.4), la cual le permite elegir si desea instalar Ubuntu junto con otro sistema operativo, eliminar su sistema operativo existente y reemplazarlo con Ubuntu, o si usted es un usuario avanzado elegir la tercera opción Something else. Luego de seleccionar el tipo de instalación, hacer clic en el botón Continuar. Dependiendo de las selecciones anteriores, ahora se puede comprobar que ha elegido la forma en que desea instalar Ubuntu (Figura 3.5). Ubuntu necesita alrededor de 4,5 GB para instalar, por lo que se debe agregar unos cuantos GB extra para almacenar sus archivos. El proceso de instalación comenzará al hacer clic en el botón Instalar ahora. Una vez iniciada la instalación le desplegará una ventana donde se debe seleccionar la zona horaria (Figura 3.6). Si está conectado a Internet, esto debe hacerse de forma automática. Revise su ubicación es correcta y haga clic en Continuar. Si no está seguro de su zona horaria, escriba el nombre de la ciudad donde se encuentra o haga clic en el mapa encontrar su ubicación. Luego se desplegará una ventana para seleccionar la distribución del te-

58 42 3 Descripción del Hardware y Software Figura 3.4: Tipo de instalación (Ubuntu, 2013). Figura 3.5: Comprobación de el tipo de instalación (Ubuntu, 2013). clado preferida (Figura 3.7). Haga clic en la opción del idioma que necesita. Si no está seguro, haga clic en el Keyboard Layout Detect botón de ayuda. Haga clic en Continuar.

59 3.1. Instalación de Ubuntu LTS 43 Figura 3.6: Selección de zona horaria (Ubuntu, 2013). Figura 3.7: Distribucción del teclado (Ubuntu, 2013).

60 44 3 Descripción del Hardware y Software A continuación se desplegará una ventana donde debe introducir su nombre de usuario y la contraseña (Figura 3.8). Haga clic en Continuar. Figura 3.8: Pantalla nombre de usuario y contraseña (Ubuntu, 2013).

61 3.1. Instalación de Ubuntu LTS 45 Espere a que termine de instalarse Ubuntu, esto puede tardar unos minutos (Figura 3.9). Figura 3.9: Pantalla instalación Ubunto (Ubuntu, 2013). Cuando termine de instalarse se desplegará un aviso confirmando que se ha completado la instalación (Figura 3.10). Figura 3.10: Aviso de instalación completa(ubuntu, 2013). Finalmente, reinicie el ordenador y elija arrancar con Ubuntu.

62 46 3 Descripción del Hardware y Software 3.2 Instalación de Code::Blocks Code::Blocks es un entorno de desarrollo integrado libre para C y C++, diseñado para satisfacer las necesidades más exigentes de sus usuarios. Está diseñado para ser muy extensible y totalmente configurable (Code::Blocks, 2013). El método más simple para instalar Code::Blocks es mediante el centro de Software de Ubuntu, el cual es un programa que permite buscar, instalar y desinstalar aplicaciones del sistema operativo Ubuntu. A continuación se detalla el procedimiento de instalación. 1. Abrir el Centro de Software de Ubuntu Figura 3.11: Centro de Software de Ubunto.

63 3.2. Instalación de Code::Blocks En la barra para buscar escribir CodeBlocks, e instalarlo (Figura 3.12). Figura 3.12: Búsqueda CodeBlocks. La versión de Code::Blocks que se instala es la y es la misma con la que se trabajó (Figura 3.13). Figura 3.13: Versión CodeBlocks. Se debe configurar Code:Blocks para que se pueda tener más de un proyecto abierto en ventanas diferentes. Para lograrlo se debe ir a settings en el menú de la ventana y hacer clic en Environment, esto desplegara la ventana que se muestra en la figura 3.14, en la cual se debe quitar el check a las casillas Allow only one running instance y Use an already running instance. Para que estos cambios tengan efecto se debe reiniciar.

64 48 3 Descripción del Hardware y Software Figura 3.14: Configuración de Code::Blocks.

65 3.2. Instalación de Code::Blocks Crear un proyecto en Code::Blocks Los pasos a seguir para crear un proyecto en Code::Blocks se muestran a continuación 1. Abrir CodeBlocks y seleccionar la opción Create a new project (Figura 3.15). Figura 3.15: Pantalla de inicio CodeBlocks. 2. Dentro de la ventana que se despliega seleccionar Console application (Figura 3.15). 3. En la ventana de información que se despliega dar clic en el boton Next. En la siguiente ventana seleccionar como lenguaje de programación C (Figura 3.17). 4. En la siguiente ventana se solicita ingresar el nombre del proyecto y el directorio donde se almacenará (Figura 3.18). 5. En la siguiente ventana debe seleccionarse el compilador para el proyecto, el cual debe ser GNU GCC Compiler (Figura 3.19). 6. El programa automáticamente generara un pequeño programa, el cual despliega Hello World! en la consola. Para ver el código de programación se debe utilizar la barra de navegación a la izquierda para desplegar

66 50 3 Descripción del Hardware y Software Figura 3.16: Selección de plantilla. Figura 3.17: Selección de lenguaje de programación. la carpeta Sources, en la cual se almacenarán todos los archivos.c que contendrán el código de programación (Figura 3.20).

67 3.2. Instalación de Code::Blocks 51 Figura 3.18: Creación del poyecto. Figura 3.19: Selección del compilador.

68 52 3 Descripción del Hardware y Software Figura 3.20: Pantalla de inicio del proyecto. 7. Para compilar y ejecutar el programa que se genera se debe dar clic en el botón que se muestra en la Figura Si todo ha ido bien, se desplegara una ventana como la que se muestra en la figura Figura 3.21: Pantalla de compilación.

69 3.3. Instalación de OpenCV Instalación de OpenCV OpenCV (Open Source Computer Vision Library) es una librería de código abierto para visión por computador. OpenCV fue construido para proporcionar una infraestructura común para aplicaciones de visión por computador y para acelerar el uso de la percepción de la máquina en los productos comerciales. Al ser un producto con licencia BSD, OpenCV hace que sea fácil para las empresas utilizar y modificar el código (OpenCV, 2013). Antes de instalar OpenCV se actualizan los repositorios de Ubuntu, esto se realiza abriendo una terminal y ejecutando los comandos sudo apt-get update sudo apt-get upgrade Luego se deben instalar las dependencias, para ellos se ejecuta el siguiente comando: sudo apt-get install libopencv-* libcv-dev libhighgui-dev Una vez actualizado los repositorios e instalado las dependencias, se debe descargar la librería Opencv. Primero se debe acceder a la carpeta de usuario, con el siguiente comando en terminal cd Luego se procede a descargar del paquete de OpenCV desde Sourceforge, con el comando wget opencvunix/2.4.2/opencv tar.bz2 Seguidamente después de terminada la descarga se debe descomprimir el paquete de Opencv en la carpeta donde se descargó con el comando en terminal tar -xvf OpenCV tar.bz2 Ahora se debe acceder al directorio de OpenCV, esto se realiza con el comando en terminal cd OpenCV Desde el directorio de Opencv se debe compilar e instalar la librería OpenCV. Primero se debe crear un nuevo directorio llamado build y acceder a él, con los siguientes comandos en terminal:

70 54 3 Descripción del Hardware y Software mkdir build cd build Si se desea compilar OpenCV se ejecuta el siguiente comando. Esto puede tomar varios minutos y dependiendo del computador hasta 40 minutos. Pero se recomienda compilarlo para que quede configurado de acuerdo a su equipo. cmake DW IT H T BB = ON DBUILD NEW P Y T HON SUP P ORT = ON DW IT H V 4L = ON DINST ALL C EXAMP LES = ON DINST ALL P Y T HON EXAMP LES = ON DBUILD EXAMP LES = ON DW IT H QT = ON DW IT H OP ENGL = ON.. En caso de recibir el siguiente mensaje en la terminal El programa «cmake» no está instalado. Puede instalarlo escribiendo: sudo apt-get install cmake Ejecutar el comando que se indica en la terminal: sudo apt-get install cmake Luego de ejecutar el comando en la terminal se mostrara un resultado con las opciones que soportara OpenCV. En este paso se debe verificar que exista soporte para FFMPEG, esto se realiza comprobando que en la terminal junto a FFMPEG este escrito YES, como lo muestra la figura Figura 3.22: Opciones que soporta OpenCV. En caso de estar escrito un NO junto a FFMPEG, se deben instalar las dependencias que hagan falta. Posteriormente se compila con el comando

71 3.3. Instalación de OpenCV 55 make Y finalmente, se instala OpenCV con el siguiente comando en terminal: sudo make install Configuración de OpenCV Para un correcto funcionamiento de la librería se debe seguir el siguiente procedimiento para configurarla. Primero se debe abrir el archivo de configuración con el siguiente comando en terminal: sudo gedit /etc/ld.so.conf.d/opencv.conf El archivo que se abre, con un editor de texto, como lo muestra la figura 3.23, probablemente este vacío. En este archivo se debe agregar la línea /usr/local/lib y luego se guardan los cambios. Figura 3.23: Archivo de configuración. Continuando con la configuración se debe ejecutar el comando en la terminal ldconfig

72 56 3 Descripción del Hardware y Software Luego se debe agregar el path, lo cual se realiza ejecutando el comando sudo gedit /etc/bash.bashrc Esto abrirá un documento en el editor de texto (figura 3.24). Al final de este se deben agregar las líneas P KG CONF IG P AT H = $P KG CONF IG P AT H : /usr/local/lib/pkgconfig export P KG CONF IG P AT H Figura 3.24: Archivo de configuración P KG CONF IG P AT H. Guarde el archivo y reinicie la computadora.

73 3.4. Integración de OpenCV en Code::Blocks Integración de OpenCV en Code::Blocks Para poder utilizar OpenCV en Code::Blocks se debe seguir el siguiente procedimiento para lograr la integración con el proyecto. Abra un proyecto ya existente o cree un proyecto nuevo. Luego diríjase en el menú a Project ->Built Options y seleccione la pestaña Linker settings como se muestra en la figura Figura 3.25: Captura Built Options integración dependencias. Haga clic en el botón Add para agregar las dependencias, las cuales se encuentran en el directorio /usr/local/lib/. Seleccione todos los archivos en la carpeta y haga clic en Abrir, como lo muestran las figuras 3.26 y 3.27.

74 58 3 Descripción del Hardware y Software Figura 3.26: Captura directorio de librerías. Figura 3.27: Captura librerías agregadas.

75 3.4. Integración de OpenCV en Code::Blocks 59 Ahora seleccione la pestaña Search directories, haga clic en la pestaña Compiler, y luego en el botón Add. Agregue el directorio /usr/local/include/opencv en la ventana que se despliega. Como se muestra en la figura Figura 3.28: Captura incorporación directorio Compiler.

76 60 3 Descripción del Hardware y Software Por último, en la misma pestaña Search directories, seleccionar la pestaña Linker y hacer clic en Add para agregar el directorio /usr/local/include/opencv (Figura 3.29). Figura 3.29: Captura incorporación directorio Linker.

77 3.4. Integración de OpenCV en Code::Blocks 61 Para comprobar que la integración de OpenCV y Code::Blocks fue exitosa, se debe crear un nuevo proyecto y escribir el siguiente programa ejemplo. El cual carga una imagen y la despliega en una ventana de OpenCV #include <stdio.h> #include <stdlib.h> #include <opencv/cv.h> #include <opencv/highgui.h> int main() { char nombre[256]= claire.bmp ; // se define el fichero a cargar IplImage* imagen = cvloadimage(nombre);// se carga la imagen RGB cvnamedwindow( prueba, 1); // se crea la ventana de nombre prueba // el 1 indica que ajuste al // tamaño de la imagen cvshowimage( prueba, imagen ); // se despliega la imagen en la ventana cvwaitkey(0); // se pulsa una tecla para terminar cvdestroyallwindows(); // se destruyen todas las ventanas cvreleaseimage(&imagen); return 0; } Las instrucciones que comienzan con #include agregan las bibliotecas con las que el programa trabaja. La línea char nombre[256]= claire.bmp ; define el nombre del archivo de imagen a cargar. La linea IplImage* imagen = cvloadimage (nombre); carga una imagen mediante la función cvloadimage (), la cual determina el formato de la imagen a ser cargada, basándose en el nombre del archivo; automáticamente también asigna la memoria necesaria para la estructura de los datos de la imagen. La función cvloadimage () puede leer una amplia variedad de formatos de imagen, incluyendo BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, y TIFF. Y devuelve un puntero a la memoria asignada para la estructura de datos de la imagen.

78 62 3 Descripción del Hardware y Software Esta estructura, llamada IplImage, es la construcción que OpenCV utiliza para manejar todo tipo de imágenes: mono-canal, multicanal, con valores enteros, con valores de punto flotante, etcétera. Se utiliza el puntero que cvloadimage () devuelve para manipular la imagen y los datos de la imagen. La línea cvnamedwindow ( prueba, 1); abre una ventana en la pantalla que puede contener y mostrar una imagen. Además asigna un nombre a la ventana (en este caso, prueba ) El segundo argumento de cvnamedwindow () define las propiedades de ventana. Se puede definir en 0 (el valor predeterminado), o 1 para CV WINDOW AUTOSIZE. En el primer caso, el tamaño de la ventana será la misma sin importar el tamaño de la imagen, y la imagen se escala para que quepa en la ventana. En el segundo caso, que corresponde al utilizado en este programa ejemplo, el tamaño de la ventana se ajusta al tamaño de la imagen cargada. Cuando se tiene imagen en forma de un puntero IplImage*, se puede desplegar en una ventana existente con cvshowimage (). Esta función requiere de una ventana existente. La línea cvshowimage ( prueba, imagen); despliega en la ventana creada por cvnamedwindow (), la imagen almacenada en la estructura de datos, con el mismo tamaño que la imagen cargada. La función cvwaitkey () solicita al programa parar y esperar a que se presione alguna tecla para continuar. Si se da un argumento positivo, el programa esperará a que el número de milisegundos pase y luego continuar incluso si no se presiona nada. Si el argumento se establece en 0 o un número negativo, el programa esperará indefinidamente hasta que se presione alguna tecla. Una vez ya ejecutado el programa se deben destruir las ventanas que se crearon. La función cvdestroyallwindows () cerrará las ventanas y liberara cualquier uso de memoria asociada. Por último, la línea cvreleaseimage (&imagen); libera la memoria asignada para la estructura de datos de la imagen. Y se establece en NULL el valor de la estructura imagen.

79 3.4. Integración de OpenCV en Code::Blocks 63 Para Compilar y ejecutar el código se debe hacer click en el botón Built and Run (Figura3.30). Figura 3.30: Captura programa ejemplo integración librería OpenCV y Code::Blocks. Si todo ha ido bien, se deberá desplegar la imagen de Claire (Figura 3.31). Figura 3.31: Imagen de Claire.

80

81 4 Descripción del Algoritmo En este capítulo se detalla el funcionamiento del algoritmo, el cual es capaz de convertir secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente de formato BMP, JPEG, PNG, TIFF, PBM, PGM o PPM, en secuencias de imágenes almacenadas en un solo archivo de formato YUV, AVI, MPEG o H263. Además de realizar la conversión inversa al proceso anterior. También es capaz de convertir secuencias de imágenes almacenadas en un solo archivo de formato YUV en secuencias de imágenes almacenadas en un solo archivo de formato YUV con diferente submuestreo de crominancias. Las secuencias de imágenes almacenadas en un solo archivo de formato YUV de entrada o salida pueden ser de submuestreo de crominancias 4:4:4, 4:2:2, 4:1:1, 4:2:0 o 4:0:0. El diagrama de bloques de la figura 3.13, muestra el funcionamiento del algoritmo. Nótese que está dividido en tres secciones, las cuales se explicarán con detalle en este capítulo. 65

82 66 4 Descripción del Algoritmo Archivos de Entrada Archivos de Salida Secuencia de imágenes almacenadas en archivos individuales numerados secuencialmente Formato: BMP, JPG, PNG TIFF, PBM, PGM, PPM Archivo de control de Parámetros Lectura de Parámetros PC Secuencia de imágenes almacenada en un solo archivo PC Imagen 000 PC Imagen 001 Imagen 002 Guardar imagen en Archivo de Imagen 003 archivo de video Video Imagen 00# Formato: YUV, MPEG, AVI, H263 Secuencia de imágenes almacenada en un solo archivo Formato: YUV, MPEG, AVI, H263 PC PC PC Guardar imagen en Archivo de PC Imagen 000 archivo de video Video Imagen 001 Archivo de Extracción Imagen 002 PC Video de imágenes Imagen 003 PC Imagen 000 Imagen 001 Imagen 00# Guardar imagen en Imagen 002 archivo individual Imagen 003 Imagen 00# PC Secuencia de imágenes almacenada en un solo archivo Formato: YUV444, YUV422, YUV411 YUV420, YUV400 Secuencia de imágenes almacenadas en archivos individuales numerados secuencialmente Formato: BMP, JPG, PNG TIFF, PBM, PGM, PPM Figura 4.1: Diagrama del algoritmo

83 4.1. Lectura de parámetros de control Lectura de parámetros de control En la primera sección del diagrama de bloques (Figura 4.2), se explica cómo se da lectura a los parámetros de control, para luego ser utilizados durante la ejecución. Esta sección es de suma importancia, debido a que los parámetros son los que definen el funcionamiento del algoritmo y si estos no corresponden a los archivos que se desea procesar el programa no podrá ejecutarse. En el capítulo 5 se describirá la interfaz gráfica de usuario (GUI por sus siglas en inglés) que se utilizará para cambiar los valores de los parámetros, y de esta manera hacer más amigable la interacción del usuario con el programa. Figura 4.2: Lectura de parámetros de control Archivo de control de parámetros Se utiliza para definir los parámetros que requiere el algoritmo para su ejecución. Entre los parámetros a definir se encuentran la función a realizar, el directorio de entrada y salida de las secuencias de imágenes, el nombre de entrada y el formato de las secuencias de imágenes de entrada y de salida, el número de imagen donde debe iniciar la conversión y cuantas imágenes se requiere procesar, el submuestreo de crominancias YUV de entrada y salida, el ancho y alto de las imágenes y el codec de compresión de video. El archivo de control de parámetros es un archivo de texto con extensión.txt, en el cual se almacenan los valores de los parámetros por líneas (Figura 4.3). A partir de estos archivos el algoritmo se ejecuta y guarda en el directorio de salida la secuencia de imágenes convertida en el formato requerido. Los valores de los parámetros se modifican por medio de una interfaz gráfica de usuario que se describirá en el capítulo 5.

84 68 4 Descripción del Algoritmo Figura 4.3: Archivo de control de parámetros Lectura de Parámetros El algoritmo lo primero que realiza es leer los parámetros de control del archivo de control de parámetros. Para realizarlo primero debe abrir el archivo de texto, luego realizar la lectura de cada parámetro recorriendo línea por línea el archivo de texto, y guardándolo en variables destinadas para tal fin, para poder tener acceso a estos parámetros en el momento que se requiera durante la ejecución del algoritmo. Luego de leer todos los parámetros se cierra el archivo de control de parámetros. 4.2 Conversión de secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente en archivo de video La segunda sección del diagrama de bloques (Figura 4.4), describe el procedimiento para convertir secuencias de imágenes (las cuales están almacenadas en archivos individuales numerados secuencialmente), a un solo archivo de video. El archivo de video de salida puede ser un archivo de video YUV con cualquier submuestreo, o un archivo de video de formato AVI, MPEG o H263.

85 4.2. Conversión secuencias de imágenes individuales en archivo de video 69 PC Imagen 000 PC Imagen 001 Imagen 002 Guardar imagen en Archivo de Imagen 003 archivo de video Video Imagen 00# Figura 4.4: Conversión de secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente en archivo de video Lectura de secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente De los parámetros de control se lee el directorio, el nombre, el número de la primera imagen a procesar y el formato de entrada de la secuencia de imágenes, uniendo estos valores se tiene un puntero a la dirección de la primera imagen. Utilizando este puntero y la función cvloadimage(string filename) de la librería OpenCV, se carga la información de la primera imagen en una estructura de imagen OpenCV. A partir de la imagen cargada, se comprueba si los parámetros ancho y alto de la imagen son números pares, ya que de no ser así el programa no está en capacidad de procesar imágenes con tamaños impares de ancho y alto, debido a que el procedimiento que utiliza el algoritmo para interpolar las crominancias de los archivos de video YUV, requiere que el ancho y alto de la imagen sean números pares, para asegurar que el algoritmo nunca intente tener acceso a información que se encuentra fuera del tamaño de la imagen y provocar que se detenga la ejecución abruptamente. Para pasar la imagen cargada a la estructura con la que se trabaja en el IPCV-LAB, primero se debe convertir del espacio de color BGR al espacio RGB, esto se logra con la función cvcvtcolor(src,dst, CV BGR2RGB), la cual intercambia las componentes B y R de la imagen. Luego se debe obtener de la estructura de imagen OpenCV, los pixeles que corresponden únicamente a la imagen, ya que la estructura OpenCV tiene un ancho mayor al de la imagen, para almacenar datos. Para obtener los datos de la imagen se debe recorrer pixel por pixel hasta alcanzar el ancho de la imagen y luego saltar a la siguiente fila, asignando cada pixel a la posición correspondiente de una imagen que definimos para tal propósito. Por último, se debe realizar un cambio en el origen de sistema de coordenadas de la imagen, ya que en la estructura OpenCV se encuentra ubicado en la esquina superior izquierda y en la estructura con la que se trabaja en el

86 70 4 Descripción del Algoritmo IPCV-LAB, se encuentra en la esquina inferior izquierda. Este cambio se realiza con la ayuda de una imagen temporal, en la cual se guarda la imagen pixel por pixel recorriéndola de forma inversa de la última fila hasta la primera. Con este procedimiento se carga cada imagen a procesar, para luego ser guardada en la secuencia de imágenes de salida que se requiere Guardar imagen en archivo de video En esta sección se pueden tener dos tipos de archivos de video de salida: los archivos de video YUV y los archivos de video en formato AVI, MPEG, H263. En caso de que la salida sea un archivo de video YUV se explica ampliamente cómo guardar las crominancias para cada submuestreo Tipo de archivo de salida: Archivo de video YUV En caso de que la salida requerida sea un archivo de video YUV, se debe obtener una imagen YUV a partir de la imagen RGB cargada. Se procede a calcular los componentes Y, U y V con la ecuación (2.1) del modelo YUV compensado. Para cada uno de los pixeles de la imagen se calculan los componentes Y, U y V, y se almacenan arreglos individuales asignados para tal fin. Para poder guardar una imagen en un archivo YUV se debe volver a cambiar el origen del sistema de coordenadas de la imagen. Como se explicó en la sección de lectura de secuencias de imágenes (meter referencia), la estructura con que se trabaja en el IPCV-LAB tiene el origen de sistema de coordenadas en la esquina inferior izquierda, y en los archivos YUV, este se ubica en la esquina superior izquierda, por este motivo es que se debe cambiar. Dependiendo del tipo de submuestreo de salida que se quiera, el proceso de guardar cada imagen es diferente, debido a que, para cada submuestreo se debe tratar de manera distinta las crominancias. Para el caso del YUV 4:4:4 las crominancias U y V se guardan con el mismo tamaño que la componente de intensidad Y, por lo que el proceso se reduce a guardar cada componente una tras otra en el orden Y, U y V en un archivo con extensión.yuv. En el caso del YUV 4:2:2 las crominancias U y V se deben guardar con la mitad del ancho de la componente de intensidad Y, por lo que se deben reducir las columnas de las crominancias a la mitad. Este algoritmo se limita a eliminar los pixeles de las columnas impares, logrando de este modo reducir el ancho de las crominancias a la mitad. Otro posible método para reducir el ancho de las crominancias a la mitad, es construir una curva con los datos de cada crominancia, y muestrearla a la mitad de la frecuencia con la que se muestrearon los datos originales, pero para efectos de simplificar el algoritmo, se optó por quitar columnas de forma intercalada de las crominancias hasta lograr el tamaño requerido.

87 4.3. Conversión de archivo de video a secuencias de imágenes 71 Siguiendo con el caso del YUV 4:1:1 las crominancias U y V se deben guardar con un cuarto del ancho de la componente de intensidad Y, por lo que se deben reducir las columnas de las crominancias a una cuarta parte. Al igual que en el caso anterior se eliminan los pixeles de las columnas impares, pero el proceso se repite dos veces. Para de caso del YUV 4:2:0 las crominancias U y V se deben guardar con la mitad del ancho y la mitad del alto de la componente de intensidad Y, por lo que se deben reducir las filas y las columnas de las crominancias a la mitad. Para lograrlo se eliminan los pixeles de las filas y las columnas impares para tener crominancias con un cuarto de su tamaño. Al igual que para el YUV 4:4:4 el proceso finaliza guardando cada componente una tras otra en el orden Y, U y V en un archivo con extensión.yuv. Finalmente el caso del YUV 4:0:0, este no tiene crominancias, por lo que se guardan las componentes de intensidad de cada imagen una tras otra en su tamaño original. Para reproducir de manera correcta cada tipo de archivo YUV, el reproductor multimedia debe permitir escoger cual tipo de YUV se va a visualizar, ya que si no se escoge el tipo adecuado, lo que se visualiza parece un archivo de video dañado Tipo de archivo de salida: Archivo de video AVI, MPEG o H263 Cuando se requiere que el archivo de video de salida sea un archivo AVI, MPEG o H263, se debe crear una estructura que permita escribir las imágenes en el archivo de video, para esto se requiere el codec con el que se comprime el video y el framerate, los cuales se leen del archivo de control de parámetros. Luego se procede a guardar una por una las imágenes en el archivo de video, hasta alcanzar el número de imágenes a procesar que se define en el archivo de control de parámetros. 4.3 Conversión de archivo de video a secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente o en archivos de video La tercera y última sección del diagrama de bloques (Figura 4.5), se subdivide en dos: la conversión de un archivo de video, a una secuencia de imágenes que se encuentra almacenada en archivos individuales, y la conversión de un archivo de video de formato AVI, MPEG o H263, a un archivo de video YUV con cualquier submuestreo.

88 72 4 Descripción del Algoritmo El funcionamiento de ambas subsecciones es determinado por los tipos de archivos de entrada y de salida, por lo tanto se explicaran las combinaciones que el algoritmo puede procesar. PC PC PC PC Guardar imagen en Archivo de PC Imagen 000 archivo de video Video Imagen 001 Archivo de Extracción Imagen 002 PC Video de imágenes Imagen 003 PC Imagen 000 Imagen 001 Imagen 00# Guardar imagen en Imagen 002 archivo individual Imagen 003 Imagen 00# Figura 4.5: Conversión de archivo de video a secuencias de imágenes almacenadas en archivos individuales numerados secuencialmente o en archivos de video YUV Extracción de imágenes El procedimiento de extracción de imágenes de un archivo de video, varía de acuerdo al tipo de archivo de video, se tienen dos tipos: los archivos de video YUV y los archivos de video en formato AVI, MPEG, H263. Se dividen en esa clasificación, debido a que se procesa la secuencia de imágenes que contienen de manera diferente Tipo de archivo de entrada: Archivo de video YUV En caso de que la entrada sea un archivo de video YUV, al cargar una imagen YUV se debe conocer el submuestreo de entrada para poder cargar las crominancias con el tamaño correcto. Primero se debe abrir el archivo YUV. Luego se ubica el número de la primera imagen a procesar y se extraen los componentes Y, U y V de la imagen en arreglos individuales definidos para tal fin, los cuales tienen el tamaño que le corresponde de acuerdo al submuestreo de entrada Tipo de archivo de entrada: Archivo de video AVI, MPEG o H263 En caso de que el archivo de video de entrada sea de formato AVI, MPEG o H263, primero se debe crear una estructura que permita extraer las imágenes del video. Luego se ubica el número de la primera imagen a procesar, se extrae la imagen y se almacena en una estructura de OpenCV para luego ser procesada.

89 4.3. Conversión de archivo de video a secuencias de imágenes Guardar imagen en archivo de video Se tienen dos tipos de archivos de video que se pueden guardar: los archivos de video YUV y los archivos de video en formato AVI, MPEG, H263. En el caso particular de que la salida y la entrada sean archivos de video YUV se explica ampliamente como convertir de un submuestreo de crominancias a otro Tipo de archivo de salida: Archivo de video YUV Cuando la salida requerida es un archivo de video YUV y la entrada es un archivo de video YUV es de suma importancia conocer el submuestreo de crominancias, ya que estas son las definen el proceso al que debe someterse la imagen cargada. A partir de la imagen YUV cargada se debe trabajar sobre el tamaño de las crominancias para obtener el tamaño de crominancias correspondiente con el submuestreo de salida. Se tienen cinco submuestreos de entrada y cinco submuestreos de salida, lo cual ocasiona veinti cinco combinaciones posibles, pero en el caso de tener un submuestreo de entrada YUV 4:0:0 solo se puede tener un submuestreo de salida igual, debido a que sin crominancias no se pueden obtener los submuestreos YUV 4:4:4, YUV 4:2:2, YUV 4:1:1 y YUV 4:2:0. Entonces se tienen veinte combinaciones que se detallan a continuación. Para ilustrar el proceso de obtener el submuestreo de crominancias de salida, a partir del submuestreo de crominancias de entrada, se utiliza la representación de las crominancias U, pero este proceso aplica de la misma manera para las crominancias V. Con un submuestreo de entrada YUV 4:4:4 y un submuestreo de salida igual: no hay necesidad de trabajar sobre las crominancias de la imagen YUV (Figura 4.6). Figura 4.6: Conversión YUV 4:4:4 a YUV 4:4:4 Con un submuestreo de entrada YUV 4:4:4 y un submuestreo de salida YUV 4:2:2: se debe reducir el ancho de las crominancias a la mitad(figura 4.7). Como se explicó anteriormente, en este algoritmo se limita a eliminar las componentes de las crominancias U y V en las

90 74 4 Descripción del Algoritmo columnas impares, logrando de este modo reducir el ancho de las crominancias a la mitad. Figura 4.7: Conversión YUV 4:4:4 a YUV 4:2:2 Con un submuestreo de entrada YUV 4:4:4 y un submuestreo de salida YUV 4:1:1: se debe reducir el ancho de las crominancias a una cuarta parte, lo cual se realiza eliminando las columnas impares de las crominancias U y V dos veces consecutivas. Esto significa que primero se pasa al submuestreo YUV 4:2:2, y luego se pasa al submuestreo YUV 4:1:1 (Figura 4.8). Figura 4.8: Conversión YUV 4:4:4 a YUV 4:1:1 Con un submuestreo de entrada YUV 4:4:4 y un submuestreo de salida YUV 4:2:0: se debe reducir el ancho y el alto de las crominancias a la mitad, lo cual se realiza eliminando las filas y columnas impares de las crominancias U y V (Figura 4.9). Figura 4.9: Conversión YUV 4:4:4 a YUV 4:2:0 Con un submuestreo de entrada YUV 4:4:4 y un submuestreo de salida YUV 4:0:0: no hay necesidad de trabajar sobre las crominancias, ya que estas no se necesitan.

91 4.3. Conversión de archivo de video a secuencias de imágenes 75 Con un submuestreo de entrada YUV 4:2:2 y un submuestreo de salida igual: no hay necesidad de convertir la imagen YUV (Figura 4.10). Figura 4.10: Conversión YUV 4:2:2 a YUV 4:2:2 Con un submuestreo de entrada YUV 4:2:2 y un submuestreo de salida YUV 4:4:4: se debe duplicar el ancho de las crominancias (Figura 4.11). Figura 4.11: Conversión YUV 4:2:2 a YUV 4:4:4 Como se observa en la figura 4.11, al duplicar el ancho de las crominancias quedan espacios en blanco, donde no se tiene el valor de las crominancias, por lo tanto, para poder llenar estos espacios se debe interpolar, a partir de los valores de los crominancias vecinos. Esto es posible debido a que el ojo humano percibe principalmente los componentes de intensidad, dejando a las componentes de crominancia en un segundo plano, donde sus imperfecciones no son percibidas. En este algoritmo se utiliza el método de interpolación bilineal, la cual toma los valores vecinos del valor que se quiere interpolar, y a partir de estos calcula un valor de crominancia aproximado.

92 76 4 Descripción del Algoritmo Figura 4.12: Cuadrángulo de puntos de interpolación. La denominación de bilineal proviene del uso de los parámetros, que aquí fueron puestos en forma estándar como x y y, normalmente identificados con las coordenadas de un cuadrado unitario como se muestra en la figura Como se tiene un cuadrado unitario las distancias entre el punto de interés y los puntos de los valores vecinos de crominancias se encuentran en el intervalo [0,1]. El método de interpolación bilineal ofrece la ecuación (4.1) para calcular el valor del punto de interés (Y e ). Y e = f(x, y ) = (Y 2 Y 1 ) x +(Y 4 Y 1 ) y +(Y 1 +Y 3 Y 2 Y 4 ) x y +Y 1 (4.1) Para interpolar los valores de las crominancias que hacen falta, se realiza con la misma ecuación pero tomando algunas consideraciones. La primera es que los parámetros x y y, siempre tienen un valor igual a 0.5, debido a que las crominancias se acomodan en filas y columnas uniformes. Por lo tanto la ecuación (4.2) se simplifica al promedio de los valores Y1, Y2, Y3 y Y4 (Figura 4.13).

93 4.3. Conversión de archivo de video a secuencias de imágenes 77 Figura 4.13: Cuadrángulo de puntos de interpolación de las crominancias. Y e = f(0.5, 0.5) = (Y 1 + Y 2 + Y 3 + Y 4 ) 4 (4.2) En el caso de los bordes los valores se interpolan a partir de la misma ecuación pero definiendo los parámetros x o y iguales a cero, 0.5 ó 1 según corresponda. Cuando y es igual a cero y x es igual a 0.5 se interpola el valor Yn1, y la ecuación nuevamente se simplifica a un promedio pero de dos valores Y1 y Y2. El mismo procedimiento se sigue para interpolar los valores Yn2, Yn3 y Yn4 (Figura 4.14). Figura 4.14: Cuadrángulo de puntos de interpolación de las crominancias en los bordes. Y n1 = f(0.5, 0) = (Y 1 + Y 2 ) 2 Y n2 = f(0, 0.5) = (Y 1 + Y 4 ) 2 Y n3 = f(1, 0.5) = (Y 2 + Y 3 ) 2 (4.3) (4.4) (4.5)

94 78 4 Descripción del Algoritmo Y n4 (Y 3 + Y 4 ) = f(0.5, 1) = (4.6) 2 Para el proceso de interpolación se utiliza una imagen auxiliar del tamaño que se requiere alcanzar. Los pixeles de la imagen YUV cargada se colocan en la imagen auxiliar en columnas intercaladas y las columnas vacías se llenan interpolando a partir de los pixeles de las columnas adyacentes. Para el caso que se requiera interpolar filas se sigue el mismo procedimiento, los pixeles de la imagen YUV se colocan en la imagen auxiliar en filas intercaladas y las filas vacías se llenan interpolando a partir de los pixeles de las filas adyacentes. Con un submuestreo de entrada YUV 4:2:2 y un submuestreo de salida YUV 4:1:1: se debe reducir el ancho de las crominancias a la mitad, lo cual se realiza eliminando las columnas impares de las crominancias U y V (Figura 4.15). Figura 4.15: Conversión YUV 4:2:2 a YUV 4:1:1 Con un submuestreo de entrada YUV 4:2:2 y un submuestreo de salida YUV 4:2:0: se debe reducir solo el alto de las crominancias a la mitad, ya que el ancho de las crominancias del YUV 4:2:2 es la mitad del ancho de la componente Y. Esto se realiza eliminando las filas impares de las crominancias U y V (Figura 4.16). Figura 4.16: Conversión YUV 4:2:2 a YUV 4:2:0 Con un submuestreo de entrada YUV 4:2:2 y un submuestreo de salida YUV 4:0:0: no hay necesidad de trabajar sobre las crominancias, ya que estas no se necesitan.

95 4.3. Conversión de archivo de video a secuencias de imágenes 79 Con un submuestreo de entrada YUV 4:1:1 y un submuestreo de salida igual: no hay necesidad de convertir la imagen YUV (Figura 4.17). Figura 4.17: Conversión YUV 4:1:1 a YUV 4:1:1 Con un submuestreo de entrada YUV 4:1:1 y un submuestreo de salida YUV 4:2:2: se debe duplicar el ancho de las crominancias, lo cual se realiza interpolando mediante el método de interpolación bilineal sobre las componentes U y V (Figura 4.18). Figura 4.18: Conversión YUV 4:1:1 a YUV 4:2:2 Con un submuestreo de entrada YUV 4:1:1 y un submuestreo de salida YUV 4:4:4: se debe cuadruplicar el ancho de las crominancias, lo cual se realiza interpolando mediante el método de interpolación bilineal dos veces consecutivas sobre las columnas de las componentes U y V (Figura 4.19). Figura 4.19: Conversión YUV 4:1:1 a YUV 4:4:4 Con un submuestreo de entrada YUV 4:1:1 y un submuestreo de salida YUV 4:2:0: se debe duplicar el ancho de las crominancias, lo

96 80 4 Descripción del Algoritmo cual se realiza interpolando mediante el método de interpolación bilineal sobre las componentes U y V. Y luego se debe reducir el alto de las crominancias a la mitad, lo cual se realiza eliminando las filas impares de las crominancias U y V (Figura 4.20). Figura 4.20: Conversión YUV 4:1:1 a YUV 4:2:0 Con un submuestreo de entrada YUV 4:1:1 y un submuestreo de salida YUV 4:0:0: no hay necesidad de trabajar sobre las crominancias, ya que estas no se necesitan. Con un submuestreo de entrada YUV 4:2:0 y un submuestreo de salida igual: no hay necesidad de convertir la imagen YUV (Figura 4.21). Figura 4.21: Conversión YUV 4:2:0 a YUV 4:2:0 Con un submuestreo de entrada YUV 4:2:0 y un submuestreo de salida YUV 4:2:2: se debe duplicar el alto de las crominancias, lo cual se realiza interpolando mediante el método de interpolación bilineal sobre las filas de las componentes U y V (Figura 4.22). Figura 4.22: Conversión YUV 4:2:0 a YUV 4:2:2

97 4.3. Conversión de archivo de video a secuencias de imágenes 81 Con un submuestreo de entrada YUV 4:2:0 y un submuestreo de salida YUV 4:4:4: se debe duplicar el ancho y el alto de las crominancias, lo cual se realiza interpolando mediante el método de interpolación bilineal sobre las filas y columnas de las componentes U y V (Figura 4.23). Figura 4.23: Conversión YUV 4:2:0 a YUV 4:4:4 Con un submuestreo de entrada YUV 4:2:0 y un submuestreo de salida YUV 4:1:1: se debe duplicar el alto de las crominancias, lo cual se realiza interpolando mediante el método de interpolación bilineal sobre las filas de las componentes U y V. Y luego se debe reducir el ancho de las crominancias, lo cual se realiza eliminando las columnas impares de las crominancias U y V (Figura 4.24). Figura 4.24: Conversión YUV 4:2:0 a YUV 4:1:1 Un submuestreo de salida YUV 4:0:0: no hay necesidad de trabajar sobre las crominancias, ya que estas no se necesitan. Cuando la salida requerida es un archivo de video YUV y la entrada es un archivo de video AVI, MPEG o H263, se realiza el mismo proceso que se explica en la sección Guardar imagen en Archivo de video YUV, ya que cuando se extrae la imagen del archivo de video y se almacena en la estructura OpenCV, se tiene una imagen RGB con las mismas características que la imagen cargada desde un archivo individual.

98 82 4 Descripción del Algoritmo Tipo de archivo de salida: Archivo de video AVI, MPEG o H263 En caso de que la salida requerida sea un archivo de video AVI, MPEG o H263, y la entrada sea un archivo de video YUV, lo primero que se debe hacer es verificar si se trata de un archivo de video YUV con submuestreo de crominancias 4:4:4 o 4:0:0, de no ser así se deben realizar las interpolaciones necesarias para convertir a un archivo de video YUV con submuestreo de crominancias 4:4:4, ya que para hacer la conversión de una imagen YUV a una imagen RGB, se requiere que el tamaño de la componente de luminosidad Y y el de las crominancias U y V sean iguales. Después se debe obtener una imagen RGB a partir de la imagen YUV cargada. Esto se realiza despejando el vector RGB de la ecuación matricial del modelo YUV compensado (3.1), para obtener la ecuación (4.7). R +1, , , 5958 Y 16 G = +1, , , 8135 U 128 (4.7) B +1, , , 0012 V 128 En el caso de los archivos YUV con submuestreo de crominancias 4:0:0 estos no tienen crominancias, por lo tanto para convertirlos en una imagen RGB se coloca el valor de luminosidad Y en cada uno de los componentes R, G, y B. Obteniendo una imagen RGB con sus tres componentes iguales, lo cual ocasiona que sea una imagen en escala de grises. R Y G = Y (4.8) B Y Con la ecuación (4.7) se calculan los componentes R, G y B para cada uno de los pixeles de la imagen YUV, y estos se almacenan en un arreglo asignado para tal fin. Luego se transfieren los valores de este arreglo a una estructura OpenCV, desde la cual se puede escribir la imagen en un archivo de video como se realiza en la sección Guardar imagen en Archivo de video AVI, MPEG o H Guardar imagen en archivo individual Dependiendo del tipo de archivo de video de entrada, el procedimiento para guardar los frames del video, en archivos de imagen individuales numerados secuencialmente, es diferente. En este algoritmo se tienen dos tipos de archivos de video de entrada: los archivos de video YUV y los archivos de video en formato AVI, MPEG, H263.

99 4.3. Conversión de archivo de video a secuencias de imágenes Tipo de archivo de entrada: Archivo de video YUV En caso de que la salida requerida sea una secuencia de imágenes almacenadas en archivos individuales numerados secuencialmente, y la entrada sea un archivo de video YUV, el procedimiento a seguir es el mismo que en la seccion , con la diferencia de que luego de transferir los valores del arreglo a una estructura OpenCV, se guarda como imagen en un archivo individual BMP, JPG, PNG, TIFF, PBM, PGM o PPM. Figura 4.25: Transformación imagen YUV a imagen RGB Tipo de archivo de entrada: Archivo de video AVI, MPEG o H263 En caso de que el archivo de video de entrada sea de formato AVI, MPEG o H263, y la salida requerida sea una secuencia de imágenes almacenadas en archivos individuales numerados secuencialmente, la imagen o frame del archivo de video que se carga en la estructura de OpenCV, se puede guardar directamente en un archivo individual, sin requerir ser modificada, ya que la imagen que se carga tiene la misma estructura que se utiliza para guardar imágenes en archivos individuales.

100

101 5 Descripción interfaz gráfica de usuario GUI Para la creación de la interfaz gráfica de usuario, se utilizó la librería GTK+, en el entorno de desarrollo Code::Blocks. En este capítulo se explicará cómo instalar la librería GTK+, cómo integrar la librería en Code::Blocks, cómo crear una interfaz gráfica y el funcionamiento de la interfaz gráfica de usuario. 5.1 Instalación Librería GTK+ GTK (GIMP Toolkit) es una librería para crear interfaces gráficas de usuario. Está autorizado por la licencia LGPL, por lo que se puede desarrollar software libre o incluso software comercial usando GTK, sin tener que gastar dinero en licencias o regalías. Se llama el GIMP toolkit porque fue escrito originalmente para el desarrollo del programa de manipulación de imágenes de GNU (GIMP), pero GTK ha sido utilizado en un gran número de proyectos de software, incluyendo la Red de GNU Object Model Environment Project (GNOME). GTK está construida encima de GDK (GIMP Drawing Kit), que es básicamente un recubrimiento de las funciones de bajo nivel para el acceso al sistema de ventanas (Xlib en el caso del sistema de ventanas X) y GDK-pixbuf, una biblioteca para el cliente del lado de la manipulación de imágenes (Project, 2012). Entre los paquetes que se deben instalar se encuentran los paquetes buildessential y libgtk El paquete build-essential incluye el compilador GCC y los enlazadores, y el paquete libgtk2.0 incluye el kit GTK+ con sus librerías (Team, 2012). Para instalar estos paquetes se debe abrir una terminal y ejecutar los comandos sudo apt-get install build-essential sudo apt-get install libgtk2.0-dev 85

102 86 5 Descripción interfaz gráfica de usuario GUI 5.2 Integración de GTK+ en Code::Blocks Para poder utilizar GTK+ en Code::Blocks se debe seguir el siguiente procedimiento, para lograr la integración con el proyecto. Abra un proyecto ya existente o cree un proyecto nuevo. Luego diríjase en el menú a Project ->Buil Options y seleccione la pestaña Linker settings, como se muestra en la figura 5.1. Figura 5.1: Captura integración de librerías GTK+. Haga clic en el botón Other linker options y agregue las líneas pkg-config cflags gtk+-2.0 pkg-config libs gtk+-2.0 Haga clic en Aceptar.

103 5.3. Crear una interfaz gráfica de usuario Crear una interfaz gráfica de usuario Para ilustrar el uso de las funciones de GTK+ se desarrolló un ejemplo simple de una interfaz gráfica de usuario, el cual capta un valor de una caja de texto y mediante la acción de un botón, guarda el valor en un archivo de texto. Para crear una interfaz gráfica de usuario es necesario seguir el procedimiento para crear un nuevo proyecto en Code::Blocks que se describió en una sección Luego se debe ingresar el código correspondiente al programa en el archivo main.c, al cual se le puede cambiar el nombre por uno más representativo. Para usar las funciones simples de GTK se debe incluir en el código la línea #include <gtk/gtk.h> Y para acceder al archivo de texto params.txt, del cual se lee y escribe el valor de la caja de texto y la etiqueta, se debe escribir la línea #define PARAMS params.txt GTK es una jerarquía de objetos. Estos objetos en GTK son llamados widgets y son los componentes que se usaran para construir las ventanas de la interfaz de usuario. Primero se deben crear los widget de la caja de texto, la etiqueta de la caja de texto y el botón, de manera que puedan ser utilizados desde cualquier función del programa. Esto se realiza declarando los widgets antes del main con el siguiente código GtkWidget *label; GtkWidget *entry; GtkWidget *button; Luego se debe declarar el main con argumentos, debido a que GTK los necesita para iniciar aunque estén vacíos int main(int argc, char *argv[]) Se inicia GTK con el siguiente código gtk init(&argc, &argv); Después se debe crear un widget tipo ventana, el cual contendrá los otros widgets.

104 88 5 Descripción interfaz gráfica de usuario GUI GtkWidget *window = gtk window new(gtk WINDOW TOPLEVEL); Si se requiere que la ventana tenga título, con la siguiente línea se le asigna uno. gtk window set title(gtk WINDOW(window), Titulo de ventana ); Ahora, para leer un dato desde un archivo de texto se debe abrir el archivo, luego leer el valor y guardarlo en los widget tipo etiqueta y tipo caja de texto, y cerrar el archivo. Esto se realiza con las siguientes instrucciones FILE *f = fopen(params, r ); char buf[256]; fscanf(f, %s, buf); label = gtk label new(buf); // crea etiqueta entry = gtk entry new(); // crea caja de texto fscanf(f, %s, buf); gtk entry set text(gtk ENTRY(entry), buf);// llena caja de texto fclose(f); Luego se debe crear el widget tipo botón que servirá para guardar el valor el valor de la caja de texto esto se realiza con la línea de código button = gtk button new with label( Save );// crea boton Por defecto la ventana viene con un contenedor fijo donde hay que indicar la posición y tamaño de cada widget que se añade, lo que ocasiona que sea muy complicado trabajar con este contenedor. Entonces para agregar otros widgets dentro de la ventana, lo más sencillo es agregar un widget tipo tabla, y en sus celdas ordenar los widgets según se requiera. El widget tipo tabla que se utilizó para este ejemplo cuenta con dos filas y dos columnas y se creó con las siguientes instrucciones. GtkWidget *table = gtk table new( 2, 2, TRUE); gtk container add(gtk CONTAINER(window), Table);

105 5.3. Crear una interfaz gráfica de usuario 89 Para colocar los widgets en la tabla se realiza con la siguiente instrucción gtk table attach defaults(gtk TABLE(table), label, 0, 1, 0, 1); gtk table attach defaults(gtk TABLE(table), entry, 1, 2, 0, 1); gtk table attach defaults(gtk TABLE(table), button, 0, 2, 1, 2); Donde los últimos cuatro parámetros indican (col inicial, col final, fila inicial, fila final). Para enlazar la acción que debe realizar el botón cuando ocurre un evento, se crea una función denominada callback, la cual es llamada cada vez que ocurre el evento que se escoge. En nuestro caso el evento es hacer clic en el botón y la acción es guardar el valor en la caja de texto en el archivo de parámetros. El enlace se crea con la siguiente línea de código g signal connect(g OBJECT(Button), çlicked, G CALLBACK(nombre funcion callback), NULL); La función con la cual se guarda el valor de la caja de texto, debe abrir el archivo de texto y escribir el valor de la etiqueta y el valor que se encuentra en la caja de texto y luego cerrar el archivo (Figura 5.2). Las siguientes líneas de código muestran la función programada void SaveData(GtkWidget *widget, gpointer data) { FILE *f = fopen(params, w ); fprintf(f, %s, gtk label get text(gtk LABEL(label))); fprintf(f, %s\n, gtk entry get text(gtk ENTRY(entry))); fclose(f); }

106 90 5 Descripción interfaz gráfica de usuario GUI Figura 5.2: Archivo de texto params.txt GTK no destruye las ventanas automáticamente cuando se cierra. Si no se indica explícitamente, el lazo de GTK continuará atendiendo eventos después de cerrar la ventana principal. Para terminar el programa al cerrar la ventana, tenemos que enlazar el evento destroy, que se ejecuta cuando se cierra la ventana desde el menú o con la X en la esquina superior de la ventana. Esto se realiza la siguiente instrucción. g signal connect swapped(g OBJECT(window), destroy, G BACK(gtk main quit), NULL); CALL- Para desplegar la ventana en pantalla se debe utilizar la línea de código siguiente gtk widget show all(window); Por último, hay que entrar en el ciclo de gtk, el cual espera indefinidamente por eventos. Esto se realiza con la siguiente línea gtk main(); El código que se utilizó para crear un ejemplo simple de una interfaz gráfica de usuario, es el siguiente #include <gtk/gtk.h> #define PARAMS params.txt// mi archivo de control de parametros GtkWidget *label; GtkWidget *entry; GtkWidget *button; // Callback del boton

107 5.3. Crear una interfaz gráfica de usuario 91 void SaveData(GtkWidget *widget, gpointer data) { } FILE *f = fopen(params, w ); fprintf(f, %s, gtk label get text(gtk LABEL(label))); fprintf(f, %s\n, gtk entry get text(gtk ENTRY(entry))); fclose(f); int main(int argc, char *argv[]) { gtk init(&argc, &argv); // iniciar GTK GtkWidget *window = gtk window new(gtk WINDOW TOPLEVEL); // crear ventana gtk window set title(gtk WINDOW(window), Titulo de ventana ); // Cambiar contenedor de ventana a tabla de 2 filas x 2 cols GtkWidget *table = gtk table new(2, 2, TRUE); gtk container add(gtk CONTAINER(window), table); FILE *f = fopen(params, r ); char buf[256]; fscanf(f, %s, buf); label = gtk label new(buf); // crea etiqueta entry = gtk entry new(); // crea caja de texto fscanf(f, %s, buf); gtk entry set text(gtk ENTRY(entry1), buf);// llena caja de texto fclose(f); button = gtk button new with label( Save );// crea boton

108 92 5 Descripción interfaz gráfica de usuario GUI // añade los widgets a la tabla en posicion (col, col+1, fil, fil+1) gtk table attach defaults(gtk TABLE(table), label, 0, 1, 0, 1); gtk table attach defaults(gtk TABLE(table), entry, 1, 2, 0, 1); gtk table attach defaults(gtk TABLE(table), button, 0, 2, 1, 2); // conecta a los widgets con su callback g signal connect(g OBJECT(button), clicked, G CALLBACK(SaveData), NULL); // permite terminar el programa al cerrar la ventana g signal connect swapped(g OBJECT(window), destroy, G BACK(gtk main quit), G OBJECT(window)); CALL- // muestra la ventana y sus hijos gtk widget show all(window); // lazo de GTK, espera por eventos hasta que se destruya gtk main(); return 0; } Luego de escribir el código, se debe hacer clic en el botón Built and Run, y debe aparecer la ventana con la interface gráfica de usuario (Figura5.3). Figura 5.3: Ejemplo de una interface gráfica de usuario simple.

109 5.4. Descripción de la interfaz gráfica de usuario del algoritmo Descripción de la interfaz gráfica de usuario del algoritmo Se desarrolló una interfaz gráfica de usuario capaz de desplegar y modificar los parámetros de control almacenados en un archivo de texto. Su funcionamiento se describe mediante el diagrama de bloques de la figura 5.4. Figura 5.4: Diagrama de Bloques del GUI Lectura de parámetros de control Figura 5.5: Lectura de parámetros de control Archivo de control de parámetros Se utiliza para definir los parámetros que utiliza el algoritmo en su ejecución. Entre los parámetros a definir se encuentran el directorio de entrada y salida de las secuencias de imágenes, el nombre de entrada y el formato de las secuencias de imágenes de entrada y de salida, el número de imagen donde debe iniciar la conversión y cuantas imágenes se requiere procesar, el submuestreo de crominancias YUV de entrada y salida, el ancho y alto de las imágenes y el codec de compresión de video. El archivo de control de parámetros es un

110 94 5 Descripción interfaz gráfica de usuario GUI archivo de texto con extensión.txt, en el cual se almacenan los valores de los parámetros por líneas Lectura de Parámetros Antes de desplegar la interfaz gráfica de usuario, se deben leer los parámetros de control del archivo de control de parámetros. Para realizarlo primero debe abrir el archivo de texto, luego realizar la lectura de cada parámetro recorriendo línea por línea el archivo de texto, y guardándolo en variables destinadas para tal fin, para poder tener acceso a estos parámetros en el momento que requieran ser desplegados para ser modificados. Luego de leer todos los parámetros se cierra el archivo de control de parámetros Funcionamiento de la interfaz gráfica de usuario En el menú principal de la interfaz gráfica de usuario, se presentan siete opciones de conversión de secuencias de imágenes y la opción de cerrar (figura 5.6). Cada una de las opciones esta enlazada a los parámetros de las funciones del algoritmo de conversión de formato de secuencias de imágenes, por lo tanto, al entrar en cada una de las opciones del menú se mostrará únicamente, los parámetros respectivos a cada función del algoritmo. Figura 5.6: Menú principal interfaz gráfica de usuario.

111 5.4. Descripción de la interfaz gráfica de usuario del algoritmo Imágenes Individuales a YUV Al hacer clic en Imágenes Individuales a YUV, se despliega una ventana donde se muestran los parámetros de la función Convertir Secuencia de Imágenes Individuales a Archivo de Video YUV en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.7). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.7: Ventana de la función Convertir Secuencia de Imágenes Individuales a Archivo de Video YUV.

112 96 5 Descripción interfaz gráfica de usuario GUI YUV a YUV Al seleccionar la opción YUV a YUV, se despliega una ventana donde se muestran los parámetros de la función Convertir Archivo de Video YUV a Archivo de Video YUV en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.8). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.8: Ventana de la función Convertir Archivo de Video YUV a Archivo de Video YUV.

113 5.4. Descripción de la interfaz gráfica de usuario del algoritmo YUV a Imágenes Individuales Al seleccionar la opción YUV a Imágenes Individuales, se despliega una ventana donde se muestran los parámetros de la función Convertir Archivo de Video YUV a Secuencia de Imágenes Individuales en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.9). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.9: Ventana de la función Convertir Archivo de Video YUV a Secuencia de Imágenes Individuales.

114 98 5 Descripción interfaz gráfica de usuario GUI Video a Imágenes Individuales Al seleccionar la opción Video a Imágenes Individuales, se despliega una ventana donde se muestran los parámetros de la función Convertir Archivo de Video a Secuencia de Imágenes Individuales en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.10). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.10: Ventana de la función Convertir Archivo de Video a Secuencia de Imágenes Individuales.

115 5.4. Descripción de la interfaz gráfica de usuario del algoritmo Video a YUV Al seleccionar la opción Video a YUV, se despliega una ventana donde se muestran los parámetros de la función Convertir Archivo de Video a Archivo de Video YUV en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.11). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.11: Ventana de la función Convertir Archivo de Video a Archivo de Video YUV.

116 100 5 Descripción interfaz gráfica de usuario GUI YUV a Video Al seleccionar la opción YUV a Video, se despliega una ventana donde se muestran los parámetros de la función Convertir Archivo de Video YUV a Archivo de Video en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.12). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.12: Ventana de la función Convertir Archivo de Video YUV a Archivo de Video.

117 5.4. Descripción de la interfaz gráfica de usuario del algoritmo Imágenes Individuales a Video Al hacer clic en Imágenes Individuales a Video, se despliega una ventana donde se muestran los parámetros de la función Convertir Secuencia de Imágenes Individuales a Archivo de Video en cajas de texto que se pueden modificar y guardar haciendo clic en el botón Guardar (figura 5.13). Para volver al menú principal se debe hacer clic en el botón Volver al menú principal. Figura 5.13: Ventana de la función Convertir Secuencia de Imágenes Individuales a Archivo de Video.

118

119 6 Ejecución del algoritmo y resultados En este capítulo se muestran los resultados de la ejecución del algoritmo de conversión de secuencias de imágenes, el cual comprende las secuencias de imágenes obtenidas, a partir de las secuencias de imágenes de origen. Primero, se muestra el procedimiento para la ejecución de la interfaz gráfica de usuario, que permite definir los parámetros de control, así como la ejecución del algoritmo de conversión de secuencias de imágenes. 6.1 Ejecución del algoritmo La manera más sencilla y práctica de ejecutar la interfaz gráfica de usuario y el algoritmo de conversión de secuencias de imágenes, es mediante el entorno de desarrollo Code::Blocks. En la carpeta que contiene los archivos del programa, se debe abrir el proyecto ImageSequenceConverterGUI.cbp, el cual contiene la interfaz gráfica de usuario. En la ventana que se abre, se debe hace clic en el icono Compile and Run como se muestra en la figura 6.1. Figura 6.1: Ejecución de la interfaz gráfica de usuario en el entorno de desarrollo Code::Blocks. 103

120 104 6 Ejecución del algoritmo y resultados Luego de ingresar los parámetros de la secuencia de imágenes de entrada y los parámetros de secuencia de imágenes de salida requerida, se debe guardar haciendo clic en el botón Guardar. Debido a que, cuando se instaló Code::Blocks, este se configuró para que pueda tener más de un proyecto abierto en ventanas diferentes, se puede abrir el proyecto ImageSequenceConverter.cbp en una nueva ventana, el cual contiene el algoritmo de conversión de secuencias de imágenes. Al igual que con la interfaz gráfica de usuario, en la ventana que se abre se debe hacer clic en el icono Compile and Run como se muestra en la figura 6.2. Figura 6.2: Ejecución del algoritmo de conversión en el entorno de desarrollo Code::Blocks. En la ventana de salida, se desplegará un mensaje cuando se complete la conversión, y la secuencia de imágenes de salida se haya guardado exitosamente. En caso de desplegar un mensaje de error, se debe revisar si los parámetros ingresados de la secuencia de imágenes de entrada son correctos, ya que, si el nombre o formato no coincide con los archivos del directorio de entrada, el algoritmo no puede cargar la secuencia de imágenes.

121 6.2. Resultados Resultados El algoritmo de conversión de secuencias de imágenes tiene siete funciones, y por lo tanto, puede tener siete tipos de salida diferente a partir de la secuencia de imágenes de entrada. Estas funciones resultan de la combinación de las secuencias de imágenes de entrada y de salida que el algoritmo puede procesar, y serán mostradas en las siguientes secciones del capítulo Función: convertir secuencia de imágenes individuales a un archivo YUV Cuando se tienen una secuencia de imágenes de entrada almacenada en archivos individuales numerados secuencialmente (figura 6.4), se puede generar con el algoritmo de conversión, un archivo de video YUV con submuestreo de crominancias YUV444, YUV422, YUV411, YUV420 o YUV400 (figura 6.5), el cual contenga el número de imágenes que se quiere de la secuencia de imágenes individuales, ordenadas según la numeración secuencial. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción Imágenes individuales a YUV, y luego modificar los valores para que concuerden con los archivos de entrada que se tienen y el archivo de salida que se requiere (Figura 6.3). En este caso particular los parámetros de la secuencia de imágenes entrada son: el directorio donde se encuentra la secuencia de imágenes input/, el prefijo de la secuencia de imágenes claire y el formato de la secuencia de imágenes.bmp. Los parámetros de la secuencia de imágenes de salida son: el número de la primera imagen a procesar 0, el número de imágenes que se requiere procesar 5, el sub-muestreo del archivo YUV de salida YUV400, y el directorio donde se requiere que sea guardado el archivo de salida output/.

122 106 6 Ejecución del algoritmo y resultados Figura 6.3: Interfaz gráfica de usuario con los valores correspondientes a la conversión de una secuencia de imágenes individuales a un archivo YUV. Las figuras 6.4 y (figura 6.5) muestran la conversión de una secuencia de cinco imágenes individuales en un archivo de video YUV con submuestreo de crominancias YUV400. Figura 6.4: Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente. Figura 6.5: Secuencia de imágenes almacenada en un archivos de video YUV.

123 6.2. Resultados Función: convertir secuencia de imágenes de un archivo YUV a un archivo YUV Cuando se tiene una secuencia de imágenes de entrada almacenada en un archivo de video YUV (figura 6.7), se puede generar con el algoritmo de conversión, un archivo de video YUV con submuestreo de crominancias YUV444, YUV422, YUV411, YUV420 o YUV400 (figura 6.8), el cual contenga el número de imágenes que se quiere, de la secuencia de imágenes del archivo de video YUV de entrada, en el mismo orden secuencial. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción YUV a YUV, y luego modificar los valores para que concuerden con el archivo de entrada que se tiene y el archivo de salida que se requiere (Figura 6.6). En este caso particular los parámetros del archivo YUV de entrada son: el directorio donde se encuentra el archivo YUV input/, el nombre del archivo YUV claire YUV420, el ancho 176 y el alto 144 de los frames, y el tipo de sub-muestreo del archivo YUV YUV420. Los parámetros del archivo YUV de salida son: el tipo de sub-muestreo del archivo YUV YUV444, el número de la primera imagen a procesar 0, el número de imágenes que se requiere procesar 10, y el directorio donde se requiere que sea guardado el archivo de salida output/. Figura 6.6: Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo YUV a otro archivo YUV con diferente sub-muestreo de crominancias.

124 108 6 Ejecución del algoritmo y resultados Las figuras 6.7 y 6.8 muestran la conversión de una secuencia de diez imágenes almacenada en un archivo de video YUV con submuestreo de crominancias YUV420, a una secuencia de imágenes almacenada en un archivo de video YUV con submuestreo de crominancias YUV444. Cabe recordar, que si se tiene una secuencia de imágenes de entrada almacenada en un archivo de video YUV con submuestreo de crominancias YUV400, solo se pueden generar archivos de video YUV con el mismo submuestreo de crominancias, debido a que no se tienen valores de crominancias necesarios para realizar la conversión a otros submuestreos. Figura 6.7: Secuencia de imágenes almacenada en un archivos de video YUV420. Figura 6.8: Secuencia de imágenes almacenada en un archivos de video YUV444.

125 6.2. Resultados Función: convertir secuencia de imágenes de un archivo YUV a secuencias de imágenes individuales Cuando se tiene una secuencia de imágenes de entrada almacenada en un archivo de video YUV (figura 6.10), se puede generar con el algoritmo de conversión, una secuencia de imágenes almacenada en archivos individuales numerados secuencialmente (figura 6.11). La secuencia de imágenes obtenida, tiene el mismo orden secuencial que la secuencia de imágenes almacenada en el archivo de video YUV de entrada. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción YUV a Imágenes individuales, y luego modificar los valores para que concuerden con el archivo de entrada que se tiene y los archivos de salida que se requieren (Figura 6.9). En este caso particular los parámetros del archivo YUV de entrada son: el directorio donde se encuentra el archivo YUV input/, el nombre del archivo YUV claire YUV400, el ancho 352 y el alto 288 de los frames, y el tipo de sub-muestreo del archivo YUV YUV400. Los parámetros de la secuencia de imágenes de salida son: el formato de la secuencia de imágenes.bmp.el número de la primera imagen a procesar 0, el número de imágenes que se requiere procesar 5, y el directorio donde se requiere que sea guardada la secuencia de imágenes de salida output/. Figura 6.9: Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo YUV a una secuencia de imágenes individuales.

126 110 6 Ejecución del algoritmo y resultados Las figuras 6.10 y 6.11 muestran la conversión de cinco imágenes, que se encuentran almacenadas en un archivo de video YUV, con submuestreo de crominancias YUV400, a una secuencia de cinco imágenes almacenada en archivos individuales, numerados secuencialmente. Figura 6.10: Secuencia de imágenes almacenada en un archivos de video YUV400. Figura 6.11: Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente.

127 6.2. Resultados Función: convertir secuencia de imágenes de un archivo de video a secuencias de imágenes individuales Cuando se tiene una secuencia de imágenes de entrada almacenada en un archivo de video (figura 6.13), se puede generar con el algoritmo de conversión, una secuencia de imágenes almacenada en archivos individuales numerados secuencialmente (figura 6.14). La secuencia de imágenes obtenida, tiene el mismo orden secuencial que la secuencia de imágenes almacenada en el archivo de video de entrada. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción Video a Imágenes individuales, y luego modificar los valores para que concuerden con el archivo de entrada que se tiene y los archivos de salida que se requieren (Figura 6.12). En este caso particular los parámetros del archivo de video de entrada son: el directorio donde se encuentra el archivo de video input/, el nombre del archivo de video AfterEarth, y el formato del archivo de video.avi. Los parámetros de la secuencia de imágenes de salida son: el formato de la secuencia de imágenes.bmp.el número de la primera imagen a procesar 85000, el número de imágenes que se requiere procesar 6, y el directorio donde se requiere que sea guardada la secuencia de imágenes de salida output/. Figura 6.12: Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo de Video a una secuencia de imágenes individuales.

128 112 6 Ejecución del algoritmo y resultados Las figuras 6.13 y 6.14 muestran la conversión de seis imágenes, que se encuentran almacenadas en un archivo de video en formato AVI, a una secuencia de seis imágenes almacenada en archivos individuales, numerados secuencialmente. Figura 6.13: Secuencia de imágenes almacenada en un archivos de video en formato AVI. Figura 6.14: Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente.

129 6.2. Resultados Función: convertir secuencia de imágenes de un archivo de video a un archivo YUV Cuando se tiene una secuencia de imágenes de entrada almacenada en un archivo de video (figura 6.16), se puede generar con el algoritmo de conversión, un archivo de video YUV con submuestreo de crominancias YUV444, YUV422, YUV411, YUV420 o YUV400 (figura 6.17), el cual contenga el número de imágenes que se quiere, de la secuencia de imágenes del archivo de video de entrada, en el mismo orden secuencial. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción Video a YUV, y luego modificar los valores para que concuerden con el archivo de entrada que se tiene y el archivo de salida que se requiere (Figura 6.15). En este caso particular los parámetros del archivo de video de entrada son: el directorio donde se encuentra el archivo de video input/, el nombre del archivo de video AfterEarth, y el formato del archivo de video.avi. Los parámetros del archivo YUV de salida son: el tipo de sub-muestreo del archivo YUV YUV400, el número de la primera imagen a procesar 0, el número de imágenes que se requiere procesar 10, y el directorio donde se requiere que sea guardado el archivo de salida output/. Figura 6.15: Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo de video a un archivo YUV.

130 114 6 Ejecución del algoritmo y resultados Las figuras 6.16 y 6.17 muestran la conversión de diez imágenes, que se encuentran almacenadas en un archivo de video en formato AVI, a una secuencia de imágenes almacenada en un archivo de video YUV con submuestreo de crominancias YUV400. Figura 6.16: Secuencia de imágenes almacenada en un archivos de video en formato AVI. Figura 6.17: Secuencia de imágenes almacenada en un archivos de video YUV400.

131 6.2. Resultados Función: convertir secuencia de imágenes de un archivo YUV a un archivo de video Cuando se tiene una secuencia de imágenes de entrada almacenada en un archivo de video YUV (figura 6.19), se puede generar con el algoritmo de conversión, un archivo de video (figura 6.20), el cual contenga el número de imágenes que se quiere, de la secuencia de imágenes del archivo de video YUV de entrada, en el mismo orden secuencial. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción YUV a Video, y luego modificar los valores para que concuerden con el archivo de entrada que se tiene y el archivo de salida que se requiere (Figura 6.18). En este caso particular los parámetros del archivo YUV de entrada son: el directorio donde se encuentra el archivo YUV input/, el nombre del archivo YUV claire YUV420, el ancho 176 y el alto 144 de los frames, y el tipo de sub-muestreo del archivo YUV YUV420. Los parámetros del archivo de video de salida son: el formato del archivo de video.avi, el codec de compresión de video H263, el número de la primera imagen a procesar 0, el número de imágenes que se requiere procesar 10, y el directorio donde se requiere que sea guardado el archivo de salida output/. Figura 6.18: Interfaz gráfica de usuario con los valores correspondientes a la conversión de un archivo YUV a un archivo de Video.

132 116 6 Ejecución del algoritmo y resultados Las figuras 6.19 y 6.20 muestran la conversión de una secuencia de diez imágenes almacenada en un archivo de video YUV con submuestreo de crominancias YUV400, a una secuencia de imágenes almacenada en un archivo de video en formato AVI. Figura 6.19: Secuencia de imágenes almacenada en un archivos de video YUV400. Figura 6.20: Secuencia de imágenes almacenada en un archivos de video en formato AVI.

133 6.2. Resultados Función: convertir secuencia de imágenes individuales a un archivo de video Cuando se tienen una secuencia de imágenes de entrada almacenada en archivos individuales numerados secuencialmente (figura 6.22), se puede generar con el algoritmo de conversión, un archivo de video (figura 6.23), el cual contenga el número de imágenes que se quiere de la secuencia de imágenes individuales, ordenadas según la numeración secuencial. Para escoger los parámetros necesarios para realizar la conversión, se debe abrir la interfaz gráfica de usuario, escoger a opción Imágenes individuales a Video, y luego modificar los valores para que concuerden con los archivos de entrada que se tienen y el archivo de salida que se requiere (Figura 6.21). En este caso particular los parámetros de la secuencia de imágenes entrada son: el directorio donde se encuentra la secuencia de imágenes input/, el prefijo de la secuencia de imágenes claire y el formato de la secuencia de imágenes.bmp. Los parámetros de la secuencia de imágenes de salida son: el número de la primera imagen a procesar 0, el número de imágenes que se requiere procesar 5, el formato del archivo de video.avi, el codec de compresión de video MPEG4, el framerate de video 30, y el directorio donde se requiere que sea guardado el archivo de salida output/. Figura 6.21: Interfaz gráfica de usuario con los valores correspondientes a la conversión de una secuencia de imágenes individuales a un archivo de Video.

134 118 6 Ejecución del algoritmo y resultados Las figuras 6.22 y 6.23 muestran la conversión de una secuencia de cinco imágenes individuales en un archivo de video en formato AVI. Figura 6.22: Secuencia de imágenes almacenada en archivos individuales numerados secuencialmente. Figura 6.23: Secuencia de imágenes almacenada en un archivos de video en formato AVI.

135 7 Conclusiones y recomendaciones Como resultado de estudiar el proceso de formación de imágenes, se logró comprender el funcionamiento de las cámaras de video con sensor CMOS y CDD, las cuales son ampliamente utilizadas en laboratorios de visión por computador, para capturar imágenes de color de una escena. Al comparar estas dos tecnologías utilizadas para la fabricación de sensores de cámaras digitales, se encontraron algunas ventajas que tienen los sensores CCD sobre los CMOS, en cuanto al ruido, y la respuesta uniforme. Pero en cuanto a costos y tamaño, la tecnología de fabricación de los sensores CMOS es muy superior al CCD, debido a que son más eficientes, más rápidos y más baratos de fabricar. La tecnología CCD ha alcanzado su límite y ha sido superada por el desarrollando de la tecnología CMOS. Además, al comparar una cámara de vídeo con barrido entrelazado y una con barrido progresivo, se encontró gran superioridad en las cámaras de video con barrido progresivo, ya que producen una imagen más suave y más detallada, ideal para mostrar los detalles finos, como por ejemplo texto, y también son menos susceptibles al parpadeo. El mayor beneficio de las cámaras de video con barrido progresivo, se encuentra en las aplicaciones de detección de movimiento, debido a que transfieren los frames completos más rápidamente. Y la principal desventaja es la incompatibilidad con los sistemas de televisión estándar, sin embargo, las aplicaciones de procesamiento de imágenes por computador no requieren que las imágenes de la cámara se muestran en un monitor de televisión. Con este conocimiento como base, se realizó el estudio del modelo de color RGB, este modelo es utilizado en todos los sistemas que forman imágenes a través de rayos luminosos. También se estudió el modelo de color YUV, el cual se utiliza en la creación y manejo de archivos de video YUV con los que el algoritmo de conversión de secuencias de imágenes trabaja. Al trabajar con archivos de video YUV, es de suma importancia el manejo del tamaño de las crominancias U y V, ya que estas definen el tipo de submuestreo del archivo de video YUV. Cuando se requirió pasar de un submuestreo de crominancias de menor tamaño, a un submuestreo de crominancias de mayor tamaño se realizó interpolando mediante el método de interpolación bilineal, logrando excelentes resultados, debido a que la calidad de la resolución no disminuyo de manera significativa. 119

136 120 7 Conclusiones y recomendaciones Las funciones de la librería OpenCV fueron fundamentales en la realización del algoritmo, ya que estas proporcionaron las herramientas para leer y guardar imágenes y videos de manera muy sencilla. Además de permitir el manejo de muchos tipos de formatos de imagen y de video. Una de sus funciones permite recorrer los frames internos de los archivos de video, facilitando la extracción de cualquier sección del video que se requiera. Al estudiar los procesos de conversión de secuencias de imágenes, se comprende cómo estas secuencias se pueden almacenar en archivos individuales numerados secuencialmente, o en un solo archivo de video. Se estudió el proceso de compresión de imágenes de video y la necesidad que esta ha adquirido, debido a que la transmisión y almacenamiento de video sin comprimir sería extremadamente costoso e impráctica. Se experimentó con las dos formas en que se presenta la compresión sin pérdidas y con pérdidas. Logrando comprender que la compresión sin pérdida conserva la calidad de la imagen original. Mientras que en la compresión con pérdida, alguna información presente en la imagen original o de vídeo se descarta, y por lo tanto la calidad disminuye. Cuan mayor sea el factor de compresión la calidad se ve más empobrecida. Se logró realizar conversiones de secuencias de imágenes individuales a archivos de video AVI, MPEG y H263, y también a archivos de video YUV con cualquier sub-muestreo de crominancias. Del mismo modo, se logró convertir archivos de video AVI, MPEG y H263, en secuencias de imágenes individuales y también a archivos de video YUV con cualquier sub-muestreo de crominancias. Además se logró la conversión exitosa desde archivos de video YUV con sub-muestreo de crominancia YUV 4:4:4, YUV 4:2:2, YUV 4:1:1 y YUV 4:2:0, a secuencias de imágenes individuales, archivos de video AVI, MPEG y H263 y también a archivos de video YUV con cualquier sub-muestreo de crominancias. La conversión desde un archivo YUV con sub-muestreo de crominancias YUV 4:0:0 se trata como un caso particular, debido a que al no tener crominancias, este no puede ser convertido en otro archivo YUV que tenga un sub-muestreo de crominancias diferente. Aparte de esto, puede ser convertido a secuencias de imágenes individuales y a archivos de video AVI, MPEG y H263. El algoritmo también es capaz de realizar conversiones parciales de archivos, o también pueden llamarse extracciones, ya que permite escoger desde cuál imagen se desea realizar la conversión y cuántas imágenes o frames se desean procesar. Recopilando todas las conversiones que puede realizar el algoritmo propuesto, se crea la tabla resumen que se muestra en el cuadro 7.1.

137 7 Conclusiones y recomendaciones 121 Cuadro 7.1: Resumen de lo que es capaz el algoritmo. Al realizar un proyecto es indispensable el orden y la planificación. Es muy recomendable seccionar el trabajo y calendarizar por semanas o incluso días los avances que se espera tener. Esto con el fin de tener un avance constante y evitar que algún contratiempo inesperado pueda perjudicar de manera irremediable los resultados del proyecto. Cuando el proyecto de programación requiere trabajar con imágenes y videos, el hardware toma mucha importancia, debido a que los tiempos de procesamiento en un equipo muy antiguo pueden entorpecer la elaboración del algoritmo. Se recomienda trabajar con computadores de alta capacidad de procesamiento y memoria. Cuando la conversión es de video a secuencia de imágenes, sería buena idea poder seleccionar de qué sección inicial del video (en hh:mm:ss) a qué sección final (hh:mm:ss o número de ss desde el inicio) se desean extraer las imágenes. En el cuadro resumen de lo que es capaz el algoritmo (Cuadro 7.1) se muestran algunas conversiones que el algoritmo propuesto no es capaz de realizar, por lo tanto para una nueva versión se podrían tratar de resolver y alcanzar un algoritmo de conversión más completo. Este algoritmo fue desarrollado para ejecutarse bajo el sistema operativo Ubuntu, se recomienda crear un algoritmo a partir del propuesto, que pueda ejecutarse en los sistemas operativos de Microsoft Windows.

CAPITULO I INTRODUCCION. Conforme la informática avanza, las imágenes se han convertido en un área muy

CAPITULO I INTRODUCCION. Conforme la informática avanza, las imágenes se han convertido en un área muy Introducción 4 CAPITULO I INTRODUCCION 1.1 Compresión de Imágenes. Conforme la informática avanza, las imágenes se han convertido en un área muy importante de esta. Hoy en día surgen más entornos gráficos

Más detalles

Capítulo 1 CAPÍTULO 1-INTRODUCCIÓN-

Capítulo 1 CAPÍTULO 1-INTRODUCCIÓN- CAPÍTULO 1-INTRODUCCIÓN- 1 1.1 INTRODUCCIÓN El Procesamiento Digital de Señales es un área de la ingeniería que ha estado creciendo rápidamente a través de las últimas décadas. Su rápido desarrollo es

Más detalles

TRANSMISION DIGITAL. PCM, Modulación por Codificación de Pulsos

TRANSMISION DIGITAL. PCM, Modulación por Codificación de Pulsos MODULACIÓN TRANSMISION DIGITAL La amplia naturaleza de las señales analógicas es evidente, cualquier forma de onda está disponible con toda seguridad en el ámbito analógico, nos encontramos con una onda

Más detalles

UD - 6 SISTEMAS DE COMPRENSIÓN DE IMÁGENES

UD - 6 SISTEMAS DE COMPRENSIÓN DE IMÁGENES UD - 6 SISTEMAS DE COMPRENSIÓN DE IMÁGENES Eduard Lara 1 1. INTRODUCCIÓN La digitalización de las imágenes de TV genera una alta cantidad de información Tratamiento y distribución complicado. Necesidad

Más detalles

Información Científica y Tecnológica

Información Científica y Tecnológica Información Científica y Tecnológica Tutorial para la edición de imágenes científicas mediante Adobe Photoshop CS6 v13.0 y Microsoft office Powerpoint Introducción En los lineamientos para publicar de

Más detalles

Fundamentos de la Visión Artificial. Prof. Dr. Francisco Gómez Rodríguez Prof. Manuel J. Domínguez Morales 1

Fundamentos de la Visión Artificial. Prof. Dr. Francisco Gómez Rodríguez Prof. Manuel J. Domínguez Morales 1 Fundamentos de la Visión Artificial Prof. Dr. Francisco Gómez Rodríguez Prof. Manuel J. Domínguez Morales 1 Índice 1. Introducción a lavisión Artificial 2. Adquisición y representación de imágenes 3. Filtrado

Más detalles

Edición de Video 2.0 Centro de Formación www.sceu.frba.utn.edu.ar

Edición de Video 2.0 Centro de Formación www.sceu.frba.utn.edu.ar Edición de Video 2.0 Centro de Formación p. 2 Módulo 2: Edición, Render y Exportación Unidad 3: Avidemux (Editor de video) p. 3 Bloques temáticos: Unidad 3: Avidemux (Editor de video). p. 4 Avidemux (Edición

Más detalles

Capitulo V Administración de memoria

Capitulo V Administración de memoria Capitulo V Administración de memoria Introducción. Una de las tareas más importantes y complejas de un sistema operativo es la gestión de memoria. La gestión de memoria implica tratar la memoria principal

Más detalles

Figura 1.12 Señalización analógica y digital de datos analógicos y digitales.

Figura 1.12 Señalización analógica y digital de datos analógicos y digitales. Los datos digitales se pueden representar por señales digitales, con un nivel de tensión diferente por cada uno de los dígitos binarios. Como se muestra en la figura 1.12, éstas no son las únicas posibilidades.

Más detalles

El pipeline gráfico Figura 3.1

El pipeline gráfico Figura 3.1 El pipeline gráfico Para llevar a cabo una representación virtual de un ambiente tridimensional, se realiza un modelado del escenario. Dicho modelo incluye la representación geométrica de los objetos presentes,

Más detalles

5. Despliegue en la PC

5. Despliegue en la PC 5 DESPLIEGUE EN LA PC 62 5.1 Conexión a la PC por medio de la tarjeta de audio La adquisición de señales analógicas es un trabajo que cada vez se hace más necesario en todos los campos relacionados con

Más detalles

Computadores y Comunicaciones. Tema 6: Aplicaciones Multimedia

Computadores y Comunicaciones. Tema 6: Aplicaciones Multimedia Computadores y Comunicaciones Tema 6: Aplicaciones Multimedia Febrero, 2011 Jorge Juan Chico , Julián Viejo Cortés Departamento de Tecnología Electrónica Universidad

Más detalles

GUÍAS FÁCILES DE LAS TIC

GUÍAS FÁCILES DE LAS TIC GUÍAS FÁCILES DE LAS TIC del COLEGIO OFICIAL DE INGENIEROS DE TELECOMUNICACIÓN Trabajo Premiado 2006 Autor: IPTV D. José Enrique Soriano Sevilla 17 de Mayo 2006 DIA DE INTERNET Qué es IPTV? IPTV Las siglas

Más detalles

Memoria La memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos).

Memoria La memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos). Memoria La memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos). Memoria Típica. Los datos almacenados en memoria tienen que pasar, en un momento

Más detalles

Audio ::: Introducción Diseño de materiales multimedia. Web 2.0. 3.1 Introducción

Audio ::: Introducción Diseño de materiales multimedia. Web 2.0. 3.1 Introducción 3.Audio 238 3.1 Introducción 239 3.1 Introducción 3.1.1 Conceptos básicos del sonido digital Frecuencia. Es el número de vibraciones por segundo que da origen al sonido analógico. El espectro de un sonido

Más detalles

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes:

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes: Descripción del ambiente de trabajo Entrar y salir de la aplicación Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes: A través del botón :

Más detalles

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl 1 Colección de Tesis Digitales Universidad de las Américas Puebla Morales Salcedo, Raúl En este último capitulo se hace un recuento de los logros alcanzados durante la elaboración de este proyecto de tesis,

Más detalles

Introducción general a la compresión de datos multimedia

Introducción general a la compresión de datos multimedia Introducción general a la compresión de datos multimedia Necesidad de la compresión La mayoría de las aplicaciones multimedia requieren volúmenes importantes de almacenamiento y transmisión. CD-ROM 640

Más detalles

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los

Más detalles

Plataforma Helvia. Manual de Administración. Bitácora. Versión 6.06.04

Plataforma Helvia. Manual de Administración. Bitácora. Versión 6.06.04 Plataforma Helvia Manual de Administración Bitácora Versión 6.06.04 ÍNDICE Acceso a la administración de la Bitácora... 3 Interfaz Gráfica... 3 Publicaciones... 4 Cómo Agregar una Publicación... 4 Cómo

Más detalles

Consideraciones para crear un Video

Consideraciones para crear un Video Consideraciones para crear un Video L.S.C. Sujey Anahí Díaz Herrera 1. Qué es la Edición de Video? La edición de vídeo consiste en la ordenación y estructuración del material de montaje (los clips de video

Más detalles

Módulo: Ahorra espacio ÍNDICE 1. QUÉ ES WINRAR? 3

Módulo: Ahorra espacio ÍNDICE 1. QUÉ ES WINRAR? 3 ÍNDICE 3 WINRAR 4 : 6 EN EL FUNCIONAMIENTO DEL WINRAR 14 5. VENTAJAS DEL COMPRESOR WINRAR RESPECTO AL COMPRESOR WINZIP 18 2 1. QUÉ ES WINRAR? WinRAR es una versión del compresor RAR para Windows de 32

Más detalles

HP Backup and Recovery Manager

HP Backup and Recovery Manager HP Backup and Recovery Manager Manual de usuario Version 1.0 Índice Introducción Instalación Cómo se instala Opciones de idioma HP Backup and Recovery Manager Recordatorios Copias de sguridad programadas

Más detalles

PROCEDIMIENTO OPERATIVO DESARROLLAR SISTEMAS INFORMÁTICOS PDO-COCTI-DTIN-04

PROCEDIMIENTO OPERATIVO DESARROLLAR SISTEMAS INFORMÁTICOS PDO-COCTI-DTIN-04 Autorización Este documento entra en vigor a partir del 2 de agosto del 2005, a través de su autorización por parte del Dr. Francisco Javier Rojas Monroy, Coordinador de Operaciones, Calidad y Teclogía

Más detalles

1. VIRTUALIZACION DEL PROCESO REAL.

1. VIRTUALIZACION DEL PROCESO REAL. CAPITULO IV DISEÑO 86 En este capítulo se muestra el diseño realizado para el desarrollo del CD Interactivo del Museo e Historia Militar de la Fuerza Armada de El Salvador, se ilustra claramente el proceso

Más detalles

Menús. Gestor de Menús

Menús. Gestor de Menús Menús Para dar acceso a las categorías, artículos y generar espacio para los módulos se deben crear menús, éstos son enlaces a determinado recurso en el portal Web, sin ellos no es posible visualizar ninguno

Más detalles

Dibujos creados con Word. Mediante autoformas, líneas, rectángulos, elipses, etc.

Dibujos creados con Word. Mediante autoformas, líneas, rectángulos, elipses, etc. Centro Politécnico Particular de Conchalí Laboratorio de Computación Apuntes de Laboratorio (Manejo de Imágenes) Introducción Hoy en día un documento para que sea considerado como un buen documento debe

Más detalles

FORMATOS. paisaje.jpeg. Nombre de archivo extensión

FORMATOS. paisaje.jpeg. Nombre de archivo extensión FORMATOS Para qué es un formato? Un formato es la manera particular que tiene cada archivo de tener almacenada su información. Hay diferentes tipos de formatos para diferente tipo de información. Sin embargo,

Más detalles

MACROS Y FORMULARIOS

MACROS Y FORMULARIOS MACROS Y FORMULARIOS Para poder realizar formularios en Excel es necesario ubicar el menú programador Qué hacer si no aparece el menú programador? En algunos equipos no aparece este menú, por lo que es

Más detalles

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos.

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos. RAIDS MODO LINEAL Es un tipo de raid que muestra lógicamente un disco pero se compone de 2 o más discos. Solamente llena el disco 0 y cuando este está lleno sigue con el disco 1 y así sucesivamente. Este

Más detalles

Práctica 1: Sencillo Juego en Ensamblador

Práctica 1: Sencillo Juego en Ensamblador Práctica 1: Sencillo Juego en Ensamblador El objetivo de esta práctica es aprender a programar usando el ensamblador 8086 y, en particular, aprender a utilizar las interrupciones de la BIOS y de MSDOS

Más detalles

REDES DE COMPUTADORES FACULTAD DE INGENIERIA ELECTRONICA UNIVERSIDAD PONTIFICIA BOLIVARIANA. Profesor: Jhon Jairo Padilla Aguilar, Ph.D.

REDES DE COMPUTADORES FACULTAD DE INGENIERIA ELECTRONICA UNIVERSIDAD PONTIFICIA BOLIVARIANA. Profesor: Jhon Jairo Padilla Aguilar, Ph.D. REDES DE COMPUTADORES FACULTAD DE INGENIERIA ELECTRONICA UNIVERSIDAD PONTIFICIA BOLIVARIANA Profesor: Jhon Jairo Padilla Aguilar, Ph.D. PRACTICA DE LABORATORIO TITULO: MANEJO DE UN ANALIZADOR DE PROTOCOLOS

Más detalles

Figura 87. Apariencia física de VIFIBIO

Figura 87. Apariencia física de VIFIBIO 117 9. RESULTADOS El resultado final de este trabajo de grado es un dispositivo llamado VIFIBIO, el cual permite graficar una señal que viene del fisiógrafo ya mencionado anteriormente. Pero detrás de

Más detalles

Europa. 60/ 30 Alta res. 24/ 24 Alta res. DVD. Televisión

Europa. 60/ 30 Alta res. 24/ 24 Alta res. DVD. Televisión Norm ativa NTSC Lineas Filas 525 Asp ect 4:3 Frec. Campo /cuadro [Hz] 60/30 Uso Televisión EE:UU Color calidad trasmisión (YCrCb) 4:2:2 Entrelazado si PAL 625 4:3 50/ 25 Televisión Europa 4:2:2 si HDT

Más detalles

TEMA 2: Representación de la Información en las computadoras

TEMA 2: Representación de la Información en las computadoras TEMA 2: Representación de la Información en las computadoras Introducción Una computadora es una máquina que procesa información y ejecuta programas. Para que la computadora ejecute un programa, es necesario

Más detalles

Software de Particle Tracking Version 1.0

Software de Particle Tracking Version 1.0 Software de Particle Tracking Version 1.0 Martín Pastor Laboratorio de Medios Granulares Departamento de Física y Matemática Aplicada Universidad de Navarra Enero, 2007 Índice general 1. Introducción 3

Más detalles

Dolby Digital en Nero Tutorial

Dolby Digital en Nero Tutorial Tutorial Nero AG Content 1 Dolby Digital en Nero 3 1 Qué es Dolby... Digital? 3 2 Dolby Digital... en las aplicaciones 4 Sonido envolvente en Nero SoundTrax Cambiar distribución del sonido envolvente...

Más detalles

Guía de estudio para examen de recuperación tecnología I

Guía de estudio para examen de recuperación tecnología I Guía de estudio para examen de recuperación tecnología I 1. Escribe dos ejemplos de una técnica. 2. Escribe la diferencia entre técnica y tecnología. 3. Escribe las principales técnicas de la informática.

Más detalles

Unidad 1. La información

Unidad 1. La información Unidad 1. La información En esta unidad aprenderás: Los conceptos básicos de la informática. Cómo se representa la información dentro del ordenador. Las unidades de información. 1.1 Conceptos básicos Informática.

Más detalles

1.- INTRODUCCIÓN AL PROCESADO DIGITAL DE IMÁGENES

1.- INTRODUCCIÓN AL PROCESADO DIGITAL DE IMÁGENES 1.- INTRODUCCIÓN AL PROCESADO DIGITAL DE Los campos del procesado digital de señales en dos dimensiones (2-D) y procesado digital de imágenes han tenido una tremenda vitalidad en las dos décadas pasadas

Más detalles

La ventana de Microsoft Excel

La ventana de Microsoft Excel Actividad N 1 Conceptos básicos de Planilla de Cálculo La ventana del Microsoft Excel y sus partes. Movimiento del cursor. Tipos de datos. Metodología de trabajo con planillas. La ventana de Microsoft

Más detalles

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F) APRENDERAPROGRAMAR.COM LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F) Sección: Cursos Categoría: Curso básico de programación en lenguaje C desde

Más detalles

La definición de digital es toda información representada por una serie de pulsos eléctricos discretos basados en un sistema binario (ceros y unos).

La definición de digital es toda información representada por una serie de pulsos eléctricos discretos basados en un sistema binario (ceros y unos). Tratamiento de la Imagen Digital Qué es la imagen digital? La definición de digital es toda información representada por una serie de pulsos eléctricos discretos basados en un sistema binario (ceros y

Más detalles

Programa Tracker : Cómo generar Vectores y sumarlos

Programa Tracker : Cómo generar Vectores y sumarlos Programa Tracker : Cómo generar Vectores y sumarlos Esta guía explica cómo usar vectores, la posibilidad de sumarlos, presentar los resultados directamente en pantalla y compararlos de forma gráfica y

Más detalles

Matemáticas para la Computación

Matemáticas para la Computación Matemáticas para la Computación José Alfredo Jiménez Murillo 2da Edición Inicio Índice Capítulo 1. Sistemas numéricos. Capítulo 2. Métodos de conteo. Capítulo 3. Conjuntos. Capítulo 4. Lógica Matemática.

Más detalles

Manual Impress Impress Impress Impress Impress Draw Impress Impress

Manual Impress Impress Impress Impress Impress Draw Impress Impress Manual Impress Se puede definir Impress como una aplicación dirigida fundamentalmente a servir de apoyo en presentaciones o exposiciones de los más diversos temas, proyectando una serie de diapositivas

Más detalles

Como se hace un video tutorial?

Como se hace un video tutorial? Como se hace un video tutorial? Un video tutorial VT tiene como objetivo fundamental mostrar de manera resumida los pasos y/o procesos que permitan abordar el tema en estudio. Características: Debe realizarse

Más detalles

Centro de Capacitación en Informática

Centro de Capacitación en Informática Fórmulas y Funciones Las fórmulas constituyen el núcleo de cualquier hoja de cálculo, y por tanto de Excel. Mediante fórmulas, se llevan a cabo todos los cálculos que se necesitan en una hoja de cálculo.

Más detalles

MAPA OFICIAL DE CARRETERAS DE NAVARRA VERSIÓN 2012

MAPA OFICIAL DE CARRETERAS DE NAVARRA VERSIÓN 2012 MAPA OFICIAL DE CARRETERAS DE NAVARRA VERSIÓN 2012 Instrucciones de uso con Acrobat Reader versión 6.0 o posterior GOBIERNO DE NAVARRA DEPARTAMENTO DE OBRAS PÚBLICAS, TRANSPORTES Y COMUNICACIONES SECCIÓN

Más detalles

Tratamiento de la Imagen Digital

Tratamiento de la Imagen Digital Tratamiento de la Imagen Digital Qué es la imagen digital? La definición de digital es toda información representada por una serie de pulsos electricos discretos basados en un sistema binario (ceros y

Más detalles

Procesamiento Digital de Imágenes. Compresión de imágenes

Procesamiento Digital de Imágenes. Compresión de imágenes FICH, UNL - Departamento de Informática - Ingeniería Informática Procesamiento Digital de Imágenes Guía de Trabajos Prácticos 8 Compresión de imágenes 2010 1. Objetivos Analizar las características y el

Más detalles

PRINCIPIOS SOBRE FORMATOS DIGITALES Y HD

PRINCIPIOS SOBRE FORMATOS DIGITALES Y HD PRINCIPIOS SOBRE FORMATOS DIGITALES Y HD 1.- RESOLUCIÓN Se trata del ancho por el alto que da el total de píxeles de la imagen. Podemos encontrar dos tipos de resoluciones "broadcast": 1.- Resolución SD

Más detalles

Características y ventajas de WinZip

Características y ventajas de WinZip Características y ventajas de WinZip Métodos de compresión Zip disponibles Existen varios métodos de compresión de archivos disponibles. Zip es el más conocido y es un formato abierto que ha evolucionado

Más detalles

OpenOffice.org Calc MANUAL CALC 1.INTRODUCCIÓN... 2 2. ENTORNO... 3 1.1 BARRAS DE MENÚ... 3 1.2 PERSONALIZACIÓN DE BARRAS... 4

OpenOffice.org Calc MANUAL CALC 1.INTRODUCCIÓN... 2 2. ENTORNO... 3 1.1 BARRAS DE MENÚ... 3 1.2 PERSONALIZACIÓN DE BARRAS... 4 MANUAL CALC Índice de contenido 1.INTRODUCCIÓN... 2 2. ENTORNO... 3 1.1 BARRAS DE MENÚ... 3 1.2 PERSONALIZACIÓN DE BARRAS... 4 3. MANEJO DE DOCUMENTOS... 5 2.1 ABRIR DOCUMENTOS... 5 2.2 GUARDAR DOCUMENTOS

Más detalles

Guía de referencia del color de Fiery

Guía de referencia del color de Fiery 2014 Electronics For Imaging. La información de esta publicación está cubierta por los Avisos legales para este producto. 23 de junio de 2014 Contenido 3 Contenido Introducción a la Guía de referencia

Más detalles

Técnicas para la Creación de Contenidos Multimediales

Técnicas para la Creación de Contenidos Multimediales Edición de contenidos audiovisuales para presentaciones Técnicas para la Creación de Contenidos Multimediales 1.- INTERFAZ WINDOWS MOVIE MAKER 2 2.- IMPORTAR MEDIOS O ARCHIVOS 3 3.- GUIÓN GRÁFICO 4 4.-

Más detalles

TUTORIAL KINOVEA REALIZADO POR: YESICA MORENO, Laboratorio de Biomecánica Universidad Manuela Beltrán RODRIGO ARGOTHY,

TUTORIAL KINOVEA REALIZADO POR: YESICA MORENO, Laboratorio de Biomecánica Universidad Manuela Beltrán RODRIGO ARGOTHY, TUTORIAL KINOVEA REALIZADO POR: YESICA MORENO, Laboratorio de Biomecánica Universidad Manuela Beltrán RODRIGO ARGOTHY, Laboratorio de Biomecánica Universidad Manuela Beltrán CARLOS COLLAZOS, Laboratorio

Más detalles

MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA. Elaborado por: Julián A. Hernández M.

MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA. Elaborado por: Julián A. Hernández M. MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA Elaborado por: Julián A. Hernández M. PONTIFICIA UNIVERSIDAD JAVERIANA CALI SANTIAGO DE CALI 2011 CONTENIDO Pág. INTRODUCCIÓN...3 1. ANÁLISIS

Más detalles

Oficina de Tecnologías de la Información y Comunicaciones MANUAL DE USUARIO. Diseño básico para elaboración de banners en Macromedia Fireworks 8

Oficina de Tecnologías de la Información y Comunicaciones MANUAL DE USUARIO. Diseño básico para elaboración de banners en Macromedia Fireworks 8 MANUAL DE USUARIO Diseño básico para elaboración de banners en Macromedia Fireworks 8 Pág. 1 de 13 ÍNDICE 1. INTRODUCCION... 3 2. EL ESPACIO DE TRABAJO DE FIREWORKS... 3 3. CREAR UN NUEVO DOCUMENTO...

Más detalles

Diagramas del UML. A continuación se describirán los diagramas más comunes del UML y los conceptos que representan: Diagrama de Clases

Diagramas del UML. A continuación se describirán los diagramas más comunes del UML y los conceptos que representan: Diagrama de Clases El UML está compuesto por diversos elementos gráficos que se combinan para conformar diagramas. Debido a que el UML es un lenguaje, cuenta con reglas para combinar tales elementos. La finalidad de los

Más detalles

Actividades para mejoras. Actividades donde se evalúa constantemente todo el proceso del proyecto para evitar errores y eficientar los procesos.

Actividades para mejoras. Actividades donde se evalúa constantemente todo el proceso del proyecto para evitar errores y eficientar los procesos. Apéndice C. Glosario A Actividades de coordinación entre grupos. Son dinámicas y canales de comunicación cuyo objetivo es facilitar el trabajo entre los distintos equipos del proyecto. Actividades integradas

Más detalles

Introducción a Visual Studio.Net

Introducción a Visual Studio.Net Introducción a Visual Studio.Net Visual Studio es un conjunto completo de herramientas de desarrollo para la generación de aplicaciones Web ASP.NET, Servicios Web XML, aplicaciones de escritorio y aplicaciones

Más detalles

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso 2013-2014. v1.0 (05.03.

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso 2013-2014. v1.0 (05.03. INFORMÁTICA Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial Curso 2013-2014 v1.0 (05.03.14) A continuación figuran una serie de ejercicios propuestos, agrupados

Más detalles

1. Sistemas de televisión extendidas:

1. Sistemas de televisión extendidas: Introducción al vídeo Este material supone solo una ampliación de la cultura general de cada alumno. No pretende de rigor o exactitud, pero es necesario para entender el resto del material de vídeo. 1.

Más detalles

Informática I para Bachillerato

Informática I para Bachillerato CIMAT Introducción a la programación en C/C++ CIMAT Sesión 2 Cual es el lenguaje máquina? El lenguaje utilizado por el procesador se denomina lenguaje máquina. Se trata de datos tal como llegan al procesador,

Más detalles

Grabación de sonido. Realizado por: Alejandro Martín Daza Manuel Romero Aranda

Grabación de sonido. Realizado por: Alejandro Martín Daza Manuel Romero Aranda Grabación de sonido Realizado por: Alejandro Martín Daza Manuel Romero Aranda Desarrollo histórico Antes del siglo XIX Hermanos Banū Mūsā: mecanismos propulsados por agua (S. IX) Organillos (S XV) Cajas

Más detalles

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS CICLO: 01/ 2014 Nombre de la Practica: Lugar de Ejecución: Tiempo Estimado: Materia: Docentes: GUIA DE LABORATORIO #05 Trabajando con Formularios.

Más detalles

Capitulo 2: Introducción a RAW de cámara

Capitulo 2: Introducción a RAW de cámara Capitulo 2: Introducción a RAW de cámara Acerca de los archivos RAW de cámara Los archivos RAW de cámara contienen datos de imágenes en escala de grises sin procesar ni comprimir del sensor de imagen de

Más detalles

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL Índice 1 Introducción... 5 1.1 Perfil de la aplicación... 5 1.2 Requisitos técnicos... 5 2 Manual de usuario... 7 2.1 Instalación del certificado...

Más detalles

Semanas Vectorización 6 y de 7 tipografías Animación en Photoshop. Por fin entenderás y comprenderás la elaboración de gifs animados para páginas web!

Semanas Vectorización 6 y de 7 tipografías Animación en Photoshop. Por fin entenderás y comprenderás la elaboración de gifs animados para páginas web! Semanas Vectorización 6 y de 7 tipografías Semanas 4 y 5 Empecemos! Bienvenidos y bienvenidas a una nueva semana, muy divertida y animada. En la actualidad podemos dar animación y sonido a las imágenes

Más detalles

RAPID TYPING. Qué es?

RAPID TYPING. Qué es? RAPID TYPING Qué es? Rapid Typing es un programa de mecanografía, orientado a los más pequeños por su música y apariencia, pero válido para cualquiera que quiera aprender a teclear correctamente y con

Más detalles

UNIDAD 6 Fotogrametría

UNIDAD 6 Fotogrametría UNIDAD 6 Fotogrametría La fotogrametría es la técnica de obtener mediciones reales de un objeto por medio de la fotografía, tanto aérea como terrestre Las fotografías se las realiza con una cámara métrica

Más detalles

1. La nueva interfaz del programa

1. La nueva interfaz del programa 1. La nueva interfaz del programa 13 1. La nueva interfaz del programa 1.1 La interfaz del nuevo Flash CS4 Al acceder por primera vez a Adobe Flash CS4 llama la atención la nueva disposición de las paletas,

Más detalles

UNIÓN INTERNACIONAL DE TELECOMUNICACIONES

UNIÓN INTERNACIONAL DE TELECOMUNICACIONES UNIÓN INTERNACIONAL DE TELECOMUNICACIONES CCITT N.86 COMITÉ CONSULTIVO INTERNACIONAL TELEGRÁFICO Y TELEFÓNICO (11/1988) SERIE N: MANTENIMIENTO DE CIRCUITOS INTERNACIONALES PARA TRANSMISIONES RADIOFÓNICAS

Más detalles

Digitalización de imágenes con ayuda del histograma

Digitalización de imágenes con ayuda del histograma Digitalización de imágenes con ayuda del histograma Apellidos, nombre Vicente Atienza Vanacloig (vatienza@disca.upv.es) Departamento Centro Informática de Sistemas y Computadores (DISCA) Escuela Técnica

Más detalles

generar columnas de texto y números disponer texto en columnas paralelas (para traducciones por ejemplo) situar imágenes junto a textos.

generar columnas de texto y números disponer texto en columnas paralelas (para traducciones por ejemplo) situar imágenes junto a textos. Módulo 3 Herramientas de Cómputo Tablas y Gráficos Las tablas de Word tienen una función similar a las tabulaciones pero con muchas más opciones de formato permitiendo mejores acabados. Mediante tablas

Más detalles

CONCURSO DE SITIOS WEB DE RAMAS ESTUDIANTILES IEEE

CONCURSO DE SITIOS WEB DE RAMAS ESTUDIANTILES IEEE CONCURSO DE SITIOS WEB DE RAMAS ESTUDIANTILES IEEE Reglas e instrucciones El objetivo de una página web es transmitir información de una manera útil para el lector. La manera en que transmite la información

Más detalles

Estándares de digitalización Elementos mínimos. Propuesta del CBUC (actualizado en julio de 2005)

Estándares de digitalización Elementos mínimos. Propuesta del CBUC (actualizado en julio de 2005) Estándares de digitalización Elementos mínimos. Propuesta del CBUC (actualizado en julio de 2005) Este documento actualiza el que se elaboró en febrero de 2000. Las modificaciones que se han realizado

Más detalles

Sistemas de numeración y aritmética binaria

Sistemas de numeración y aritmética binaria Sistemas de numeración y aritmética binaria Héctor Antonio Villa Martínez Programa de Ciencias de la Computación Universidad de Sonora Este reporte consta de tres secciones. Primero, la Sección 1 presenta

Más detalles

Capítulo 6: Conclusiones

Capítulo 6: Conclusiones Capítulo 6: Conclusiones 6.1 Conclusiones generales Sobre el presente trabajo se obtuvieron varias conclusiones sobre la administración del ancho de banda en una red inalámbrica, basadas en la investigación

Más detalles

WinHIPE: edición, compilación y ejecución de programas; y generación de animaciones web. Manual de usuario.

WinHIPE: edición, compilación y ejecución de programas; y generación de animaciones web. Manual de usuario. WinHIPE: edición, compilación y ejecución de programas; y generación de animaciones web. Manual de usuario. Índice contenido. INTRODUCCIÓN... 1-2 1. ENTORNO DE TRABAJO... 1-2 2. EDICIÓN DE PROGRAMAS...

Más detalles

HARDWARE DE UN ORDENADOR. Elementos básicos

HARDWARE DE UN ORDENADOR. Elementos básicos HARDWARE DE UN ORDENADOR Elementos básicos Componentes de un ordenador Hardware: todos los componentes físicos, tanto internos como externos: monitor, teclado, disco duro, memoria, etc. Software: todos

Más detalles

MÓDULO 1: Sistemas de Cómputo

MÓDULO 1: Sistemas de Cómputo Asignatura: PROGRAMACIÓN Código: TE243 Prerrequisitos: Algebra Lineal (S)* Intensidad horaria: 80 H.P.S. MÓDULO 1: Sistemas de Cómputo Introducción: un sistema de cómputo es un conjunto de elementos electrónicos

Más detalles

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech Resumen Todo documento XBRL contiene cierta información semántica que se representa

Más detalles

CÓMO CREAR NUESTRO CATÁLOGO

CÓMO CREAR NUESTRO CATÁLOGO CÓMO CREAR NUESTRO CATÁLOGO Mediante la aplicación (http://www.prensasoft.com/programas/conline) podemos crear nuestros propios catálogos. Para crear un catálogo necesitamos: - Varios productos que mostrar,

Más detalles

INSTRUCCIÓN DE SERVICIO NOCIONES BÁSICAS PARA DIAGRAMAS DE FLUJO. MICROSOFT VISIO

INSTRUCCIÓN DE SERVICIO NOCIONES BÁSICAS PARA DIAGRAMAS DE FLUJO. MICROSOFT VISIO INSTRUCCIÓN DE SERVICIO NOCIONES BÁSICAS PARA DIAGRAMAS DE FLUJO. MICROSOFT VISIO 2007 Fecha: 23/11/07 Autor: Aurora Estévez Ballester. TGRI Sección Normalización y Proceso Técnico Área de Bibliotecas

Más detalles

I NTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA

I NTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA I. INTRODUCCIÓN 1. ORDENADOR E INFORMÁTICA 1.1. Informática Informática (Información Automática) es la ciencia y la técnica del tratamiento automatizado de la información mediante el uso de ordenadores.

Más detalles

DataMAX pa r a PS3. Manual del Usuario V1.0

DataMAX pa r a PS3. Manual del Usuario V1.0 DataMAX pa r a PS3 Manual del Usuario V1.0 IMPORTANTE! Debe seguir los pasos de este manual antes de que pueda usar tarjetas de memoria de 8, 16, 32 o 64MB de otras compañías en su PlayStation 3. Índice

Más detalles

DIRECCIONAMIENTO IPv4

DIRECCIONAMIENTO IPv4 DIRECCIONAMIENTO IPv4 Para el funcionamiento de una red, todos sus dispositivos requieren una dirección IP única: La dirección MAC. Las direcciones IP están construidas de dos partes: el identificador

Más detalles

Un kilobyte (KB) son 1024 bytes, un Megabyte (MB) son 1024 KB, un Gigabyte son 1024 Mb

Un kilobyte (KB) son 1024 bytes, un Megabyte (MB) son 1024 KB, un Gigabyte son 1024 Mb El Explorador de Windows es la herramienta básica en un Sistema Operativo porque con ella controlaremos toda la información que tenemos guardada en nuestro disco duro, disquete, CD, USB, etc. Terminología

Más detalles

El proceso de edición digital en Artelope y CTCE

El proceso de edición digital en Artelope y CTCE El proceso de edición digital en Artelope y CTCE Carlos Muñoz Pons Universitat de València carlos.munoz-pons@uv.es Introducción Una de las cuestiones más importantes a la hora de trabajar en proyectos

Más detalles

Capítulo 1. Introducción

Capítulo 1. Introducción Capítulo 1 Introducción 1.1 Antecedentes La producción musical, en su mayoría, se ha valido de distintos tipos de software computacional para realizar la edición de composiciones musicales. De toda la

Más detalles

DIGITALIZACIÓN DE DOCUMENTOS: PROYECTO DIGISAN

DIGITALIZACIÓN DE DOCUMENTOS: PROYECTO DIGISAN DIGITALIZACIÓN DE DOCUMENTOS: PROYECTO DIGISAN Francisco Belmonte Díaz Diseño e implementación de Sistemas Informáticos. Coordinación de Tareas de Programación Servicio de Gestión Informática. Consejería

Más detalles

Ing. Benoît FROMENT MODULO 4 4.2 FOTOGRAFIAS AEREAS

Ing. Benoît FROMENT MODULO 4 4.2 FOTOGRAFIAS AEREAS 4.2 FOTOGRAFIAS AEREAS 1 - DESARROLLO DE LA FOTOGRAFIA AEREA El hombre, para enfrentar los problemas que le plantea la organización y el desarrollo del medio que habita, se ha visto obligado a crear novedosas

Más detalles

Manual de Usuario. Instituto Tecnológico y de Energías Renovables, ITER S.A.

Manual de Usuario. Instituto Tecnológico y de Energías Renovables, ITER S.A. Instituto Tecnológico y de Energías Renovables, ITER S.A. Contenido Introducción... 2 Conceptos... 3 1. Punto de Contacto... 3 2. Objetivo... 4 3. Fase... 6 4. Paso... 7 5. Ejercicio... 9 5.1. Ejercicios

Más detalles

DESCRIPCIÓN TÉCNICA SYSTEM MANAGER SOFTWARE (SMS)

DESCRIPCIÓN TÉCNICA SYSTEM MANAGER SOFTWARE (SMS) DESCRIPCIÓN TÉCNICA SYSTEM MANAGER SOFTWARE (SMS) Dossier Soporte BTP-C, Enero 2003 -pág. A.3-1 - 1. DESCRIPCIÓN TÉCNICA DEL SOFTWARE SUPERVISOR System Manager Software o SMS. Características SMS: Existen

Más detalles

Elementos de Microsoft Word

Elementos de Microsoft Word Contenido 1. Distintas formas de iniciar Word 2007... 2 2. Ayuda de Word... 2 3. Las barras de herramientas... 3 4. Funcionamiento de las pestañas. Cómo funcionan?... 4 5. Personalizar barra de acceso

Más detalles

CÁTEDRA DE IMÁGENES EN MEDICINA VIDEO COLOR Y RGB, ANCHO DE BANDA Y MTF PRÁCTICO Nº 4

CÁTEDRA DE IMÁGENES EN MEDICINA VIDEO COLOR Y RGB, ANCHO DE BANDA Y MTF PRÁCTICO Nº 4 Objetivos: Comprender la codificación del color en la señal de video compuesto y compararla con la del sistema RGB. Conocer y comprender las diferencias entre tinte, saturación y brillo, y cómo se generan

Más detalles

Operación de Microsoft Word

Operación de Microsoft Word Trabajar con tablas Las tablas permiten organizar la información y crear atractivos diseños de página con columnas paralelas de texto y gráficos. Las tablas pueden utilizarse para alinear números en columnas

Más detalles

EDITOR E INTÉRPRETE DE ALGORITMOS REPRESENTADOS EN DIAGRAMAS DE FLUJO 1 RESUMEN

EDITOR E INTÉRPRETE DE ALGORITMOS REPRESENTADOS EN DIAGRAMAS DE FLUJO 1 RESUMEN Informática Educativa Vol 11, No, 1, 1998 UNIANDES - LIDIE pp. 101-106 EDITOR E INTÉRPRETE DE ALGORITMOS REPRESENTADOS EN DIAGRAMAS DE FLUJO 1 Fabián CÁRDENAS VARELA Nelson CASTILLO IZQUIERDO Eduardo DAZA

Más detalles