Экспорт в изображения

Чтобы экспортировать данные из рабочей области MATLAB® с помощью одного из стандартных форматов графических файлов, используйте imwrite функция. Используя эту функцию, можно экспортировать данные в форматах, таких как теговый формат графических файлов (TIFF), формат графических данных JPEG (JPEG) и Переносимая сетевая графика (PNG). Для полного списка поддерживаемых форматов смотрите imwrite страница с описанием.

Следующий пример пишет многомерный массив uint8 данные I от рабочего пространства MATLAB в файл в формате TIFF. Класс выходного изображения, записанного в файл, зависит от заданного формата. Для большинства форматов, если входной массив имеет класс uint8imwrite выводит данные как 8-битные значения. Смотрите 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');

Примечание

imwrite поддерживает различные синтаксисы для нескольких из стандартных форматов. Например, с форматом файла TIFF, можно задать тип сжатия использование MATLAB, чтобы сохранить изображение. Смотрите imwrite страница с описанием для деталей.

Для большего количества управления, записывающего данные к файлу TIFF, используйте Tiff объект — видит Данные изображения Экспорта и Метаданные к файлам TIFF для получения дополнительной информации.

Экспорт изображений и метаданных в файлы TIFF

В то время как можно использовать imwrite чтобы экспортировать данные изображения и метаданные (теги) к файлам тегового формата графических файлов (TIFF), функция действительно имеет некоторые ограничения. Например, когда это необходимо, чтобы изменить данные изображения или метаданные в файле, необходимо записать все данные в файл. Вы не можете только для записи обновленный фрагмент. Используя Tiff объект, можно записать фрагменты данных изображения и изменить или добавить отдельные теги в файл TIFF. Когда вы создаете Tiff объект, это представляет вашу связь с файлом TIFF и обеспечивает доступ ко многим стандартным программам в библиотеке LibTIFF.

Следующие разделы обеспечивают постепенные примеры использования Tiff методы объекта и свойства выполнить некоторые общие задачи с файлами TIFF. Получать все возможное от Tiff объект, необходимо быть знакомы со спецификацией TIFF и техническими примечаниями. Смотрите эту документацию в наборе библиотек и утилит LibTIFF — TIFF.

Создание нового файла TIFF

  1. Создайте некоторые данные изображения. Этот пример читает данные изображения из файла JPEG, включенного с MATLAB:

    imgdata = imread('ngc6543a.jpg');
  2. Создайте новый файл TIFF путем построения Tiff объект, задавая имя нового файла в качестве аргумента. Чтобы создать файл, необходимо задать любой режим записи ('w') или добавьте режим ('a'):

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

    Когда вы создаете новый файл TIFF, Tiff конструктор создает файл, содержащий директорию файла изображения (IFD). Файл TIFF использует эту IFD, чтобы организовать все данные и метаданные, сопоставленные с конкретным изображением. Файл TIFF может содержать несколько IFDs. Tiff объект делает IFD, это создает IFD current. Tiff методы объекта работают с текущей IFD. Можно перейти среди IFDs в файле TIFF и задать, который IFD является текущая IFD с помощью Tiff методы объекта.

  3. Установите требуемые теги TIFF с помощью setTag метод Tiff объект. Эти необходимые теги указывают информацию об изображении, таком как его длина и ширина. Чтобы повредить данные изображения в полосы, задайте значение для RowsPerStrip тег. Чтобы повредить данные изображения в мозаики, задайте значения для TileWidth и TileLength теги. Пример создает структуру, которая содержит имена тега и значения и передачи это к setTag. Также можно установить каждый тег индивидуально.

    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)

    Для получения информации о поддерживаемых тегах TIFF и как установить их значения, смотрите Устанавливающие Значения Тега. Например, Tiff свойства поддержки объектов, которые можно использовать, чтобы установить значения определенных свойств. Этот пример использует Tiff объект PlanarConfiguration свойство задать правильное значение для короткой настройки: Tiff.PlanarConfiguration.Chunky.

  4. Запишите данные изображения и метаданные к текущему каталогу с помощью write метод Tiff объект.

    write(t,imgdata);
    

    Если вы хотели поместить повторные изображения в свой файл, вызовите writeDirectory метод прямо после выполнения этой операции записи. writeDirectory метод настраивает новую директорию файла изображения в файле и делает эту новую директорию текущим каталогом.

  5. Закройте свою связь с файлом путем закрытия Tiff объект:

    close(t);
    
  6. Протестируйте это, вы создали допустимый файл TIFF при помощи imread функционируйте, чтобы считать файл, и затем отобразить изображение:

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

