Procesador de imágenes toolbox Matlab

8
Ingeniería Superior de Informática Asignatura: Visión Artificial Curso 2007/08 Práctica nº 1 : Fundamentos de la “Image Processing Toolboxde MATLAB 1. BREVES DEFINICIONES ........................................................................................ 1 2. IMÁGENES EN MATLAB Y LA IMAGE PROCESSING TOOLBOX ................ 3 CLASES DE ALMACENAMIENTO EN LA TOOLBOX ........................................................... 3 3. TIPOS DE IMÁGENES EN LA TOOLBOX .......................................................... 3 IMÁGENES INDEXADAS .................................................................................................. 4 Clase y desplazamiento en mapas de colores........................................................... 4 IMÁGENES DE INTENSIDAD (RGB) ................................................................................. 4 IMÁGENES DE BINARIAS ................................................................................................. 4 IMÁGENES RGB ............................................................................................................ 4 ARRAYS DE IMÁGENES MULTIFRAME ............................................................................. 5 Limitaciones ............................................................................................................. 6 4. SUMARIO DE TIPOS DE IMÁGENES Y CLASES NUMÉRICAS .................... 6 5. CONVERSIÓN DE TIPOS DE IMÁGENES .......................................................... 7 6. REFERENCIAS ......................................................................................................... 8 1. Breves definiciones La siguiente tabla nos ayudará, de manera resumida, a entender un poco más los tipos de imágenes con los que MATLAB trabaja. Palabras Definiciones Imagen binaria (Binary image) Imagen que contiene sólo píxeles de color blanco y negro. En MATLAB, una imagen binaria es representada por una matriz de tipo uint8 o double logical que contiene 0’s y 1’s (los cuales representan blanco y negro respectivamente). Una matriz es logical cuando sus flags lógicas

description

Procesador de imágenes toolbox Matlab

Transcript of Procesador de imágenes toolbox Matlab

Page 1: Procesador de imágenes toolbox Matlab

Ingeniería Superior de Informática

Asignatura: Visión Artificial Curso 2007/08

Práctica nº 1 : Fundamentos de la “Image Processing Toolbox” de MATLAB

1. BREVES DEFINICIONES........................................................................................ 1

2. IMÁGENES EN MATLAB Y LA IMAGE PROCESSING TOOLBOX ................ 3 CLASES DE ALMACENAMIENTO EN LA TOOLBOX ........................................................... 3

3. TIPOS DE IMÁGENES EN LA TOOLBOX .......................................................... 3 IMÁGENES INDEXADAS .................................................................................................. 4

Clase y desplazamiento en mapas de colores........................................................... 4 IMÁGENES DE INTENSIDAD (RGB)................................................................................. 4 IMÁGENES DE BINARIAS................................................................................................. 4 IMÁGENES RGB ............................................................................................................ 4 ARRAYS DE IMÁGENES MULTIFRAME............................................................................. 5

Limitaciones ............................................................................................................. 6

4. SUMARIO DE TIPOS DE IMÁGENES Y CLASES NUMÉRICAS.................... 6

5. CONVERSIÓN DE TIPOS DE IMÁGENES .......................................................... 7

6. REFERENCIAS ......................................................................................................... 8

1. Breves definiciones La siguiente tabla nos ayudará, de manera resumida, a entender un poco más los

tipos de imágenes con los que MATLAB trabaja.

Palabras Definiciones Imagen binaria (Binary image) Imagen que contiene sólo píxeles de color

blanco y negro. En MATLAB, una imagen binaria es representada por una matriz de tipo uint8 o double logical que contiene 0’s y 1’s (los cuales representan blanco y negro respectivamente). Una matriz es logical cuando sus flags lógicas

Page 2: Procesador de imágenes toolbox Matlab

están habilitadas. De forma habitual se nombra a la variable que contiene una imagen binaria como BW.

Tipo imagen (Image type) La relación definida entre los valores de un array y los colores de los píxeles. La toolbox soporta imágenes binarias, indexadas, de intensidad y RGB.

Imagen indexada (Indexed image) Imagen cuyos píxeles tienen valores que son índices directos a un mapa de color RGB. En MATLAB, una imagen indexada es representada por un array de clase uint8, uint16, o double. El mapa de color es siempre un array mx3 de clase double. De forma habitual se nombra a la variable que contiene una imagen indexada como X.

Imagen de intensidad (Intensity image) Es una imagen cuyos valores de píxeles corresponden a una escala de grises. En MATLAB, una imagen de intensidad es representada por un array de clase uint8, uint16, o double. Mientras estas imágenes no sean guardadas con mapas de color, MATLAB usará un mapa del sistema para mostrarla. De forma habitual se nombra a la variable que contiene una imagen de intensidad como I. Este término es sinónimo de escala de grises.

