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.
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