Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Exportar a imágenes

Para exportar datos del espacio de trabajo de MATLAB® usando uno de los formatos de archivo de gráficas 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.

El siguiente ejemplo escribe un arreglo multidimensional de datos uint8 I del espacio 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.

whos I
  Name      Size                           Bytes  Class

  I       650x600x3                      1170000  uint8 array

Grand total is 1170000 elements using 1170000 bytes
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; consulte Exportar datos de imagen y metadatos a archivos TIFF para obtener más información.

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.

Las siguientes secciones proporcionan ejemplos paso a paso del uso de 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 nuevo archivo TIFF

  1. Cree datos de imagen. Este ejemplo lee datos de imagen de un archivo JPEG incluido con MATLAB:

    imgdata = imread('ngc6543a.jpg');
  2. 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.

  3. Establezca las etiquetas de TIFF requeridas usando el método setTag del objeto Tiff. Estas etiquetas requeridas 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. El ejemplo crea una estructura que contiene nombres y valores de etiquetas y los transfiere 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.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
    tagstruct.Software = 'MATLAB';
    tagstruct % display tagstruct
    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 propiedades. Este ejemplo usa la propiedad PlanarConfiguration del objeto Tiff para especificar el valor correcto de la configuración chunky: Tiff.PlanarConfiguration.Chunky.

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

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

    close(t);
    
  6. 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'));

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.

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

    t = Tiff('myfile.tif','r+');
  2. 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.

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

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

    close(t);
    
  5. 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)

    Tenga en cuenta la tira negra que hay en medio de la imagen.

Modificar los metadatos de archivos TIFF (etiquetas)

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

    t = Tiff('myfile.tif','r+');
  2. Verifique que el archivo no contenga la etiqueta Artist utilizando el método getTag. Este código debe emitir un mensaje de error que indica que no se ha podido recuperar la etiqueta.

    artist_value = getTag(t,'Artist');
  3. Añada la etiqueta Artist usando el método setTag.

    setTag(t,'Artist','Pablo Picasso');
  4. 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);
  5. Cierre la conexión con el archivo cerrando el objeto Tiff.

    close(t);
    
  6. 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

  1. Cree datos de imagen. Este ejemplo lee datos de imagen de un archivo JPEG incluido con MATLAB. El ejemplo crea dos versiones de resolución reducida (miniaturas) de los datos de imagen.

    imgdata = imread('ngc6543a.jpg');
    %
    % Reduce number of pixels by a half.
    img_half = imgdata(1:2:end,1:2:end,:);
    %
    % Reduce number of pixels by a third.
    img_third = imgdata(1:3:end,1:3:end,:);
  2. Cree un nuevo archivo TIFF construyendo un objeto Tiff y 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');
  3. Establezca las etiquetas de TIFF requeridas usando el método setTag del objeto Tiff. Estas etiquetas requeridas 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, utilice las etiquetas TileWidth y TileLength. El ejemplo crea una estructura que contiene nombres y valores de etiquetas y los transfiere 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.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
    tagstruct.Software = 'MATLAB';
    tagstruct.SubIFD = 2 ;  % required to create subdirectories
    tagstruct  % display tagstruct
    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 propiedades. Este ejemplo usa la propiedad PlanarConfiguration del objeto Tiff para especificar el valor correcto de la configuración chunky: Tiff.PlanarConfiguration.Chunky.

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

    write(t,imgdata);
    
  5. 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);
    
  6. Establezca las etiquetas requeridas, 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.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
    tagstruct2.Software = 'MATLAB';
    tagstruct2  % display tagstruct2
    setTag(t,tagstruct2)
  7. Escriba los datos y metadatos de la imagen en el subdirectorio usando el método write del objeto Tiff.

    write(t,img_half);
    
  8. 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);
    
  9. Establezca las etiquetas requeridas, de la misma forma que lo haría en cualquier directorio. Según la API de LibTIFF, un subdirectorio no puede contener una etiqueta SubIFD.

    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.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;
    tagstruct3.Software = 'MATLAB';
    tagstruct3  % display tagstruct3
    setTag(t,tagstruct3)
  10. Escriba los datos y metadatos de la imagen en el subdirectorio usando el método write del objeto Tiff:

    write(t,img_third);
    
  11. Cierre la conexión con el archivo cerrando el objeto Tiff:

    close(t);
    

Establecer valores de etiquetas

La siguiente 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
Artistchar1xN  
BitsPerSampledouble1x11,8,16,32,64Consulte la Tabla 2
ColorMapdouble256x3Los valores deben normalizarse entre 0 y 1. Se almacenan internamente como valores uint16.Photometric debe ser Palette
Compressiondouble1x1None: 1
CCITTRLE: 2
CCITTFax3: 3
CCITTFax4: 4
LZW: 5
JPEG: 7
CCITTRLEW: 32771
PackBits: 32773
Deflate: 32946
AdobeDeflate: 8
Consulte la Tabla 3.
Copyrightchar 1xN  
DateTimechar1x19El valor de retorno se rellena a 19 caracteres si es necesario. 
DocumentNamechar1xN  
DotRangedouble1x2 Photometric debe ser Separated
ExtraSamplesdouble1xNUnspecified: 0
AssociatedAlpha: 1
UnassociatedAlpha: 2
Consulte la Tabla 4.
FillOrderdouble1x1  
GeoAsciiParamsTagchar1xN  
GeoDoubleParamsTagdouble1xN  
GeoKeyDirectoryTagdoubleNx4  
Group3Optionsdouble1x1 Compression debe ser CCITTFax3
Group4Optionsdouble1x1 Compression debe ser CCITTFax4
HalfToneHintsdouble1x2  
HostComputerchar1xn  
ICCProfileuint81xn  
ImageDescriptionchar1xn  
ImageLengthdouble1x1  
ImageWidthdouble1x1  
InkNameschar cell array1x
NumInks
 Photometric debe ser Separated
