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 desde el espacio de trabajo MATLAB® utilizando uno de los formatos de archivo de gráficos estándar, utilice la función imwrite . Con esta función, puede exportar datos en formatos como el formato de archivo de imagen etiquetado (TIFF), el grupo de expertos fotográficos (JPEG) y los gráficos de red portátiles (PNG). Para obtener una lista completa de los formatos admitidos, consulte la página de referencia de imwrite .

En el ejemplo siguiente se escribe una matriz multidimensional de datos uint8 I desde el espacio de trabajo MATLAB en un archivo en formato TIFF. La clase de la imagen de salida escrita en el archivo depende del formato especificado. Para la mayoría de los formatos, si la matriz de entrada es de clase uint8, imwrite los datos como valores de 8 bits. Consulte la página de referencia de imwrite para obtener más 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 soporta diferentes sintaxis para varios de los formatos estándar. Por ejemplo, con el formato de archivo TIFF, puede especificar el tipo de compresión que utiliza MATLAB para almacenar la imagen. Consulte la página de referencia de imwrite para obtener más información.

Para obtener más control escribiendo 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 utilizar imwrite para exportar datos de imagen y metadatos (etiquetas) a archivos de formato de archivo de imagen etiquetados (TIFF), la función tiene algunas limitaciones. Por ejemplo, cuando desea modificar datos de imagen o metadatos en el archivo, debe escribir todos los datos en el archivo. No se puede escribir sólo la parte actualizada. Mediante el objeto Tiff , puede escribir partes de los datos de la imagen y modificar o agregar etiquetas individuales a un archivo TIFF. Al construir un objeto Tiff , representa la conexión con un archivo TIFF y proporciona acceso a muchas de las rutinas de la biblioteca LibTIFF.

Las secciones siguientes proporcionan ejemplos paso a paso de utilizar métodos y propiedades de objetos Tiff para realizar algunas tareas comunes con archivos TIFF. Para obtener el máximo provecho del objeto Tiff , debe estar familiarizado con la especificación TIFF y las notas técnicas. Vea esta documentación en LibTIFF - TIFF Library and Utilities.

Creación de un nuevo archivo TIFF

  1. Crear algunos datos de imagen. Este ejemplo lee los 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 de escritura ('w') o el modo Append ('a'):

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

    Cuando se crea un nuevo archivo TIFF, el constructor Tiff crea un archivo que contiene un directorio de archivos de imagen (IFD). Un archivo TIFF utiliza este IFD para organizar todos los datos y metadatos asociados a una determinada imagen. Un archivo TIFF puede contener varios IFDs. El objeto Tiff hace que el IFD crea el IFD actual . los métodos de objeto Tiff operan en el IFD actual. Puede navegar entre IFDs en un archivo TIFF y especificar qué IFD es el IFD actual utilizando métodos de objeto Tiff .

  3. Defina las etiquetas TIFF necesarias mediante el método setTag del objeto Tiff . Estas etiquetas requeridas especifican información sobre la imagen, como su longitud y anchura. Para dividir los datos de imagen en tiras, especifique un valor para la etiqueta RowsPerStrip . Para dividir los datos de imagen en fichas, especifique los valores de las etiquetas TileWidth y TileLength . En el ejemplo se crea una estructura que contiene nombres y valores de etiquetas y se 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.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky; tagstruct.Software = 'MATLAB'; tagstruct % display tagstruct setTag(t,tagstruct)

    Para obtener información acerca de las etiquetas TIFF compatibles y cómo establecer sus valores, consulte Configuración de valores de etiqueta. Por ejemplo, el objeto Tiff admite las propiedades que se pueden utilizar para establecer los valores de ciertas propiedades. En este ejemplo se utiliza la propiedad PlanarConfiguration del objeto Tiff para especificar el valor correcto para la configuración de fragmentación: Tiff.PlanarConfiguration.Chunky.

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

    write(t,imgdata); 

    Si desea colocar varias imágenes en el archivo, llame al método writeDirectory inmediatamente 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. Pruebe que ha creado un archivo TIFF válido mediante la función imread para leer el archivo y, a continuación, Mostrar la imagen:

    imagesc(imread('myfile.tif'));

