miércoles, 22 de abril de 2020

Tipos de Imágenes en Matlab


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 (1,1) a (1,2) ... a (1, N)
a (2,1) a (2,2) ... a (2, N)
*        *            *
  a (M,1) a(M,2) ...a (M, N)

 A.     Para determinar el tamaño de la imagen utilizaremos el siguiente comando
size(a);  
B.      Si lo queremos almacenar en una variable.
  [M, N]=size(a);
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).



No hay comentarios.:

Publicar un comentario