Imagen multiframe (Multiframe image) Un archivo que contiene más de una imagen o frames. Una vez guardado en una variable, la imagen multiframe es un array de 4 dimensiones, donde la cuarta dimensión especifica el número del frame. Este término es sinónimo de imagen multipágina (multipage image)

Imagen RGB (RGB image) Una imagen cuyos píxeles son especificados por 3 valores, uno para cada componente de color (rojo, verde y azul) de cada píxel. En MATLAB, una imagen RGB es representada por un array mxnx3 de clase uint8, uint16, o double. De forma habitual se nombra a la variable que contiene una imagen RGB como RGB.

Clase de almacenamiento (Storage class) Es la clase numérica de almacenamiento usada para guardar una imagen en MATLAB. Las posibles clases que MATLAB utiliza son uint8, uint16 y double.

Page 3: Procesador de imágenes toolbox Matlab

2. Imágenes en MATLAB y la Image Processing Toolbox Las estructuras de datos básicos en MATLAB son los arrays, unos conjuntos

ordenados de elementos reales o complejos. Este objeto es, de forma natural, adecuado a la representación de imágenes, o de lo que es lo mismo, conjuntos ordenados de valores reales de color o intensidad.

MATLAB guarda la mayoría de las imágenes como arrays bidimensionales (matrices), en los que cada elemento de la matriz corresponde a un único píxel1 en la imagen mostrada. Así, por ejemplo, una imagen compuesta por 200 filas y 300 columnas de puntos de color diferente sería guardada en MATLAB como una matriz de 200x300. Algunas imágenes, como las RGB2, requieren un array tridimensional, donde el primer plano de la tercera dimensión representa las intensidades de color rojo, la segunda el verde y la tercera azul.

Esta convención hace que trabajar con imágenes en MATLAB sea similar a trabajar con cualquier otro tipo de matrices, y hace que toda la potencia que MATLAB ofrece al manejo de matrices sea accesible para aplicaciones de procesamiento de imágenes. Por ejemplo, podemos seleccionar un único píxel de una imagen usando la nomenclatura habitual en el manejo de matrices:

I(2,15) Este comando devuelve el valor del píxel que se encuentra en la fila 2 y la

columna 15 de la imagen guardada en memoria I.

Clases de almacenamiento en la Toolbox Por defecto, MATLAB guarda la mayor parte de los datos como arrays de clase

double. Los datos en estos arrays son guardados como números de punto flotante de doble precisión (64-bit).

Sin embargo, para procesamiento de imagen, esta representación puede no ser siempre la más adecuada. El número de píxeles en una imagen puede ser muy grande (por ejemplo una 1000x1000 tiene 1 millón de píxeles). Como cada píxel está representado por, al menos, un elemento del array, esta imagen requeriría unos 8 MB de memoria.

Para reducir los requisitos de memoria, MATLAB puede guardar los datos de una imagen en arrays de enteros sin signo de 8 o 16 bits, las llamadas clases uint8 y uint16. Estos arrays requieren una octava y una cuarta parte de memoria respecto a un array de tipo double.

3. Tipos de imágenes en la Toolbox Como hemos visto, la toolbox de procesamiento de imágenes soporta 4 tipos

básicos de imágenes. • Imágenes indexadas • Imágenes de intensidad • Imágenes binarias • Imágenes RGB

1 Pixel viene de picture element y usualmente denota un único punto de la imagen 2 RGB viene del inglés Red-Green-Blue

Page 4: Procesador de imágenes toolbox Matlab

Imágenes indexadas Una imagen indexada consiste en una matriz de datos, X, y una matriz de mapa

de color, map. La matriz de datos puede ser de clase uint8, uint16 o double. La matriz del mapa de colores es un array de clase double de mx3 que contiene valores de punto flotante en el rango [0,1]. Cada fila del mapa especifica la componente de rojo, verde y azul de un único color. La imagen indexada utiliza de forma directa el mapa de colores. El color de cada píxel de la imagen es determinado mediante el uso del correspondiente valor de X como índice para el mapa. Así, un valor 1 apuntaría a la primera fila del mapa, 2 a la segunda,...

Un mapa de colores es normalmente guardado con una imagen indexada y es automáticamente cargado con la imagen cuando usamos la función imread.

Clase y desplazamiento en mapas de colores La relación entre los valores de la matriz de la imagen y el mapa de color

depende de la clase de la matriz de la imagen. Si esta matriz es de clase double entonces el valor 1 apuntará a la primera fila del mapa, el 2 a la segunda,... como ya se ha comentado anteriormente. Sin embargo si la clase de la matriz es uint8 o uint16, hay un desplazamiento y el valor 0 apuntaría a la primera fila del mapa, el valor 1 a la segunda y así sucesivamente.

