Main Content

Leer, escribir y consultar archivos de imagen

Trabajar con formatos de imagen

En su forma nativa, una imagen con formato de archivo gráfico no se almacena como una matriz de MATLAB® ni como una matriz necesariamente. La mayoría de los archivos gráficos comienzan con un encabezado que contiene etiquetas de información específicas del formato y continúan con los datos del mapa de bits que se pueden leer como un flujo constante. Por este motivo, no puede utilizar los comandos de E/S estándar de MATLAB load y save para leer y escribir una imagen con formato de archivo gráfico.

Llame a las funciones especiales de MATLAB para leer y escribir los datos de imagen de los formatos de archivo gráfico:

  • Para leer una imagen con formato de archivo gráfico, utilice imread.

  • Para escribir una imagen con formato de archivo gráfico, utilice imwrite.

  • Para obtener información sobre la naturaleza de una imagen con formato de archivo gráfico, utilice imfinfo.

Esta tabla ofrece una idea más clara de qué comandos de MATLAB se deben utilizar con qué tipos de imagen.

Procedimiento

Funciones que se van a utilizar

Cargar o guardar una matriz como un archivo MAT.

load

save

Cargar o guardar imágenes con formato de archivo gráfico, p. ej., BMP o TIFF.

imread

imwrite

Mostrar cualquier imagen cargada en el área de trabajo de MATLAB.

image

imagesc

Utilidades

imfinfo

ind2rgb

Leer una imagen gráfica

La función imread lee una imagen desde cualquier archivo de imagen gráfico compatible en cualquiera de las profundidades en bits compatibles. La mayoría de las imágenes que lee son de 8 bits. Cuando estas se leen en la memoria, se almacenan como clase uint8. La excepción principal a esta regla es la compatibilidad de MATLAB con los datos de 16 bits para imágenes PNG y TIFF; si se lee una imagen PNG o TIFF de 16 bits, se almacena como clase uint16.

Nota

Para las imágenes indexadas, imread siempre lee el mapa de colores en un arreglo de clase double, aunque el arreglo de imágenes en sí puede ser de clase uint8 o uint16.

Los siguientes comandos leen la imagen ngc6543a.jpg en la variable del área de trabajo RGB y, a continuación, muestran la imagen con la función image:

RGB = imread('ngc6543a.jpg');
image(RGB)

Se pueden escribir (guardar) los datos de imágenes con la función imwrite. Las instrucciones

load clown % An image that is included with MATLAB
imwrite(X,map,'clown.bmp')

crean un archivo BMP que contiene la imagen de un payaso.

Escribir una imagen gráfica

Cuando se guarda una imagen con imwrite, el comportamiento predeterminado es reducir automáticamente la profundidad en bits a uint8. Muchas de las imágenes utilizadas en MATLAB son de 8 bits y la mayoría de las imágenes con formatos de archivo gráfico no requiere datos de doble precisión. Una excepción a la regla para guardar los datos de imágenes como uint8 es que las imágenes PNG y TIFF se pueden guardar como uint16. Debido a que estos dos formatos son compatibles con los datos de 16 bits, se puede anular el comportamiento predeterminado de MATLAB especificando uint16 como el tipo de datos para imwrite. El siguiente ejemplo muestra la escritura de un archivo PNG de 16 bits con imwrite.

imwrite(I,'clown.png','BitDepth',16);

Crear un subconjunto con una imagen gráfica (reducir)

A veces, se desea trabajar con solo una parte de un archivo de imagen o descomponerlo en subsecciones. Especifique las coordenadas intrínsecas de la subsección rectangular con la que desee trabajar y guárdela en un archivo desde la línea de comandos. Si desconoce las coordenadas de las esquinas de la subsección, selecciónelas de forma interactiva, como se muestra en el siguiente ejemplo:

% Read RGB image from graphics file. 
im = imread('street2.jpg'); 

% Display image with true aspect ratio
image(im); axis image

% Use ginput to select corner points of a rectangular
% region by pointing and clicking the mouse twice
p = ginput(2); 

% Get the x and y corner coordinates as integers
sp(1) = min(floor(p(1)), floor(p(2))); %xmin
sp(2) = min(floor(p(3)), floor(p(4))); %ymin
sp(3) = max(ceil(p(1)), ceil(p(2)));   %xmax
sp(4) = max(ceil(p(3)), ceil(p(4)));   %ymax

% Index into the original image to create the new image
MM = im(sp(2):sp(4), sp(1): sp(3),:);

% Display the subsetted image with appropriate axis ratio
figure; image(MM); axis image

% Write image to graphics file. 
imwrite(MM,'street2_cropped.tif') 

Si conoce cuáles deberían ser las coordenadas de las esquinas de la imagen, puede definir sp manualmente en el ejemplo precedente en lugar de utilizar ginput.

También se puede mostrar una “caja de gomas elásticas” a medida que se interactúa con la imagen para crear un subconjunto con ella. Consulte el ejemplo de código para rbbox para obtener información detallada. Para obtener más información, consulte la documentación para las funciones ginput y image.

Obtener información acerca de los archivos gráficos

La función imfinfo permite obtener información acerca de los archivos gráficos en cualquiera de los formatos estándar enumerados anteriormente. La información que se obtenga depende del tipo de archivo, pero siempre incluye al menos los siguientes datos:

  • Nombre del archivo, incluida la ruta de la carpeta si el archivo no se encuentra en la carpeta actual

  • Formato de archivo

  • Número de versión del formato de archivo

  • Fecha de modificación del archivo

  • Tamaño del archivo en bytes

  • Ancho de la imagen en píxeles

  • Altura de la imagen en píxeles

  • Número de bits por píxel

  • Tipo de imagen: RGB (de color real), intensidad (escala de grises) o indexada