Está en la página 1de 8

Ingeniería Superior de Informática

Asignatura: Visión Artificial


Curso 2006/07

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
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.
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
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
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:
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 La imagen es un array mxn
de ceros y unos donde el de ceros y unos donde el
flag logical está activado flag logical está activado.
La toolbox no soporta
imágenes binarias uint16.
Indexada La imagen es un array mxn La imagen es un array mxn
de enteros en el rango [1,p]. de enteros en el rango [1,p-
1].
El mapa de colores es un
array px3 de valores de El mapa de colores es un
punto flotante en el rango array px3 de valores de
[0,1]. punto flotante en el rango
[0,1].
De intensidad La imagen es un array mxn La imagen es un array mxn
de valores de punto flotante de valores de punto flotante
que son escalados por que son escalados por
MATLAB para producir MATLAB para producir
índices del mapa de colores, índices del mapa de colores,
típicamente en el rango típicamente en el rango
[0,1]. [0,255] o [0,65535].
El mapa de colores es un El mapa de colores es un
array px3 de valores de array mxnx3 de enteros en
punto flotante en el rango el rango [0,255] o [0,65535]
[0,1] y es típicamente en
escala de grises.
RGB (Color verdadero) La imagen es un array La imagen es un array
mxnx3 de valores de punto mxnx3 de enteros en el
flotante en el rango [0,1]. 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:
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