Запись полосы или мозаики данных изображения

Примечание

Можно только изменить полосу или мозаику данных изображения, если данные не сжаты.

  1. Откройте существующий файл TIFF для модификации путем создания Tiff объект. Этот пример использует файл, созданный в Создании Нового файла TIFF. Tiff конструктор возвращает указатель на Tiff объект.

    t = Tiff('myfile.tif','r+');
  2. Сгенерируйте некоторые данные, чтобы записать в полосу в изображении. Этот пример создает 3D массив нулей, который является размером полосы. Код использует количество строк в полосе, ширине изображения и количестве выборок на пиксель как размерности. Массив является массивом uint8 значения.

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

    Если бы данные изображения имели мозаичное размещение, вы использовали бы TileWidth и TileLength теги, чтобы задать размерности.

  3. Запишите данные в полосу в файле с помощью writeEncodedStrip метод. Задайте индекс, который идентифицирует полосу, которую вы хотите изменить. Выборы в качестве примера разделяют 18, потому что легче видеть изменение в изображении.

    writeEncodedStrip(t,18,stripData);
    

    Если бы изображение имело мозаичное размещение, вы использовали бы writeEncodedTile метод, чтобы изменить мозаику.

  4. Закройте свою связь с файлом путем закрытия Tiff объект.

    close(t);
    
  5. Протестируйте это, вы изменили полосу изображения в файле TIFF при помощи imread функционируйте, чтобы считать файл, и затем отобразить изображение.

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

    Отметьте черную полосу через середину изображения.

Изменение метаданных файла TIFF (теги)

  1. Откройте существующий файл TIFF для модификации с помощью Tiff объект. Этот пример использует файл, созданный в Создании Нового файла TIFF. Tiff конструктор возвращает указатель на Tiff объект.

    t = Tiff('myfile.tif','r+');
  2. Проверьте, что файл не содержит Artist пометьте, с помощью getTag метод. Этот код должен выдать ошибку сообщение, говоря, что это не могло получить тег.

    artist_value = getTag(t,'Artist');
  3. Добавьте Artist тег с помощью setTag метод.

    setTag(t,'Artist','Pablo Picasso');
  4. Запишите новые данные о теге в файл TIFF с помощью rewriteDirectory метод. Используйте rewriteDirectory метод при изменении существующих метаданных в файле или добавлении новых метаданных в файл.

    rewriteDirectory(t);
  5. Закройте свою связь с файлом путем закрытия Tiff объект.

    close(t);
    
  6. Протестируйте свою работу путем повторного открытия файла TIFF и получения значения Artist пометьте, с помощью getTag метод.

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

