Contenido principal

Exportar a imágenes

Para exportar datos del espacio de trabajo de MATLAB® usando uno de los formatos de archivo gráfico estándar, use la función imwrite. Con esta función, puede exportar datos en formatos como Tagged Image File Format (TIFF), Joint Photographic Experts Group (JPEG) y Portable Network Graphics (PNG). Para obtener una lista completa de los formatos admitidos, consulte la página de referencia de imwrite.

Por ejemplo, escriba un arreglo multidimensional de datos uint8 I del área de trabajo de MATLAB en un archivo con formato TIFF. La clase de la imagen de salida escrita en el archivo depende del formato especificado. Para la mayoría de formatos, si el arreglo de entrada es de clase uint8, imwrite genera los datos como valores de 8 bits. Consulte la página de referencia de imwrite para obtener información.

I = imread("ngc6543a.jpg");
whos I
  Name        Size                 Bytes  Class    Attributes

  I         650x600x3            1170000  uint8              
imwrite(I,"my_graphics_file.tif","tif")

Nota

imwrite admite diferentes sintaxis para varios formatos estándar. Por ejemplo, con el formato de archivo TIFF, puede especificar el tipo de compresión que MATLAB usa para almacenar la imagen. Consulte la página de referencia de imwrite para obtener información.

Para tener un mayor control sobre la escritura de datos en un archivo TIFF, utilice el objeto Tiff. Para obtener más información, consulte Exportar datos de imagen y metadatos a archivos TIFF.

Exportar datos de imagen y metadatos a archivos TIFF

Aunque puede usar imwrite para exportar datos de imagen y metadatos (etiquetas) a archivos Tagged Image File Format (TIFF), la función tiene algunas limitaciones. Por ejemplo, cuando desee modificar datos de imagen o metadatos en el archivo, debe escribir todos los datos en el archivo. No puede escribir solo la parte actualizada. Con el objeto Tiff, puede escribir partes de los datos de imagen y modificar o añadir etiquetas individuales a un archivo TIFF. Al crear un objeto Tiff, este representa la conexión con un archivo TIFF y proporciona acceso a muchas de las rutinas de la biblioteca LibTIFF.

Estos ejemplos proporcionan demostraciones paso a paso de cómo usar métodos y propiedades del objeto Tiff para realizar algunas tareas comunes con archivos TIFF. Para aprovechar el objeto Tiff al máximo, debe estar familiarizado con la especificación TIFF y las notas técnicas. Consulte esta documentación en LibTIFF - TIFF Library and Utilities .

Crear un archivo TIFF

Cree datos de imagen.

imgdata = imread("ngc6543a.jpg");

Cree un nuevo archivo TIFF construyendo un objeto Tiff, especificando el nombre del nuevo archivo como argumento. Para crear un archivo, debe especificar el modo escritura ("w") o el modo añadir ("a").

t = Tiff("myfile.tif","w");

Cuando cree un nuevo archivo TIFF, el constructor de Tiff crea una archivo que contiene un directorio de archivos de imagen (IFD). Un archivo TIFF usa este IFD para organizar todos los datos y metadatos asociados a una imagen concreta. Un archivo TIFF puede contener varios IFD. El objeto Tiff hace que el IFD que crea sea el IFD actual. Los métodos del objeto Tiff funcionan con el IFD actual. Puede navegar entre los IFD de un archivo TIFF y especificar qué IFD es el IFD actual usando los métodos del objeto Tiff.

Establezca las etiquetas de TIFF usando el método setTag del objeto Tiff. Estas etiquetas incluyen las etiquetas requeridas y las etiquetas opcionales, y especifican información sobre la imagen, como su largo y ancho. Para dividir los datos de la imagen en tiras, especifique un valor para la etiqueta RowsPerStrip; para dividir los datos de la imagen en mosaicos, especifique valores para las etiquetas TileWidth y TileLength. Este ejemplo crea una estructura que contiene nombres y valores de etiquetas y los pasa a setTag. También puede establecer cada etiqueta individualmente.

tagstruct.ImageLength = size(imgdata,1);
tagstruct.ImageWidth = size(imgdata,2);
tagstruct.Photometric = Tiff.Photometric.RGB;
tagstruct.BitsPerSample = 8;
tagstruct.SamplesPerPixel = 3;
tagstruct.RowsPerStrip = 16;
tagstruct.Software = "MATLAB";
tagstruct % display tagstruct
tagstruct = struct with fields:
        ImageLength: 650
         ImageWidth: 600
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"

setTag(t,tagstruct)