InkSetdouble 1x1CMYK: 1
MultiInk: 2
Photometric debe ser Separated
JPEGQualitydouble1x1Un valor entre 1 y 100 
Makechar 1xn  
MaxSampleValuedouble1x10–65,535 
MinSampleValuedouble1x10–65,535 
Modelchar1xN  
ModelPixelScaleTagdouble1x3  
ModelTiepointTagdoubleNx6  
ModelTransformationMatrixTagdouble1x16  
NumberOfInksdouble1x1 Debe ser igual a SamplesPerPixel
Orientationdouble1x1TopLeft: 1
TopRight: 2
BottomRight: 3
BottomLeft: 4
LeftTop: 5
RightTop: 6
RightBottom: 7
LeftBottom: 8
 
PageNamechar1xN  
PageNumberdouble1x2  
Photometricdouble1x1MinIsWhite: 0
MinIsBlack: 1
RGB: 2
Palette: 3
Mask: 4
Separated: 5
YCbCr: 6
CIELab: 8
ICCLab: 9
ITULab: 10
Consulte la Tabla 2.
Photoshopuint8 1xN  
PlanarConfigurationdouble1x1Chunky: 1
Separate: 2
 
PrimaryChromaticitiesdouble1x6  
ReferenceBlackWhitedouble1x6  
ResolutionUnitdouble 1x1  
RICHTIFFIPTCuint81xN  
RowsPerStripdouble1x1  
RPCCoefficientTagdouble1x92Vector fila de 92 elementosConsulte la Tabla 6
SampleFormatdouble1x1Uint: 1
Int: 2
IEEEFP: 3
Consulte la Tabla 2
SamplesPerPixeldouble1x1  
SMaxSampleValuedouble1x1Rango de tipo de datos de MATLAB especificado para los datos de imagen  
SMinSampleValuedouble1x1Rango de tipo de datos de MATLAB especificado para los datos de imagen  
Softwarechar1xN  
StripByteCountsdouble1xN Solo lectura
StripOffsetsdouble1xN Solo lectura
SubFileTypedouble1x1Default : 0
ReducedImage: 1
Page: 2
Mask: 4
 
SubIFDdouble1x1  
TargetPrinterchar1xN  
Thresholdingdouble1x1BiLevel: 1
HalfTone: 2
ErrorDiffuse: 3

Photometric puede ser: MinIsWhite MinIsBlack

TileByteCountsdouble1xN Solo lectura
TileLengthdouble1x1Debe ser un múltiplo de 16 
TileOffsetsdouble1xN Solo lectura
TileWidthdouble1x1Debe ser un múltiplo de 16 
TransferFunctiondoubleConsulte la nota1Cada valor debe estar dentro de 0–2^16-1SamplePerPixel puede ser 1 o 3
WhitePointdouble1x2 Photometric puede ser: RGB
Palette
YCbCr
CIELab
ICCLab
ITULab
XMPchar1xn N>5
XPostiondouble1x1  
XResolutiondouble1x1  
YCbCrCoefficentsdouble1x3 Photometric debe ser YCbCr
YCbCrPositioningdouble1x1Centered: 1
Cosited: 2
Photometric debe ser YCbCr
YCbCrSubSamplingdouble1x2 Photometric debe ser YCbCr
YPositiondouble1x1  
YResolutiondouble1x1  
ZipQualitydouble1x1Valor entre 1 y 9 

1El tamaño es 1x2^BitsPerSample o 3x2^BitsPerSample.

Tabla 2: Valores válidos de SampleFormat para los ajustes de BitsPerSample

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

Tabla 3: Valores válidos de SampleFormat para BitsPerSample y combinaciones fotométricas

 Valores de BitsPerSample
Valores fotométricos18163264
MinIsWhite UintUint/IntUint
Int
Uint
Int
IEEEFP
IEEEFP
MinIsBlack UintUint/IntUint
Int
Uint
Int
IEEEFP
IEEEFP
RGB  UintUintUint
IEEEFP
IEEEFP
Pallette UintUint  
Mask Uint    
Separated  UintUintUint
IEEEFP
IEEEFP
YCbCr  UintUintUint
IEEEFP
IEEEFP
CIELab  UintUint  
ICCLab  UintUint  
ITULab  UintUint  

Tabla 4: Valores válidos de SampleFormat para BitsPerSample y combinaciones de compresión

 Valores de BitsPerSample
Valores de compresión18163264
NoneUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
CCITTRLEUint    
CCITTFax3Uint    
CCITTFax4Uint    
LZWUintUint
Int
Uint
Int
Uint
Int
IEEEFP
IEEEFP
JPEG Uint
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 válidos de SamplesPerPixel para los ajustes fotométricos

Valores fotométricosSamplesPerPixel1
MinIsWhite 1+
MinIsBlack 1+
RGB 3+
Pallette1
Mask 1
Separated 1+
YCbCr 3
CIELab 3+
ICCLab 3+
ITULab 3+

Tabla 6: Lista de 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 ecuación polinomial racional 2 
33 a 52Coeficientes del denominador de la ecuación polinomial racional r(n) 
53 a 72Coeficientes del numerador de c(n), una ecuación polinomial racional 2 
73 a 92Coeficientes del denominador de la ecuación polinomial racional c(n) 

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

2Las ecuaciones 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

Sitios web externos