Una imagen digital está compuesta de píxeles, los
cuales pueden definirse de alguna manera como pequeños puntos en la pantalla o
imagen. Cada píxel es capaz de proporcionar información visual acerca de una
pequeña región en particular de la imagen. A partir de esto, se puede
considerar a una Imagen Digital, como un arreglo de instrucciones de cómo se
encuentra coloreado cada píxel.
En general se puede decir que una imagen de m x n si
está compuesta de m píxeles en la dirección vertical y n píxeles en la
dirección horizontal. Es decir que tener una imagen de 512 x 1024 píxeles,
significa que la imagen contiene en sí información para 524288 píxeles, los
cuales requiere mucha memoria. Por lo tanto, la compresión de las imágenes es
algo esencial para el procesamiento eficiente de la imagen.
El Clasificar las imágenes
es una tarea que puede realizarse basándose en múltiples criterios, en el caso
que nos ocupa nos interesa exclusivamente la forma en que esta imagen se
encuentra descrita en el ordenador.
En base a esta premisa, podemos distinguir dos
grupos de imágenes digitalizadas: las que están descritas en base a fórmulas
matemáticas que definen su relleno y contorno, llamadas vectoriales y
las que se encuentran descompuestas en píxeles, es decir, pequeños cuadraditos
de color que, al observarse todos en conjunto proporcionan la representación
total de la imagen se denominan imágenes en mapa de bits.
La naturaleza y características particulares de cada
uno de estos dos tipos son profundamente diferentes y están concebidas para
destinos totalmente distintos, por eso es muy importante conocerlas y
comprender la esencia de cada una de ellas para poder utilizarlas
adecuadamente.
Cuando observamos una imagen en la pantalla del
ordenador, ésta siempre se nos representa en mapa de bits independientemente
del tipo de imagen que se trate, pues el monitor muestra todos los contenidos
mediante píxeles, sin embargo, las diferencias resultarán decisivas cuando
recuperemos la imagen en cualquier otro medio de reproducción.
Las imágenes que desean ser procesadas, normalmente se encuentran en la
forma de un archivo, mientras que el trabajo en Matlab se desarrolla con una
imagen vista como una matriz. Estas imágenes una vez procesadas deben ser
guardadas en un formato de imagen que sea compatible con otros programas, tal
como JPEG, TIFF, etc.
La función imread lee imágenes que se encuentren en cualquiera de los formatos
de archivo de gráficos de imágenes, con cualquier profundidad de bit. La
mayoría de las imágenes utiliza 8 bits para guardar los valores del píxel. Cuando
estos son guardados en Matlab se archivan como clase uint8. Para formatos de
archivo que soportan información de 16 bits, PNG y TIFF, por ejemplo, Matlab
guarda las imágenes como clase uint16.
Para imágenes indexadas, imread
siempre lee el mapa de color dentro de una matriz de clase double, aunque el mismo arreglo de la imagen sea clase uint8 o
uint16.
En primer lugar, leeremos la
siguiente imagen
a=imread('Playa.jpg');
Lo que hace para una imagen en blanco y negro,
es crear una matriz a, donde cada elemento tendrá un valor de nivel de gris:
|
a (2,1) a (2,2) ... a (2, N)
*
* *
a (M,1)
a(M,2) ...a (M, N)
size(a);
B.
Si lo
queremos almacenar en una variable.
C.
Así mismo existe otro comando para dicha
imagen el cual nos muestra información más detallada de esta.
whos (a)
Name
|
Size
|
Byte
|
Class
|
Attributes
|
a
|
425x591
|
251175
|
uint8
|
|
Para mostrar la imagen 1 se aplica el comando
imshow(a);
Imshow (a,b) donde a es
la imagen a mostrar y b es el número de niveles de intensidad a mostrar. Si a
se omite, se usa 256 y se muestra la imagen 2.
La sintaxis es
imshow(b,[low high])
imshow(a)
Esto lo que hace es
expandir el rango dinámico de la imagen, pone como límite inferior, el valor
mínimo de intensidad de la imagen y como límite superior su valor máximo como
se muestra.
imshow(f,[0 123])
Matlab usualmente cuando
dibuja una nueva figura, sobrescribe la ventana de la figura anteriormente
mostrada.
Para mostrar la imagen 3 en una ventana
independiente, ejecutamos el siguiente comando:
figure, imshow(f)
Donde
f es la matriz que almacena la imagen y Playa es el nombre de fichero donde
vamos a guardar la imagen. filename tiene que tener una extensión que reconozca
Matlab.
imfinfo Playa.jpg
ans = Filename: [1x42 char]
FileModDate: [1x20 char]
FileSize: 64422
Format: 'jpg'
FormatVersion: ''
Width: 591
Height: 425
BitDepth: 8
ColorType: 'grayscale'
FormatSignature: ''
NumberOfSamples: 1
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
·
Doublé Doble precisión, números en punto flotante que
varían en un rango aproximado de -10 a 10 (8 bytes por elemento)
·
Uint8 Enteros de 8 bits en el rango de [0,255] (1
byte por elemento)
·
Uint16 Enteros de 16 bits en el rango de [0, 65535] (2
bytes por elemento)
·
Uint32 Enteros de 32 bits en el rango de [0,
4294967295] (4 bytes por elemento)
·
Int8 Enteros de 8 bits en el rango de [-128, 127] (1
byte por elemento)
·
Int16 Enteros de 16 bits en el rango de [-32768,
32767] (2 bytes por elemento)
·
Int32 Enteros de 32 bits en el rango de
[-2147483648,2147483647] (4 bytes por elemento)
·
Single Número en punto flotante de precisión simple,
con valores aproximadamente en el rango de -10 a 10 (4 bytes por
elemento)
·
Char Caracteres (2 byte por elemento)
·
Logica Los valores son 0 ó 1 (1 byte por elemento)
Imágenes
de intensidad: Una matriz
cuyos valores han sido escalados para representar intensidad. Pueden ser uint8 o
uint16. Si son double, los valores están escalados entre [0, 1]
Imágenes
binarias: Imágenes que
solamente tienen valor 0 o 1. Se representan en Matlab a partir de arrays
lógicos. Para convertir en Matlab una Matriz (array) de 0's y 1's en array
lógico:
B =
logical(A) Para comprobar si un array es lógico:
isLogical(A)
devuelve
un 1 si es lógica y un 0 si no lo es.
Imágenes
indexadas: En una imagen indexada, sólo se usa un conjunto limitado de colores
discretos, generalmente 256 o menos. Estos colores forman un “mapa de
colores” de la imagen, y a cada punto en la imagen se le asigna un color
de este mapa de colores. Las imágenes indexadas tienen la ventaja de poder ser
representadas dentro de un ordenador consumiendo relativamente poca memoria
Imágenes RGB: En este modelo, cada
color se representa como 3 valores de R, G y B, que indica las cantidades de
rojo, verde y azul que componen el color.
A) Convirtiendo tipos y clases de imágenes
B) Las Matrices en Matlab
Como antes comentábamos, una de las características de Matlab es que esta
especialmente diseñado para trabajar con variables vectoriales y matriciales.
Podemos hacer esta asignación
a= [2 3 0
1];
Sin haberle indicado
previamente al programa que a no es una variable escalar (es decir, una
variable en la que almacenamos un solo número) sino una variable vectorial. De hecho,
en MATLAB no hay propiamente variables numéricos escalares ni vectoriales, sino
matriciales (arrays)
En Matlab una imagen a escala de grises es
representada por medio de una matriz bidimensional de m x n elementos en donde
n representa el número de píxeles de ancho y m el número de píxeles de largo.
El elemento v11 corresponde al elemento de la esquina superior izquierda donde
cada elemento de la matriz de la imagen tiene un valor de 0 (negro) a 255
(blanco).