Para obtener información sobre las etiquetas TIFF compatibles y cómo establecer sus valores, consulte Establecer valores de etiquetas. Por ejemplo, el objeto Tiff admite propiedades que puede usar para establecer los valores de ciertas etiquetas. Este ejemplo usa la propiedad Photometric del objeto Tiff para especificar el valor correcto de la configuración RGB: Tiff.Photometric.RGB.

Escriba los datos y metadatos de la imagen en el directorio actual usando el método write del objeto Tiff.

write(t,imgdata)

Si desea poner varias imágenes en el archivo, llame al método writeDirectory justo después de realizar esta operación de escritura. El método writeDirectory configura un nuevo directorio de archivos de imagen en el archivo y convierte este nuevo directorio en el directorio actual.

Cierre la conexión con el archivo cerrando el objeto Tiff.

close(t)

Compruebe que ha creado un archivo TIFF válido usando la función imread para leer el archivo y, después, muestre la imagen.

imagesc(imread("myfile.tif"))

Figure contains an axes object. The axes object contains an object of type image.

Escribir una tira o un mosaico de datos de imagen

Nota: Solo puede modificar una tira o un mosaico de datos de imagen si los datos no están comprimidos.

Abra un archivo TIFF existente para modificarlo creando un objeto Tiff. Este ejemplo usa el archivo creado en Crear un archivo TIFF. El constructor de Tiff devuelve un identificador a un objeto Tiff.

t = Tiff("myfile.tif","r+");

Genere algunos datos para escribir en una tira en la imagen. Este ejemplo crea un arreglo tridimensional de ceros del tamaño de una tira. El código usa el número de filas en una tira, el ancho de la imagen y el número de muestras por píxel como dimensiones. El arreglo es un arreglo de valores uint8.

width = getTag(t,"ImageWidth");
height = getTag(t,"RowsPerStrip");
numSamples = getTag(t,"SamplesPerPixel");
stripData = zeros(height,width,numSamples,"uint8");

Si los datos de imagen tuvieran un diseño en mosaico, usaría las etiquetas TileWidth y TileLength para especificar las dimensiones.

Escriba los datos en una tira en el archivo usando el método writeEncodedStrip. Especifique el número de índice que identifica la tira que desea modificar. En el ejemplo se elige la tira 18 porque es más fácil ver el cambio en la imagen.

writeEncodedStrip(t,18,stripData)

Si la imagen tuviera un diseño en mosaico, usaría el método writeEncodedTile para modificar el mosaico.

Cierre la conexión con el archivo cerrando el objeto Tiff.

close(t)

Pruebe que ha modificado una tira de la imagen en el archivo TIFF usando la función imread para leer el archivo y después muestre la imagen.

modified_imgdata = imread("myfile.tif");
imagesc(modified_imgdata)

Figure contains an axes object. The axes object contains an object of type image.

Observe la tira negra que hay en medio de la imagen.

Modificar metadatos de archivos TIFF (etiquetas)

Abra un archivo TIFF existente para modificarlo creando un objeto Tiff. Este ejemplo usa el archivo creado en Crear un archivo TIFF. El constructor de Tiff devuelve un identificador a un objeto Tiff.

t = Tiff("myfile.tif","r+");

El archivo no contiene actualmente la etiqueta Artist. Si ejecuta getTag(t,"Artist"), verá un error. Añada la etiqueta Artist usando el método setTag.

setTag(t,"Artist","Pablo Picasso")

Escriba los nuevos datos de etiqueta en el archivo TIFF usando el método rewriteDirectory. Use el método rewriteDirectory al modificar los metadatos existentes en un archivo o al añadir nuevos metadatos a un archivo.

rewriteDirectory(t)

Cierre la conexión con el archivo cerrando el objeto Tiff.

close(t)

Compruebe lo que ha hecho volviendo a abrir el archivo TIFF y obteniendo el valor de la etiqueta Artist utilizando el método getTag.

t = Tiff("myfile.tif","r");
getTag(t,"Artist")
ans = 
'Pablo Picasso'
close(t)

Crear subdirectorios de archivos TIFF

Este ejemplo lee datos de imagen de un archivo JPEG y, después, crea dos versiones de resolución reducida (miniaturas) de los datos de imagen.

Cree datos de imagen.

imgdata = imread("ngc6543a.jpg");
%
% Reduce number of pixels by one half.
img_half = imgdata(1:2:end,1:2:end,:);
%
% Reduce number of pixels by two thirds.
img_third = imgdata(1:3:end,1:3:end,:);

