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 utilizando uno de los formatos de archivo de gráficos estándar, utilice la función.MATLAB®imwrite Con esta función, puede exportar datos en formatos como el formato de archivo de imagen etiquetada (TIFF), el grupo mixto 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.imwrite

En el ejemplo siguiente se escribe una matriz multidimensional de datos desde el espacio de trabajo en un archivo en formato TIFF.uint8IMATLAB 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, genera los datos como valores de 8 bits.uint8imwrite Consulte la página de referencia para obtener más información.imwrite

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

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

Para obtener más control escribiendo datos en un archivo TIFF, utilice el objeto, consulte para obtener más información.TiffExportación de datos de imagen y metadatos a archivos TIFF

Exportación de datos de imagen y metadatos a archivos TIFF

Si bien puede utilizar para exportar datos de imagen y metadatos (etiquetas) a archivos de formato de archivo de imagen etiquetada (TIFF), la función tiene algunas limitaciones.imwrite Por ejemplo, si desea 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, puede escribir partes de los datos de imagen y modificar o agregar etiquetas individuales a un archivo TIFF.Tiff Cuando se construye un objeto, representa la conexión con un archivo TIFF y proporciona acceso a muchas de las rutinas de la biblioteca LibTIFF.Tiff

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

Creación de un nuevo archivo TIFF

  1. Cree algunos 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, especificando el nombre del nuevo archivo como argumento.Tiff Para crear un archivo debe especificar el modo de escritura () o el modo de anexión ():'w''a'

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

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

  3. Establezca las etiquetas TIFF requeridas utilizando el método del objeto.setTagTiff 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 mosaicos, especifique los valores para las etiquetas y.TileWidthTileLength En el ejemplo se crea una estructura que contiene los nombres y valores de etiqueta y los pasa a.setTag También puede configurar 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 admitidas y cómo establecer sus valores, consulte.Establecer valores de etiqueta Por ejemplo, el objeto admite propiedades que puede usar para establecer los valores de ciertas propiedades.Tiff En este ejemplo se utiliza la propiedad Object para especificar el valor correcto para la configuración Chunky:.TiffPlanarConfigurationTiff.PlanarConfiguration.Chunky

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

    write(t,imgdata); 

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

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

    close(t); 
  6. Pruebe que ha creado un archivo TIFF válido utilizando la función para leer el archivo y, a continuación, muestre la imagen:imread

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

Escribir una tira o mosaico de datos de imagen

Nota

Solo puede modificar una franja 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 utiliza el archivo creado en.Creación de un nuevo archivo TIFF El constructor devuelve un identificador a un objeto.TiffTiff

    t = Tiff('myfile.tif','r+');
  2. Genere algunos datos para escribir en una franja de la imagen. En este ejemplo se crea una matriz tridimensional de ceros que es el 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 dimensiones. La matriz 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 imagen tenían un diseño de mosaico, usaría las etiquetas y para especificar las dimensiones.TileWidthTileLength

  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 selecciona la franja 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 de mosaico, usaría el método para modificar el mosaico.writeEncodedTile

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

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

    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 (Tags)

  1. Abra un archivo TIFF existente para modificarlo utilizando el objeto.Tiff Este ejemplo utiliza el archivo creado en.Creación de un nuevo archivo TIFF El constructor devuelve un identificador a un objeto.TiffTiff

    t = Tiff('myfile.tif','r+');
  2. Compruebe que el archivo no contiene la etiqueta, utilizando el método.ArtistgetTag Este código debe emitir un mensaje de error que diga que no pudo recuperar la etiqueta.

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

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

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

    close(t); 
  6. Pruebe su trabajo reabriendo el archivo TIFF y obteniendo el valor de la etiqueta, utilizando el método.ArtistgetTag

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

Creación de subdirectorios de archivos TIFF

  1. Cree algunos datos de imagen. En este ejemplo se leen 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 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 y especificando el nombre del nuevo archivo como argumento.Tiff Para crear un archivo debe especificar el modo de escritura () o el modo de anexión ().'w''a' El constructor devuelve un identificador a un objeto.TiffTiff

    t = Tiff('my_subimage_file.tif','w');
  3. Establezca las etiquetas TIFF requeridas utilizando el método del objeto.setTagTiff 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 mosaicos, utilice las etiquetas y.TileWidthTileLength En el ejemplo se crea una estructura que contiene los nombres y valores de etiqueta y los pasa a.setTag También puede configurar cada etiqueta individualmente.

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

    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 admitidas y cómo establecer sus valores, consulte.Establecer valores de etiqueta Por ejemplo, el objeto admite propiedades que puede usar para establecer los valores de ciertas propiedades.Tiff En este ejemplo se utiliza la propiedad Object para especificar el valor correcto para la configuración Chunky:.TiffPlanarConfigurationTiff.PlanarConfiguration.Chunky

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

    write(t,imgdata); 
  5. Configure el primer subdirectorio llamando al método.writeDirectory El método configura el subdirectorio y hace que el directorio nuevo sea el directorio actual.writeDirectory Dado que especificó que deseaba crear dos subdirectorios, configura un subdirectorio.writeDirectory

    writeDirectory(t); 
  6. Establezca las etiquetas requeridas, tal como lo hizo para el directorio normal. De acuerdo con la API 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 imagen y los metadatos en el subdirectorio utilizando el método del objeto.writeTiff

    write(t,img_half); 
  8. Configure el segundo subdirectorio llamando al método.writeDirectory El método configura el subdirectorio y lo convierte en el directorio actual.writeDirectory

    writeDirectory(t); 
  9. Establezca las etiquetas requeridas, tal como lo haría con cualquier directorio. De acuerdo con la API 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 imagen y los metadatos en el subdirectorio utilizando el método del objeto:writeTiff

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

    close(t); 

