exponenta event banner

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

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

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

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

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

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

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

    При создании нового файла TIFF Tiff конструктор создает файл, содержащий каталог файлов изображений (IFD). Файл TIFF использует этот IFD для организации всех данных и метаданных, связанных с определенным изображением. Файл TIFF может содержать несколько файлов IFD. Tiff объект создает IFD при создании текущего IFD. Tiff объектные методы работают на текущем ИФД. В TIFF-файле можно осуществлять навигацию между IFD и указать, какой 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 для указания правильного значения для конфигурации chunky: 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. Создайте некоторые данные для записи в полоску изображения. В этом примере создается трехмерный массив нулей размером с полосу. Код использует количество строк в полосе, ширину изображения и количество выборок на пиксель в качестве размеров. Массив является массивом 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 для указания правильного значения для конфигурации chunky: Tiff.PlanarConfiguration.Chunky.

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

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

    writeDirectory(t);
    
  6. Установите требуемые теги, как и для обычного каталога. Согласно API LibTIFF, подкаталоги не могут содержать 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. Установите требуемые теги, как и для любого каталога. Согласно API LibTIFF, подкаталоги не могут содержать 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 символами. 
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  
RPCCoefficientTagdouble1x9292-элементный вектор строкиСм. таблицу 6
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См. заметку 1Каждое значение должно находиться в пределах 0-2 ^ 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 или3x2^BitsPerSample.

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

BitsPerSampleSampleFormatТип данных MATLAB
1Uintlogical
8Uint, Intuint8, int8
16Uint, Intuint16, int16
32Uint, Int, IEEEFPuint32, int32, single
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 и Compression

 Значения 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: Допустимые значения PerPixel для фотометрических настроек

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

Таблица 6: список описаний стоимости RPCCoefficientTag

Значение индекса в векторе 92-ElementDescriptions1 стоимостиЕдиницы
1Среднеквадратическая ошибка смещенияметров на горизонтальную ось
2Среднеквадратическая случайная ошибкаметров на горизонтальную ось
3Смещение линиипиксели
4Смещение образцапиксели
5Смещение геодезической широтыстепени
6Смещение геодезической долготыстепени
7Смещение геодезической высотыметры
8Масштабный коэффициент линиипиксели
9Коэффициент масштаба образцапиксели
10Шкала геодезической широтыстепени
11Шкала геодезической долготыстепени
12Коэффициент шкалы геодезической высотыметры
13 через 32Числительные коэффициенты r (n), рациональное полиномиальное уравнение 2 
33 через 52Коэффициенты знаменателя рационального полиномиального уравнения r (n) 
53 через 72Числительные коэффициенты c (n), рациональное полиномиальное уравнение 2 
73 через 92Коэффициенты знаменателя рационального полиномиального уравнения c (n) 

1To задать значения в этом векторе с помощью RPCCoefficientTag объект, см. RPCCoefficientTag (Mapping Toolbox) в Toolbox™ Сопоставление.

2Equations r (n) и c (n) представляют нормализованные значения строк и столбцов общей модели строгой проекции.

См. также

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