Cree un nuevo archivo TIFF construyendo un objeto Tiff, especificando el nombre del nuevo archivo como argumento. Para crear un archivo, debe especificar el modo escritura ("w") o el modo añadir ("a"). El constructor de Tiff devuelve un identificador a un objeto Tiff.

t = Tiff("my_subimage_file.tif","w");

Establezca las etiquetas de TIFF usando el método setTag del objeto Tiff. Estas etiquetas incluyen las etiquetas requeridas y las etiquetas opcionales, y especifican información sobre la imagen, como su largo y ancho. Para dividir los datos de la imagen en tiras, especifique un valor para la etiqueta RowsPerStrip; para dividir los datos de la imagen en mosaicos, especifique valores para las etiquetas TileWidth y TileLength. Este ejemplo crea una estructura que contiene nombres y valores de etiquetas y los pasa a setTag. También puede establecer cada etiqueta individualmente.

Para crear subdirectorios, debe establecer la etiqueta SubIFD, especificando el número de subdirectorios que desea crear. Tenga en cuenta que el número que especifique no es el valor de la etiqueta SubIFD. El número indica al software de Tiff que cree un SubIFD que dirija a dos subdirectorios. El valor real de la etiqueta SubIFD serán los desplazamientos de bytes de los dos subdirectorios.

tagstruct.ImageLength = size(imgdata,1);
tagstruct.ImageWidth = size(imgdata,2);
tagstruct.Photometric = Tiff.Photometric.RGB;
tagstruct.BitsPerSample = 8;
tagstruct.SamplesPerPixel = 3;
tagstruct.RowsPerStrip = 16;
tagstruct.Software = "MATLAB";
tagstruct.SubIFD = 2; % required to create subdirectories
tagstruct % display tagstruct
tagstruct = struct with fields:
        ImageLength: 650
         ImageWidth: 600
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"
             SubIFD: 2

setTag(t,tagstruct)

Para obtener información sobre las etiquetas TIFF compatibles y cómo establecer sus valores, consulte Establecer valores de etiquetas. Por ejemplo, el objeto Tiff admite propiedades que puede usar para establecer los valores de ciertas etiquetas. Este ejemplo usa la propiedad Photometric del objeto Tiff para especificar el valor correcto de la configuración RGB: Tiff.Photometric.RGB.

Escriba los datos y metadatos de la imagen en el directorio actual usando el método write del objeto Tiff.

write(t,imgdata)

Configure el primer subdirectorio llamando al método writeDirectory. El método writeDirectory configura el subdirectorio y convierte el nuevo directorio en el directorio actual. Como ha especificado que desea crear dos subdirectorios, writeDirectory configura un subdirectorio.

writeDirectory(t)

Establezca etiquetas, de la misma forma en que lo hizo en el directorio normal. Según la API de LibTIFF, un subdirectorio no puede contener una etiqueta SubIFD.

tagstruct2.ImageLength = size(img_half,1);
tagstruct2.ImageWidth = size(img_half,2);
tagstruct2.Photometric = Tiff.Photometric.RGB;
tagstruct2.BitsPerSample = 8;
tagstruct2.SamplesPerPixel = 3;
tagstruct2.RowsPerStrip = 16;
tagstruct2.Software = "MATLAB";
tagstruct2 % display tagstruct2
tagstruct2 = struct with fields:
        ImageLength: 325
         ImageWidth: 300
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"

setTag(t,tagstruct2)

Escriba los datos y metadatos de la imagen en el subdirectorio usando el método write del objeto Tiff.

write(t,img_half)

Configure el segundo subdirectorio llamando al método writeDirectory. El método writeDirectory configura el subdirectorio y lo convierte en el directorio actual.

writeDirectory(t)

Establezca etiquetas, de la misma forma que lo haría en cualquier directorio.

tagstruct3.ImageLength = size(img_third,1);
tagstruct3.ImageWidth = size(img_third,2);
tagstruct3.Photometric = Tiff.Photometric.RGB;
tagstruct3.BitsPerSample = 8;
tagstruct3.SamplesPerPixel = 3;
tagstruct3.RowsPerStrip = 16;
tagstruct3.Software = "MATLAB";
tagstruct3 % display tagstruct3
tagstruct3 = struct with fields:
        ImageLength: 217
         ImageWidth: 200
        Photometric: 2
      BitsPerSample: 8
    SamplesPerPixel: 3
       RowsPerStrip: 16
           Software: "MATLAB"

setTag(t,tagstruct3)

Escriba los datos y metadatos de la imagen en el subdirectorio usando el método write del objeto Tiff.