Establecer valores de etiqueta

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

Tabla 1: etiquetas TIFF soportadas

TIFF TagClaseTamañoValores admitidosNotas
Artistchar1xN  
BitsPerSampledouble1x11, 8, 16, 32, 64VerLa tabla 2
ColorMapdouble256x3Los valores deben normalizarse entre 0 – 1. Se almacena internamente como valores.uint16debe serPhotometricPalette
Compressiondouble1x1:None 1
CCITTRLE 2
CCITTFax3 3
CCITTFax4 4
LZW 5
JPEG 7
CCITTRLEW 32771:
PackBits 32773:
Deflate 32946:
AdobeDeflate 8
Ver.La tabla 3
Copyrightchar 1xN  
DateTimechar1x19El valor devuelto se rellena a 19 caracteres si es necesario. 
DocumentNamechar1xN  
DotRangedouble1x2 debe serPhotometricSeparated
ExtraSamplesdouble1xN:Unspecified 0
AssociatedAlpha 1
UnassociatedAlpha 2
Ver.El cuadro 4
FillOrderdouble1x1  
GeoAsciiParamsTagchar1xN  
GeoDoubleParamsTagdouble1xN  
GeoKeyDirectoryTagdoubleNx4  
Group3Optionsdouble1x1 debe serCompressionCCITTFax3
Group4Optionsdouble1x1 debe serCompressionCCITTFax4
HalfToneHintsdouble1x2  
HostComputerchar1xn  
ICCProfileuint81xn  
ImageDescriptionchar1xn  
ImageLengthdouble1x1  
ImageWidthdouble1x1  
InkNameschar cell array1x
NumInks
 debe serPhotometricSeparated
InkSetdouble 1x1:CMYK 1
MultiInk 2
debe serPhotometricSeparated
JPEGQualitydouble1x1Un valor entre 1 y 100 
Makechar 1xn  
MaxSampleValuedouble1x10 – 65535 
MinSampleValuedouble1x10 – 65535 
Modelchar1xN  
ModelPixelScaleTagdouble1x3  
ModelTiepointTagdoubleNx6  
ModelTransformationMatrixTagdouble1x16  
NumberOfInksdouble1x1 Debe ser igual aSamplesPerPixel
Orientationdouble1x1:TopLeft 1
TopRight 2
BottomRight 3
BottomLeft 4
LeftTop 5
RightTop 6
RightBottom 7
LeftBottom 8
 
PageNamechar1xN  
PageNumberdouble1x2  
Photometricdouble1x1:MinIsWhite 0
MinIsBlack 1
RGB 2
Palette 3
Mask 4
Separated 5
YCbCr 6
CIELab 8
ICCLab 9
ITULab 10
Ver.La tabla 2
Photoshopuint8 1xN  
PlanarConfigurationdouble1x1:Chunky 1
Separate 2
 
PrimaryChromaticitiesdouble1x6  
ReferenceBlackWhitedouble1x6  
ResolutionUnitdouble 1x1  
RICHTIFFIPTCuint81xN  
RowsPerStripdouble1x1  
SampleFormatdouble1x1:Uint 1
Int 2
IEEEFP 3
VerLa tabla 2
SamplesPerPixeldouble1x1  
SMaxSampleValuedouble1x1Rango de tipo de datos especificado para datos de imagenMATLAB  
SMinSampleValuedouble1x1Rango de tipo de datos especificado para datos de imagenMATLAB  
Softwarechar1xN  
StripByteCountsdouble1xN Solo lectura
StripOffsetsdouble1xN Solo lectura
SubFileTypedouble1x1:Default 0
ReducedImage 1
Page 2
Mask 4
 
SubIFDdouble1x1  
TargetPrinterchar1xN  
Thresholdingdouble1x1:BiLevel 1
HalfTone 2
ErrorDiffuse 3

puede ser:PhotometricMinIsWhiteMinIsBlack

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

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

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

BitsPerSampleSampleFormatTipo de datosMATLAB
1Uintlogical
8,UintInt,uint8int8
16,UintInt,uint16int16
32, ,UintIntIEEEFP, ,uint32int32single
64IEEEFPdouble

Tabla 3: valores de SampleFormat válidos para las combinaciones BitsPerSample y 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 de SampleFormat válidos 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 de 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 Si especifica más de la cantidad esperada de muestras por píxel (), debe establecer la etiqueta en consecuencia.n+ExtraSamples

Consulte también

Sitios web externos