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"))
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)
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 TIFF | Clase | Tamaño | Valores admitidos | Notas |
|---|---|---|---|---|
Artist | char | 1 por N | — | — |
BitsPerSample | double | 1 por 1 | 1, 8, 16, 32, 64 | Consulte la Tabla 2 y la Tabla 3. |
ColorMap | double | 256 por 3 | Los valores deben normalizarse en el intervalo [0, 1]. Se almacenan internamente como valores uint16. | Photometric debe ser Palette. |
Compression | double | 1 por 1 | None: 1CCITTRLE: 2CCITTFax3: 3CCITTFax4: 4LZW: 5JPEG: 7CCITTRLEW: 32771PackBits: 32773Deflate: 32946AdobeDeflate: 8 | Consulte la Tabla 4. |
Copyright | char | 1 por N | — | — |
DateTime | char | 1 por 19 | El valor de retorno se rellena a 19 caracteres si es necesario. | — |
DocumentName | char | 1 por N | — | — |
DotRange | double | 1 por 2 | — | Photometric debe ser Separated. |
ExtraSamples | double | 1 por N | Unspecified: 0AssociatedAlpha: 1UnassociatedAlpha: 2 | — |
FillOrder | double | 1 por 1 | — | — |
GeoAsciiParamsTag | char | 1 por N | — | — |
GeoDoubleParamsTag | double | 1 por N | — | — |
GeoKeyDirectoryTag | double | N por 4 | — | — |
Group3Options | double | 1 por 1 | — | Compression debe ser CCITTFax3. |
Group4Options | double | 1 por 1 | — | Compression debe ser CCITTFax4. |
HalfToneHints | double | 1 por 2 | — | — |
HostComputer | char | 1 por N | — | — |
ICCProfile | uint8 | 1 por N | — | — |
ImageDescription | char | 1 por N | — | — |
ImageLength | double | 1 por 1 | — | — |
ImageWidth | double | 1 por 1 | — | — |
InkNames | char cell array | 1 por NumInks | — | Photometric debe ser Separated. |
InkSet | double | 1 por 1 | CMYK: 1MultiInk: 2 | Photometric debe ser Separated. |
JPEGQuality | double | 1 por 1 | Un valor en el intervalo [1, 100] | — |
Make | char | 1 por N | — | — |
MaxSampleValue | double | 1 por 1 | Un valor en el intervalo [0, 216-1] | — |
MinSampleValue | double | 1 por 1 | Un valor en el intervalo [0, 216-1] | — |
Model | char | 1 por N | — | — |
ModelPixelScaleTag | double | 1 por 3 | — | — |
ModelTiepointTag | double | N por 6 | — | — |
ModelTransformationMatrixTag | double | 1 por 16 | — | — |
NumberOfInks | double | 1 por 1 | — | NumberOfInks debe ser igual a SamplesPerPixel. |
Orientation | double | 1 por 1 | TopLeft: 1TopRight: 2BottomRight: 3BottomLeft: 4LeftTop: 5RightTop: 6RightBottom: 7LeftBottom: 8 | — |
PageName | char | 1 por N | — | — |
PageNumber | double | 1 por 2 | — | — |
Photometric | double | 1 por 1 | MinIsWhite: 0MinIsBlack: 1RGB: 2Palette: 3Mask: 4Separated: 5YCbCr: 6CIELab: 8ICCLab: 9ITULab: 10 | Consulte la Tabla 3. |
Photoshop | uint8 | 1 por N | — | — |
PlanarConfiguration | double | 1 por 1 | Chunky: 1 Separate: 2 | — |
PrimaryChromaticities | double | 1 por 6 | — | — |
ReferenceBlackWhite | double | 1 por 6 | — | — |
ResolutionUnit | double | 1 por 1 | — | — |
RICHTIFFIPTC | uint8 | 1 por N | — | — |
RowsPerStrip | double | 1 por 1 | — | — |
RPCCoefficientTag | double | 1 por 92 | — | Consulte la Tabla 6. |
SampleFormat | double | 1 por 1 | Uint: 1Int: 2IEEEFP: 3 | Consulte la Tabla 2. |
SamplesPerPixel | double | 1 por 1 | — | — |
SMaxSampleValue | double | 1 por 1 | Rango de tipo de datos de MATLAB especificado para los datos de imagen | — |
SMinSampleValue | double | 1 por 1 | Rango de tipo de datos de MATLAB especificado para los datos de imagen | — |
Software | char | 1 por N | — | — |
StripByteCounts | double | 1 por N | — | Solo lectura |
StripOffsets | double | 1 por N | — | Solo lectura |
SubFileType | double | 1 por 1 | Default : 0ReducedImage: 1Page: 2Mask: 4 | — |
SubIFD | double | 1 por 1 | — | — |
TargetPrinter | char | 1 por N | — | — |
Thresholding | double | 1 por 1 | BiLevel: 1 HalfTone: 2 ErrorDiffuse: 3 | Photometric debe ser MinIsWhite o MinIsBlack. |
TileByteCounts | double | 1 por N | — | Solo lectura |
TileLength | double | 1 por 1 | Debe ser un múltiplo de 16 | — |
TileOffsets | double | 1 por N | — | Solo lectura |
TileWidth | double | 1 por 1 | Debe ser un múltiplo de 16 | — |
TransferFunction | double | Consulte la nota1 | Debe estar en el intervalo [0, 216-1] | SamplesPerPixel debe ser 1 o 3. |
WhitePoint | double | 1 por 2 | — | Photometric debe ser RGB, Palette, YCbCr, CIELab, ICCLab o ITULab. |
XMP | char | 1 por N | — | N > 5 |
XPostion | double | 1 por 1 | — | — |
XResolution | double | 1 por 1 | — | — |
YCbCrCoefficients | double | 1 por 3 | — | Photometric debe ser YCbCr. |
YCbCrPositioning | double | 1 por 1 | Centered: 1 Cosited: 2 | Photometric debe ser YCbCr. |
YCbCrSubSampling | double | 1 por 2 | — | Photometric debe ser YCbCr. |
YPosition | double | 1 por 1 | — | — |
YResolution | double | 1 por 1 | — | — |
ZipQuality | double | 1 por 1 | Debe 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
BitsPerSample | SampleFormat | Tipo de datos de MATLAB |
|---|---|---|
1 | Uint | logical |
8 | Uint, Int | uint8, int8 |
16 | Uint, Int | uint16, int16 |
32 | Uint, Int, IEEEFP | uint32, int32, single |
64 | IEEEFP | double |
Tabla 3: Valores de SampleFormat válidos para las combinaciones de BitsPerSample y Photometric
Valores Photometric | Valores BitsPerSample | ||||
|---|---|---|---|---|---|
1 | 8 | 16 | 32 | 64 | |
MinIsWhite | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
MinIsBlack | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
RGB | — | Uint | Uint | UintIEEEFP | IEEEFP |
Palette | — | Uint | Uint | — | — |
Mask | Uint | — | — | — | — |
Separated | — | Uint | Uint | UintIEEEFP | IEEEFP |
YCbCr | — | Uint | Uint | UintIEEEFP | IEEEFP |
CIELab | — | Uint | Uint | — | — |
ICCLab | — | Uint | Uint | — | — |
ITULab | — | Uint | Uint | — | — |
Tabla 4: Valores de SampleFormat válidos para las combinaciones de BitsPerSample y Compression
Valores Compression | Valores BitsPerSample | ||||
|---|---|---|---|---|---|
1 | 8 | 16 | 32 | 64 | |
None | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
CCITTRLE | Uint | — | — | — | — |
CCITTFax3 | Uint | — | — | — | — |
CCITTFax4 | Uint | — | — | — | — |
LZW | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
JPEG | — | UintInt | — | — | — |
CCITTRLEW | Uint | — | — | — | — |
PackBits | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
Deflate | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
AdobeDeflate | Uint | UintInt | UintInt | UintInt IEEEFP | IEEEFP |
Tabla 5: Valores de SamplesPerPixel válidos para la configuración de Photometric
Valores Photometric | SamplesPerPixel |
|---|---|
MinIsWhite | 1+ |
MinIsBlack | 1+ |
RGB | 3+ |
Palette | 1 |
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 elementos | Descripciones de valores1 | Unidades |
|---|---|---|
| 1 | Error de sesgo de raíz cuadrática de la media | metros por eje horizontal |
| 2 | Error aleatorio de raíz cuadrática de la media | metros por eje horizontal |
| 3 | Desviación de línea | píxeles |
| 4 | Desviación de muestra | píxeles |
| 5 | Desviación de latitud geodésica | grados |
| 6 | Desviación de longitud geodésica | grados |
| 7 | Desviación de altura geodésica | metros |
| 8 | Factor de escala de línea | píxeles |
| 9 | Factor de escala de muestra | píxeles |
| 10 | Escala de latitud geodésica | grados |
| 11 | Escala de longitud geodésica | grados |
| 12 | Factor de escala de altura geodésica | metros |
| 13 a 32 | Coeficientes del numerador de , una expresión polinómica racional2 | — |
| 33 a 52 | Coeficientes del denominador de la expresión polinómica racional | — |
| 53 a 72 | Coeficientes del numerador de , una expresión polinómica racional2 | — |
| 73 a 92 | Coeficientes del denominador de la expresión polinómica racional | — |
1Para especificar los valores en este vector usando el objeto RPCCoefficientTag, consulte en Mapping Toolbox™.RPCCoefficientTag (Mapping Toolbox)
2Los polinomios y r(n) representan los valores normalizados de fila y columna de un modelo genérico de proyección rigurosa.c(n)