write(t,img_third)

Cierre la conexión con el archivo cerrando el objeto Tiff.

close(t)

Establecer valores de etiquetas

Esta tabla enumera todas las etiquetas TIFF que admite el objeto Tiff e incluye información sobre su tamaño y clase de MATLAB. En ciertas etiquetas, la tabla también indica el conjunto de valores que admite el objeto Tiff, que es un subconjunto de todos los valores posibles definidos por la especificación TIFF. Puede usar la estructura de propiedades Tiff para especificar los valores admitidos en estas etiquetas. Por ejemplo, use Tiff.Compression.JPEG para especificar la compresión JPEG. Consulte la página de referencia de Tiff para obtener una lista completa de propiedades.

Tabla 1: Etiquetas de TIFF admitidas

Etiqueta de TIFFClaseTamañoValores admitidosNotas
Artistchar1 por N
BitsPerSampledouble1 por 11, 8, 16, 32, 64Consulte la Tabla 2 y la Tabla 3.
ColorMapdouble256 por 3Los valores deben normalizarse en el intervalo [0, 1]. Se almacenan internamente como valores uint16.Photometric debe ser Palette.
Compressiondouble1 por 1None: 1
CCITTRLE: 2
CCITTFax3: 3
CCITTFax4: 4
LZW: 5
JPEG: 7
CCITTRLEW: 32771
PackBits: 32773
Deflate: 32946
AdobeDeflate: 8
Consulte la Tabla 4.
Copyrightchar 1 por N
DateTimechar1 por 19El valor de retorno se rellena a 19 caracteres si es necesario.
DocumentNamechar1 por N
DotRangedouble1 por 2Photometric debe ser Separated.
ExtraSamplesdouble1 por NUnspecified: 0
AssociatedAlpha: 1
UnassociatedAlpha: 2
FillOrderdouble1 por 1
GeoAsciiParamsTagchar1 por N
GeoDoubleParamsTagdouble1 por N
GeoKeyDirectoryTagdoubleN por 4
Group3Optionsdouble1 por 1Compression debe ser CCITTFax3.
Group4Optionsdouble1 por 1Compression debe ser CCITTFax4.
HalfToneHintsdouble1 por 2
HostComputerchar1 por N
ICCProfileuint81 por N
ImageDescriptionchar1 por N
ImageLengthdouble1 por 1
ImageWidthdouble1 por 1
InkNameschar cell array1 por NumInksPhotometric debe ser Separated.
InkSetdouble 1 por 1CMYK: 1
MultiInk: 2
Photometric debe ser Separated.
JPEGQualitydouble1 por 1Un valor en el intervalo [1, 100]
Makechar 1 por N
MaxSampleValuedouble1 por 1Un valor en el intervalo [0, 216-1]
MinSampleValuedouble1 por 1Un valor en el intervalo [0, 216-1]
Modelchar1 por N
ModelPixelScaleTagdouble1 por 3
ModelTiepointTagdoubleN por 6
ModelTransformationMatrixTagdouble1 por 16
NumberOfInksdouble1 por 1NumberOfInks debe ser igual a SamplesPerPixel.
Orientationdouble1 por 1TopLeft: 1
TopRight: 2
BottomRight: 3
BottomLeft: 4
LeftTop: 5
RightTop: 6
RightBottom: 7
LeftBottom: 8
PageNamechar1 por N
PageNumberdouble1 por 2
Photometricdouble1 por 1MinIsWhite: 0
MinIsBlack: 1
RGB: 2
Palette: 3
Mask: 4
Separated: 5
YCbCr: 6
CIELab: 8
ICCLab: 9
ITULab: 10
Consulte la Tabla 3.
Photoshopuint8 1 por N
PlanarConfigurationdouble1 por 1Chunky: 1
Separate: 2
PrimaryChromaticitiesdouble1 por 6
ReferenceBlackWhitedouble1 por 6
ResolutionUnitdouble 1 por 1
RICHTIFFIPTCuint81 por N
RowsPerStripdouble1 por 1
RPCCoefficientTagdouble1 por 92Consulte la Tabla 6.
SampleFormatdouble1 por 1Uint: 1
Int: 2
IEEEFP: 3
Consulte la Tabla 2.
SamplesPerPixeldouble1 por 1
SMaxSampleValuedouble1 por 1Rango de tipo de datos de MATLAB especificado para los datos de imagen
SMinSampleValuedouble1 por 1Rango de tipo de datos de MATLAB especificado para los datos de imagen
Softwarechar1 por N
StripByteCountsdouble1 por NSolo lectura
StripOffsetsdouble1 por NSolo lectura
SubFileTypedouble1 por 1Default : 0
ReducedImage: 1
Page: 2
Mask: 4
SubIFDdouble1 por 1
TargetPrinterchar1 por N
Thresholdingdouble1 por 1BiLevel: 1
HalfTone: 2
ErrorDiffuse: 3
Photometric debe ser MinIsWhite o MinIsBlack.
TileByteCountsdouble1 por NSolo lectura
TileLengthdouble1 por 1Debe ser un múltiplo de 16
TileOffsetsdouble1 por NSolo lectura
TileWidthdouble1 por 1Debe ser un múltiplo de 16
TransferFunctiondoubleConsulte la nota1Debe estar en el intervalo [0, 216-1]SamplesPerPixel debe ser 1 o 3.
WhitePointdouble1 por 2Photometric debe ser RGB, Palette, YCbCr, CIELab, ICCLab o ITULab.
XMPchar1 por NN > 5
XPostiondouble1 por 1
XResolutiondouble1 por 1
YCbCrCoefficientsdouble1 por 3Photometric debe ser YCbCr.
YCbCrPositioningdouble1 por 1Centered: 1
Cosited: 2
Photometric debe ser YCbCr.
YCbCrSubSamplingdouble1 por 2Photometric debe ser YCbCr.
YPositiondouble1 por 1
YResolutiondouble1 por 1
ZipQualitydouble1 por 1Debe estar en el intervalo [0, 9]

