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

Экспорт данных из MATLAB® рабочая область, используя один из стандартных форматов графических файлов, используйте imwrite функция. С помощью этой функции можно экспортировать данные в таких форматах, как Теговый формат графических файлов (TIFF), Формат графических данных JPEG (JPEG) и Portable Network Graphics (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). A TIFF файла использует этот IFD, чтобы организовать все данные и метаданные, связанные с конкретным изображением. Файл TIFF может содержать несколько IFD. The Tiff объект создает IFD, который создает current IFD. Tiff методы объекта работают на текущем IFD. Можно перемещаться между IFD в файле 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 объекта свойство для задания правильного значения для строения chunky: Tiff.PlanarConfiguration.Chunky.

  4. Запись данных и метаданных в текущую директорию с помощью write метод Tiff объект.

    write(t,imgdata);
    

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

  5. Закройте подключение к файлу, закрыв Tiff объект:

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

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

Запись полосы или плитки данных

Примечание

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

  1. Откройте существующий файл TIFF для изменения путем создания Tiff объект. Этот пример использует файл, созданный в Создании нового файла TIFF. The 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. The 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'). The 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 способ. The 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 способ. The 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 графиками. 
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, заданный для Image data  
SMinSampleValuedouble1x1Область значений типов данных MATLAB, заданный для Image data  
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 

1Размер 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: Действительные значения SamplesPerPixel для фотометрических настроек

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

Таблица 6: Список описаний значения RPCCoefficientTag

Значение индекса в 92-Element вектореОписания значения1Модули
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) 

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

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

См. также

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