Создание подкаталогов файла TIFF

  1. Создайте некоторые данные изображения. Этот пример читает данные изображения из файла JPEG, включенного с MATLAB. Пример затем создает два уменьшаемых разрешения (миниатюра) версии данных изображения.

    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. Создайте новый файл TIFF путем построения Tiff объект и определение имени нового файла в качестве аргумента. Чтобы создать файл, необходимо задать любой режим записи ('w') или добавьте режим ('a'). Tiff конструктор возвращает указатель на Tiff объект.

    t = Tiff('my_subimage_file.tif','w');
  3. Установите требуемые теги TIFF с помощью setTag метод Tiff объект. Эти необходимые теги указывают информацию об изображении, таком как его длина и ширина. Чтобы повредить данные изображения в полосы, задайте значение для RowsPerStrip тег. Чтобы повредить данные изображения в мозаики, используйте TileWidth и TileLength теги. Пример создает структуру, которая содержит имена тега и значения и передачи это к setTag. Можно также установить каждый тег индивидуально.

    Чтобы создать подкаталоги, необходимо установить SubIFD пометьте, задав количество подкаталогов, которые вы хотите создать. Обратите внимание на то, что номер, который вы задаете, не является значением SubIFD тег. Номер говорит Tiff программное обеспечение, чтобы создать SubIFD это указывает на два подкаталога. Фактическое значение 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)

    Для получения информации о поддерживаемых тегах TIFF и как установить их значения, смотрите Устанавливающие Значения Тега. Например, Tiff свойства поддержки объектов, которые можно использовать, чтобы установить значения определенных свойств. Этот пример использует Tiff объект PlanarConfiguration свойство задать правильное значение для короткой настройки: Tiff.PlanarConfiguration.Chunky.

  4. Запишите данные изображения и метаданные к текущему каталогу с помощью write метод Tiff объект.

    write(t,imgdata);
    
  5. Настройте первый подкаталог путем вызова writeDirectory метод. writeDirectory метод настраивает подкаталог, и сделайте новую директорию текущим каталогом. Поскольку вы указали, что хотели создать два подкаталога, writeDirectory настраивает подкаталог.

    writeDirectory(t);
    
  6. Установите требуемые теги, как вы сделали для регулярной директории. Согласно LibTIFF API, подкаталог не может содержать 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. Запишите данные изображения и метаданные к подкаталогу с помощью write метод Tiff объект.

    write(t,img_half);
    
  8. Настройте второй подкаталог путем вызова writeDirectory метод. writeDirectory метод настраивает подкаталог и делает его текущим каталогом.

    writeDirectory(t);
    
  9. Установите требуемые теги, как вы были бы для любой директории. Согласно LibTIFF API, подкаталог не может содержать 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. Запишите данные изображения и метаданные к подкаталогу с помощью write метод Tiff объект:

    write(t,img_third);
    
  11. Закройте свою связь с файлом путем закрытия Tiff объект:

    close(t);
    

Устанавливание значений тега

В следующей таблице перечислены все теги TIFF что Tiff поддержка объектов и включает информацию о своем классе MATLAB и размере. Для определенных тегов таблица также показывает множество значений что Tiff поддержка объектов, который является подмножеством всех возможных значений, заданных спецификацией TIFF. Можно использовать Tiff структура свойств, чтобы задать поддерживаемые значения для этих тегов. Например, используйте Tiff.Compression.JPEG задавать сжатие JPEG. Смотрите страницу с описанием Tiff для полного списка свойств.

Таблица 1: поддерживаемые теги TIFF

Тег TIFFКлассРазмерПоддерживаемые значенияПримечания
Artistchar1xN  
BitsPerSampledouble1x11,8,16,32,64См. таблицу 2
ColorMapdouble256x3Значения должны быть нормированы между 0–1. Сохраненный внутренне как uint16 значения.Photometric должен быть Palette
Compressiondouble1x1None: 1
CCITTRLE: 2
CCITTFax3: 3
CCITTFax4: 4
LZW: 5
JPEG: 7
CCITTRLEW: 32771
PackBits: 32773
Deflate: 32946
AdobeDeflate: 8
См. таблицу 3.
Copyrightchar 1xN  
DateTimechar1x19Возвращаемое значение дополнено к 19 char при необходимости. 
DocumentNamechar1xN  
DotRangedouble1x2 Photometric должен быть Separated
ExtraSamplesdouble1xNUnspecified: 0
AssociatedAlpha: 1
UnassociatedAlpha: 2
См. таблицу 4.
FillOrderdouble1x1  
GeoAsciiParamsTagchar1xN  
GeoDoubleParamsTagdouble1xN  
GeoKeyDirectoryTagdoubleNx4  
Group3Optionsdouble1x1 Compression должен быть CCITTFax3
Group4Optionsdouble1x1 Compression должен быть CCITTFax4
HalfToneHintsdouble1x2  
HostComputerchar1xn  
ICCProfileuint81xn  
ImageDescriptionchar1xn  
ImageLengthdouble1x1  
ImageWidthdouble1x1  
InkNameschar cell array1x
NumInks
 Photometric должен быть Separated