Este desplazamiento es también usado en formatos de ficheros gráficos para maximizar el número de colores que puede soportar.

Imágenes de intensidad Una imagen de intensidad es una matriz de datos, I, cuyos valores representan

intensidades dentro de algún rango. MATLAB guarda la imagen de intensidad como una única matriz, cuyos elementos son los píxeles de la imagen. La matriz puede ser de clase double, uint8 o uint16. Los elementos de la matriz de intensidad representan varias intensidades, o niveles de gris, donde la intensidad 0 usualmente representa negro (ausencia de color) y la intensidad 1, 255 o 65535 representa intensidad total o blanco.

Imágenes de binarias En una imagen binaria, cada píxel asume uno de sólo dos valores discretos.

Esencialmente, estos dos valores corresponden a activado o desactivado. Una imagen binaria es guardada como una matriz bidimensional de 0’s (píxeles desactivados) y 1’s (píxeles activados).

Una imagen binaria puede ser considerada un tipo especial de imagen de intensidad, conteniendo solamente blanco y negro.

Una imagen binaria puede ser guardada en un array de clase double o uint8. Un array de clase uint8 es generalmente preferible por usar bastante menos memoria que si fuese de tipo double. En la toolbox de procesamiento de imagen, si alguna función devuelve una imagen binaria lo hará en forma de array de tipo uint8 logical. La toolbox utiliza el flag logical activado para indicar que el rango de datos de un array de uint8 es [0,1] y desactivado [0,255].

Imágenes RGB Una imagen RGB, a menudo referida como una imagen de color verdadero, es

guardada en MATLAB como un array de datos de mxnx3 que define las componentes roja, verde y azul de cada píxel individual. Una imagen RGB no necesita paleta de colores ya que la combinación de las tres componentes básicas de color guardadas en

Page 5: Procesador de imágenes toolbox Matlab

cada plano definen el propio color a representar en el píxel correspondiente. Los formatos de ficheros gráficos guardan imágenes RGB de 24 bpp, donde cada componente de color son de 8 bits. Esto da una gama de hasta 16 millones de colores. La precisión con la que una imagen de la vida real puede ser replicada ha dado el nombre al término comúnmente utilizado como color verdadero.

Una imagen RGB en MATLAB puede ser de clase double, uint8 o uint16. En un array RGB de clase double, cada componente de color tiene un valor comprendido entre 0 y 1. Un píxel cuyas componentes de color sean (0,0,0) se mostrará de color negro, mientras que otro de componentes (1,1,1) se mostrará blanco. Las tres componentes de color de cada píxel son guardadas en la tercera dimensión del array de datos. Por ejemplo, la componente roja, verde y azul del píxel (10,5) serán guardadas en RGB(10,5,1), RGB(10,5,2) y RGB(10,5,3) respectivamente.

De igual manera y a modo de otro nuevo ejemplo podemos averiguar el color de un píxel determinado averiguando las tres componentes de color de la manera vista anteriormente, de tal forma que si la componente roja del píxel (2,3) tiene el valor de 0.5176, la verde 0.1608 y la azul 0.0627, el color del píxel (2,3) será:

0.5176 0.1608 0.0627 Para terminar de ilustrar el concepto de los tres planos de color separados usados

en una imagen RGB, podemos utilizar el siguiente código que crea una imagen que contiene un gradiente de color y cada componente en diferentes imágenes por separado.

RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]); R=RGB(:,:,1); G=RGB(:,:,2); B=RGB(:,:,3); imshow(R) figure,imshow(G) figure,imshow(B) figure,imshow(RGB) Si ejecutamos el código notaremos que cada plano por separado contiene un área

de color banco. El blanco corresponde a los valores más altos de cada color. Por ejemplo, en la imagen del plano rojo, el blanco representa la porción de la imagen RGB donde más concentración de rojo existe. Cuando la imagen RGB se vuelve más verde o azul, empiezan a aparecer tonos grises en la imagen R y cuando se entra en la región negra de la imagen R entonces significa que la imagen RGB no contiene valores diferentes de 0 para la componente roja, es decir, R==0.

Arrays de imágenes multiframe Para algunas aplicaciones, podemos necesitar trabajar con colecciones de

imágenes relacionadas en tiempo o vista, tales como imágenes de resonancia magnética (MRI) o frames de películas.

La Image Processing Toolbox da soporte para guardar múltiples imágenes en un mismo array. Cada imagen por separado del array se llama frame. Si un array contiene múltiples frames, estarán concatenados en su cuarta dimensión. Por ejemplo, un array de cinco imágenes RGB de 400x300 sería 400x300x3x5. Una imagen multiframe de intensidad o imágenes indexadas sería 400x300x1x5.