Escribir una franja o un mosaico de datos de imagen

Nota

Sólo se puede modificar una franja o un mosaico de datos de imagen si los datos no se comprimen.

  1. Abra un archivo TIFF existente para modificarlo creando un objeto Tiff . En este ejemplo se utiliza el archivo creado en Creación de un nuevo archivo TIFF. El constructor Tiff devuelve un identificador a un objeto Tiff .

    t = Tiff('myfile.tif','r+');
  2. Generar algunos datos para escribir en una franja de la imagen. Este ejemplo crea una matriz tridimensional de ceros que es del tamaño de una franja. El código utiliza el número de filas de una franja, el ancho de la imagen y el número de muestras por píxel como cotas. El array es una matriz 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 la imagen tenían un diseño con mosaico, usaría las etiquetas TileWidth y TileLength para especificar las cotas.

  3. Escriba los datos en una franja del archivo mediante el método writeEncodedStrip . Especifique el número de índice que identifica la franja que desea modificar. El ejemplo escoge Strip 18 porque es más fácil ver el cambio en la imagen.

    writeEncodedStrip(t,18,stripData); 

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

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

    close(t); 
  5. Pruebe que modificó una franja de la imagen en el archivo TIFF utilizando la función imread para leer el archivo y, a continuación, Mostrar la imagen.

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

    Observe la franja negra en el centro de la imagen.

Modificación de metadatos de archivos TIFF (etiquetas)

  1. Abra un archivo TIFF existente para modificarlo mediante el objeto Tiff . En este ejemplo se utiliza el archivo creado en Creación de un nuevo archivo TIFF. El constructor Tiff devuelve un identificador a un objeto Tiff .

    t = Tiff('myfile.tif','r+');
  2. Compruebe que el archivo no contiene la etiqueta Artist , utilizando el método getTag . Este código debería emitir un mensaje de error que dijera que no era posible recuperar la etiqueta.

    artist_value = getTag(t,'Artist');
  3. Agregue la etiqueta Artist mediante el método setTag .

    setTag(t,'Artist','Pablo Picasso');
  4. Escriba los datos de la etiqueta nueva en el archivo TIFF mediante el método rewriteDirectory . Utilice el método rewriteDirectory al modificar los metadatos existentes en un archivo o agregar nuevos metadatos a un archivo.

    rewriteDirectory(t);
  5. Cierre la conexión al archivo cerrando el objeto Tiff .

    close(t); 
  6. Pruebe el trabajo reabriendo 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);

Creación de subdirectorios de archivos TIFF

  1. Crear algunos datos de imagen. En este ejemplo se leen los datos de imagen de un archivo JPEG incluido con MATLAB. A continuación, el ejemplo crea dos versiones de resolución reducida (miniatura) de los datos de la 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 de escritura ('w') o el modo Append ('a'). El constructor Tiff devuelve un identificador a un objeto Tiff .

    t = Tiff('my_subimage_file.tif','w');
  3. Defina las etiquetas TIFF necesarias mediante el método setTag del objeto Tiff . Estas etiquetas requeridas especifican información sobre la imagen, como su longitud y anchura. Para dividir los datos de imagen en tiras, especifique un valor para la etiqueta RowsPerStrip . Para dividir los datos de imagen en fichas, utilice las etiquetas TileWidth y TileLength . En el ejemplo se crea una estructura que contiene nombres y valores de etiquetas y se 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 especificado no es el valor de la etiqueta SubIFD . El número indica al software Tiff que cree un SubIFD que apunte a dos subdirectorios. El valor real de la etiqueta SubIFD serán los desvíos 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 acerca de las etiquetas TIFF compatibles y cómo establecer sus valores, consulte Configuración de valores de etiqueta. Por ejemplo, el objeto Tiff admite las propiedades que se pueden utilizar para establecer los valores de ciertas propiedades. En este ejemplo se utiliza la propiedad PlanarConfiguration del objeto Tiff para especificar el valor correcto para la configuración de fragmentación: Tiff.PlanarConfiguration.Chunky.

  4. Escriba los datos de la imagen y los metadatos en el directorio actual mediante 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. Debido a que especificó que quería crear dos subdirectorios, writeDirectory configura un subdirectorio.

    writeDirectory(t); 
  6. Defina las etiquetas requeridas, tal como lo hizo en el directorio regular. De acuerdo con 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 de la imagen y los metadatos en el subdirectorio mediante 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. Defina las etiquetas requeridas, tal como lo haría en cualquier directorio. De acuerdo con 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 de la imagen y los metadatos en el subdirectorio mediante 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); 