InkSetdouble 1x1CMYK: 1
MultiInk: 2
Photometric должен быть Separated
JPEGQualitydouble1x1Значение между 1 и 100 
Makechar 1xn  
MaxSampleValuedouble1x10–65,535 
MinSampleValuedouble1x10–65,535 
Modelchar1xN  
ModelPixelScaleTagdouble1x3  
ModelTiepointTagdoubleNx6  
ModelTransformationMatrixTagdouble1x16  
NumberOfInksdouble1x1 Должно быть равно 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
См. таблицу 2.
Photoshopuint8 1xN  
PlanarConfigurationdouble1x1Chunky: 1
Separate: 2
 
PrimaryChromaticitiesdouble1x6  
ReferenceBlackWhitedouble1x6  
ResolutionUnitdouble 1x1  
RICHTIFFIPTCuint81xN  
RowsPerStripdouble1x1  
SampleFormatdouble1x1Uint: 1
Int: 2
IEEEFP: 3
См. таблицу 2
SamplesPerPixeldouble1x1  
SMaxSampleValuedouble1x1Диапазон типа данных MATLAB указан для Данных изображения  
SMinSampleValuedouble1x1Диапазон типа данных MATLAB указан для Данных изображения  
Softwarechar1xN  
StripByteCountsdouble1xN Только для чтения
StripOffsetsdouble1xN Только для чтения
SubFileTypedouble1x1Default : 0
ReducedImage: 1
Page: 2
Mask: 4
 
SubIFDdouble1x1  
TargetPrinterchar1xN  
Thresholdingdouble1x1BiLevel: 1
HalfTone: 2
ErrorDiffuse: 3

Photometric может быть также: MinIsWhite MinIsBlack

TileByteCountsdouble1xN Только для чтения
TileLengthdouble1x1Должен быть кратным 16 
TileOffsetsdouble1xN Только для чтения
TileWidthdouble1x1Должен быть кратным 16 
TransferFunctiondoubleСм. note1Каждое значение должно быть в 0 2\U 005E\16 1SamplePerPixel может быть или 1 или 3
WhitePointdouble1x2 Photometric может быть: RGB
Palette
YCbCr
CIELab
ICCLab
ITULab
XMPchar1xn N>5
XPostiondouble1x1  
XResolutiondouble1x1  
YCbCrCoefficentsdouble1x3 Photometric должен быть YCbCr
YCbCrPositioningdouble1x1Centered: 1
Cosited: 2
Photometric должен быть YCbCr
YCbCrSubSamplingdouble1x2 Photometric должен быть YCbCr
YPositiondouble1x1  
YResolutiondouble1x1  
ZipQualitydouble1x1Значение между 1 и 9 

1Size 1x2^BitsPerSample or3x2^BitsPerSample.

Таблица 2: допустимые значения SampleFormat для настроек BitsPerSample

'BitsPerSample' SampleFormatТип данных MATLAB
1Uintlogical
8Uint, Intuint8int8
16Uint, Intuint16int16
32Uint, Int, IEEEFPuint32int32единственный
64IEEEFPdouble

Таблица 3: допустимые значения SampleFormat для BitsPerSample и светоизмерительных комбинаций

 Значения BitsPerSample
Фотометрические величины18163264
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  

Таблица 4: допустимые значения SampleFormat для комбинаций BitsPerSample и сжатия

 Значения BitsPerSample
Значения сжатия18163264
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

Таблица 5: допустимые значения SamplesPerPixel для светоизмерительных настроек

Фотометрические величиныSamplesPerPixel1
MinIsWhite 1+
MinIsBlack 1+
RGB 3+
Pallette1
Mask 1
Separated 1+
YCbCr 3
CIELab 3+
ICCLab 3+
ITULab 3+

1, Когда вы задаете больше, чем ожидаемое количество выборок на пиксель (n+), необходимо установить ExtraSamples пометьте соответственно.

Смотрите также

Внешние веб-сайты