Para guardar imágenes separadas en un fichero multiframe podemos utilizar la función cat. Por ejemplo, si tenemos un grupo de imágenes A1, A2, A3, A4 y A5, podemos guardarlas en un único array usando:

Page 6: Procesador de imágenes toolbox Matlab

A=cat(4,A1,A2,A3,A4,A5) También podemos extraer frames de una imagen multiframe invocándola

directamente mediante la notación de MATLAB. Por ejemplo, si tenemos una imagen multiframe MULTI y queremos extraer el tercer frame:

FRM3=MULTI(:,:,:,3); Notar que en un array de imágenes multiframe, cada imagen debe tener las

mismas dimensiones y el mismo número de planos. Igualmente, en un array multiframe de imágenes indexadas, cada una de las imágenes debe también usar el mismo mapa de colores.

Limitaciones Muchas de las funciones en la toolbox operan sólo con las 2 primeras o hasta

terceras dimensiones. Podemos usar arrays de cuatro dimensiones con estas funciones, pero extrayendo individualmente los frames. Por ejemplo, para mostrar el séptimo frame de un array multiframe haríamos:

imshow(MULTI(:,:,:,7))

4. Sumario de tipos de imágenes y clases numéricas La siguiente tabla muestra de forma breve la manera que MATLAB interpreta

los elementos de una matriz de datos como píxeles de color, dependiendo del tipo de imágenes y clase de almacenamiento.

Tipo de imagen Clase double Clase uint8 o uint16 Binaria La imagen es un array mxn

de ceros y unos donde el flag logical está activado

La imagen es un array mxn de ceros y unos donde el flag logical está activado. La toolbox no soporta imágenes binarias uint16.

Indexada La imagen es un array mxnde enteros en el rango [1,p]. El mapa de colores es un array px3 de valores de punto flotante en el rango [0,1].

La imagen es un array mxn de enteros en el rango [1,p-1]. El mapa de colores es un array px3 de valores de punto flotante en el rango [0,1].

De intensidad La imagen es un array mxnde valores de punto flotante que son escalados por MATLAB para producir índices del mapa de colores, típicamente en el rango [0,1].

La imagen es un array mxn de valores de punto flotante que son escalados por MATLAB para producir índices del mapa de colores, típicamente en el rango [0,255] o [0,65535].

Page 7: Procesador de imágenes toolbox Matlab

El mapa de colores es un array px3 de valores de punto flotante en el rango [0,1] y es típicamente en escala de grises.

El mapa de colores es un array mxnx3 de enteros en el rango [0,255] o [0,65535]

RGB (Color verdadero) La imagen es un array mxnx3 de valores de punto flotante en el rango [0,1].

La imagen es un array mxnx3 de enteros en el rango [0,255] o [0,65535].

5. Conversión de tipos de imágenes Para ciertas operaciones, puede resultar de utilidad convertir una imagen a un

tipo diferente. Por ejemplo, si queremos filtrar una imagen de color que está guardada como imagen indexada, deberíamos primero convertirla a formato RGB. Cuando aplicamos el filtro a la imagen RGB, MATLAB filtra los valores de intensidad en la imagen de forma apropiada. Si intentamos filtrar la imagen indexada, MATLAB simplemente aplicará el filtro a los índices de la matriz, y el resultado será carente de significado.

La siguiente tabla muestra las funciones de conversión de imágenes de la Image Processing Toolbox.

Función Propósito dither Crea una imagen binaria de una de escala

de grises; o una indexada a partir de una RGB por el método de dithering.

gray2ind Crea una imagen indexada a partir de una de escala de grises.

grayslice Crea una imagen indexada a partir de una de escala de grises por el método de umbralización.

im2bw Crea una imagen binaria de una de intensidad, o RGB, basado en umbralización de la luminancia.

ind2gray Crea una imagen en escala de grises a partir de una imagen indexada.

ind2rgb Crea una imagen RGB a partir de una imagen indexada.

mat2gray Crea una imagen en escala de grises a partir de datos en una matriz, reescalando los datos.

rgb2gray Crea una imagen en escala de grises a partir de una imagen RGB.

rgb2ind Crea una imagen indexada a partir de una imagen RGB.

También podemos realizar ciertas conversiones simplemente utilizando la

sintaxis de MATLAB. Por ejemplo, podemos convertir una imagen de intensidad a RGB concatenando tres copias de la matriz original a lo largo de su tercera dimensión:

Page 8: Procesador de imágenes toolbox Matlab

RGB=cat(3,I,I,I); La imagen RGB resultante tiene idénticas matrices para los planos rojo, verde y

azul, por tanto la imagen será mostrada en escala de grises.

6. Referencias [1] Manual de ayuda de la Image Processing Toolbox de MATLAB