Configuración de valores de etiqueta

En la tabla siguiente se muestran todas las etiquetas TIFF que admite el objeto Tiff e incluye información acerca de su clase y tamaño MATLAB . Para 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 utilizar la estructura de propiedades Tiff para especificar los valores admitidos para estas etiquetas. Por ejemplo, utilice 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 TIFF soportadas

Etiqueta TIFFClaseTamañoValores admitidosNotas
Artistchar1xN  
BitsPerSampledouble1x11, 8, 16, 32, 64Ver Tabla 2
ColorMapdouble256x3Los valores deben normalizarse entre 0 – 1. Almacenados 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
Véase Cuadro 3.
Copyrightchar 1xN  
DateTimechar1x19El valor devuelto se rellena a 19 caracteres si es necesario. 
DocumentNamechar1xN  
DotRangedouble1x2 Photometric debe ser Separated
ExtraSamplesdouble1xNUnspecified: 0
AssociatedAlpha: 1
UnassociatedAlpha: 2
Véase Cuadro 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 – 65535 
MinSampleValuedouble1x10 – 65535 
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
Véase Tabla 2.
Photoshopuint8 1xN  
PlanarConfigurationdouble1x1Chunky: 1
Separate: 2
 
PrimaryChromaticitiesdouble1x6  
ReferenceBlackWhitedouble1x6  
ResolutionUnitdouble 1x1  
RICHTIFFIPTCuint81xN  
RowsPerStripdouble1x1  
SampleFormatdouble1x1Uint: 1
Int: 2
IEEEFP: 3
Ver Tabla 2
SamplesPerPixeldouble1x1  
SMaxSampleValuedouble1x1Rango de tipo de datos MATLAB especificado para datos de imagen  
SMinSampleValuedouble1x1Rango de tipo de datos MATLAB especificado para datos de imagen  
Softwarechar1xN  
StripByteCountsdouble1xN Sólo lectura
StripOffsetsdouble1xN Sólo lectura
SubFileTypedouble1x1Default : 0
ReducedImage: 1
Page: 2
Mask: 4
 
SubIFDdouble1x1  
TargetPrinterchar1xN  
Thresholdingdouble1x1BiLevel: 1
HalfTone: 2
ErrorDiffuse: 3

Photometric puede ser cualquiera: MinIsWhite MinIsBlack

TileByteCountsdouble1xN Sólo lectura
TileLengthdouble1x1Debe ser un múltiplo de 16 
TileOffsetsdouble1xN Sólo lectura
TileWidthdouble1x1Debe ser un múltiplo de 16 
TransferFunctiondoubleVer 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 o3x2^BitsPerSample.

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

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

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

 Valores 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 SampleFormat válidos para combinaciones de BitsPerSample y compresión

 Valores 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 SamplesPerPixel válidos para la configuración fotométrica

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

1 Cuando especifique más del número esperado de muestras por píxel (n+), debe establecer la etiqueta ExtraSamples en consecuencia.

Consulte también

Sitios web externos