1 El tamaño es 1 por 2BitsPerSample o 3 por 2BitsPerSample.

Tabla 2: Valores de SampleFormat válidos para la configuración de BitsPerSample

BitsPerSampleSampleFormatTipo de datos de MATLAB
1Uintlogical
8Uint, Intuint8, int8
16Uint, Intuint16, int16
32Uint, Int, IEEEFPuint32, int32, single
64IEEEFPdouble

Tabla 3: Valores de SampleFormat válidos para las combinaciones de BitsPerSample y Photometric

Valores PhotometricValores BitsPerSample
18163264
MinIsWhite UintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
MinIsBlack UintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
RGB UintUintUint
IEEEFP
IEEEFP
PaletteUintUint
Mask Uint
Separated UintUintUint
IEEEFP
IEEEFP
YCbCr UintUintUint
IEEEFP
IEEEFP
CIELab UintUint
ICCLab UintUint
ITULab UintUint

Tabla 4: Valores de SampleFormat válidos para las combinaciones de BitsPerSample y Compression

Valores CompressionValores BitsPerSample
18163264
NoneUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
CCITTRLEUint
CCITTFax3Uint
CCITTFax4Uint
LZWUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
JPEGUint
Int
CCITTRLEWUint
PackBitsUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
DeflateUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
AdobeDeflateUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP

Tabla 5: Valores de SamplesPerPixel válidos para la configuración de Photometric

Valores PhotometricSamplesPerPixel
MinIsWhite 1+
MinIsBlack 1+
RGB 3+
Palette1
Mask 1
Separated 1+
YCbCr 3
CIELab 3+
ICCLab 3+
ITULab 3+

Tabla 6: Lista de las descripciones de valores de RPCCoefficientTag

Valor de índice en el vector de 92 elementosDescripciones de valores1Unidades
1Error de sesgo de raíz cuadrática de la mediametros por eje horizontal
2Error aleatorio de raíz cuadrática de la mediametros por eje horizontal
3Desviación de líneapíxeles
4Desviación de muestrapíxeles
5Desviación de latitud geodésicagrados
6Desviación de longitud geodésicagrados
7Desviación de altura geodésicametros
8Factor de escala de líneapíxeles
9Factor de escala de muestrapíxeles
10Escala de latitud geodésicagrados
11Escala de longitud geodésicagrados
12Factor de escala de altura geodésicametros
13 a 32Coeficientes del numerador de r(n), una expresión polinómica racional2
33 a 52Coeficientes del denominador de la expresión polinómica racional r(n)
53 a 72Coeficientes del numerador de c(n), una expresión polinómica racional2
73 a 92Coeficientes del denominador de la expresión polinómica racional c(n)

1Para especificar los valores en este vector usando el objeto RPCCoefficientTag, consulte RPCCoefficientTag (Mapping Toolbox) en Mapping Toolbox™.

2Los polinomios r(n) y c(n) representan los valores normalizados de fila y columna de un modelo genérico de proyección rigurosa.

Consulte también

Temas