Экспорт данных из 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.
Пока можно использовать imwrite для экспорта данных и метаданных (тегов) в файлы с теговыми форматами графических файлов (TIFF), функция имеет некоторые ограничения. Например, когда вы хотите изменить данные изображения или метаданные в файле, вы должны записать все данные в файл. Вы не можете записать только обновлённый фрагмент. Использование Tiff можно записать фрагменты данных и изменить или добавить отдельные теги в файл TIFF. Когда вы создаете Tiff объект представляет ваше соединение с файлом TIFF и предоставляет доступ ко многим из стандартных программ в библиотеке LibTIFF.
В следующих разделах приведены постепенные примеры использования Tiff Объект методы и свойства для выполнения некоторых распространенных задач с файлами TIFF. Чтобы получить максимальную отдачу от Tiff объект, вы должны ознакомиться со спецификацией TIFF и техническими примечаниями. Ознакомьтесь с этой документацией в LibTIFF - TIFF Library and Utilities.
Создайте некоторые данные изображения. В этом примере считываются данные изображения из файла JPEG, включенного в MATLAB:
imgdata = imread('ngc6543a.jpg');Создайте новый файл 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 методы объекта.
Установите необходимые теги 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.
Запись данных и метаданных в текущую директорию с помощью write метод Tiff объект.
write(t,imgdata);
Если вы хотели поместить несколько изображений в файл, вызовите writeDirectory метод сразу после выполнения этой операции записи. The writeDirectory метод настраивает новый файл изображений, директории в файле, и делает эту новую директорию текущим директориям.
Закройте подключение к файлу, закрыв Tiff объект:
close(t);
Проверьте, что вы создали допустимый файл TIFF с помощью imread функция для чтения файла, а затем отображения изображения:
imagesc(imread('myfile.tif'));Примечание
Изменять полосу или плитку данных изображений можно только в том случае, если данные не сжаты.
Откройте существующий файл TIFF для изменения путем создания Tiff объект. Этот пример использует файл, созданный в Создании нового файла TIFF. The Tiff конструктор возвращает указатель на Tiff объект.
t = Tiff('myfile.tif','r+');Сгенерируйте некоторые данные для записи в полосу изображения. Этот пример создает трехмерный массив нулей размером с полосу. Код использует количество строк в полосе, ширину изображения и количество выборок на пиксель в качестве размерностей. Массив является массивом uint8 значения.
width = getTag(t,'ImageWidth'); height = getTag(t,'RowsPerStrip'); numSamples = getTag(t,'SamplesPerPixel'); stripData = zeros(height,width,numSamples,'uint8');
Если бы данные изображения имели мозаичное размещение, вы бы использовали TileWidth и TileLength теги для задания размерностей.
Запишите данные в полосу в файле с помощью writeEncodedStrip способ. Укажите номер индекса, который идентифицирует полосу, которую вы хотите изменить. Пример выбирает полоску 18, потому что легче видеть изменение в изображении.
writeEncodedStrip(t,18,stripData);
Если бы изображение имело мозаичное размещение, вы бы использовали writeEncodedTile метод для изменения плитки.
Закройте подключение к файлу, закрыв Tiff объект.
close(t);
Проверьте, что вы изменили полосу изображения в файле TIFF с помощью imread функция для чтения файла, а затем отображения изображения.
modified_imgdata = imread('myfile.tif');
imagesc(modified_imgdata)Обратите внимание на черную полосу в середине изображения.
Откройте существующий файл TIFF для изменения с помощью Tiff объект. Этот пример использует файл, созданный в Создании нового файла TIFF. The Tiff конструктор возвращает указатель на Tiff объект.
t = Tiff('myfile.tif','r+');Проверьте, что файл не содержит Artist тег, использование getTag способ. Этот код должен выдать сообщение об ошибке, указывающее, что не удалось получить тег.
artist_value = getTag(t,'Artist');
Добавьте Artist тег с использованием setTag способ.
setTag(t,'Artist','Pablo Picasso');
Запишите новые данные тега в файл TIFF с помощью rewriteDirectory способ. Используйте rewriteDirectory метод при изменении существующих метаданных в файле или добавлении новых метаданных в файл.
rewriteDirectory(t);
Закройте подключение к файлу, закрыв Tiff объект.
close(t);
Протестируйте свою работу, повторно открывая файл TIFF и получая значение Artist тег, использование getTag способ.
t = Tiff('myfile.tif', 'r');
getTag(t,'Artist')
ans =
Pablo Picasso
close(t);Создайте некоторые данные изображения. Этот пример считывает данные изображения из файла 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,:);Создайте новый файл TIFF путем создания Tiff объект и указание имени нового файла в качестве аргумента. Чтобы создать файл, вы должны задать любой режим записи ('w') или добавить режим ('a'). The Tiff конструктор возвращает указатель на Tiff объект.
t = Tiff('my_subimage_file.tif','w');Установите необходимые теги 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.
Запись данных и метаданных в текущую директорию с помощью write метод Tiff объект.
write(t,imgdata);
Настройте первый подкаталог путем вызова writeDirectory способ. The writeDirectory метод настраивает подкаталог и делает новую директорию текущим директориям. Поскольку вы указали, что хотите создать две подкаталоги, writeDirectory настраивает подкаталог.
writeDirectory(t);
Установите требуемые теги, так же как и для обычной директории. Согласно 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)
Запись данных и метаданных в подкаталог с помощью write метод Tiff объект.
write(t,img_half);
Настройте второй подкаталог путем вызова writeDirectory способ. The writeDirectory метод настраивает подкаталог и делает его текущей директорией.
writeDirectory(t);
Установите требуемые теги, так же как и для любой директории. Согласно 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)
Запись данных и метаданных в подкаталог с помощью write метод Tiff объект:
write(t,img_third);
Закройте подключение к файлу, закрыв Tiff объект:
close(t);
В следующей таблице перечислены все теги TIFF, которые Tiff объект поддерживает и включает информацию об их классе и размере MATLAB. Для определенных тегов в таблице также указывается множество значений, которые Tiff Поддержки объекта, который является подмножеством всех возможных значений, заданных спецификацией TIFF. Можно использовать Tiff структуры свойств, чтобы задать поддерживаемые значения для этих тегов. Для примера используйте Tiff.Compression.JPEG для задания сжатия JPEG. Полный список свойств см. на странице с описанием Tiff.
Таблица 1: Поддерживаемые теги TIFF
| Тег TIFF | Класс | Размер | Поддерживаемые значения | Примечания |
|---|---|---|---|---|
Artist | char | 1xN | ||
BitsPerSample | double | 1x1 | 1,8,16,32,64 | См. таблицу 2 |
ColorMap | double | 256x3 | Значения должны быть нормированы между 0-1. Хранится внутри как uint16 значения. | Photometric должен быть Palette |
Compression | double | 1x1 | None: 1CCITTRLE: 2CCITTFax3: 3CCITTFax4: 4LZW: 5JPEG: 7CCITTRLEW: 32771PackBits: 32773Deflate: 32946AdobeDeflate: 8 | См. таблицу 3. |
Copyright | char | 1xN | ||
DateTime | char | 1x19 | При необходимости возвращаемое значение заполняется 19 графиками. | |
DocumentName | char | 1xN | ||
DotRange | double | 1x2 | Photometric должен быть Separated | |
ExtraSamples | double | 1xN | Unspecified: 0AssociatedAlpha: 1UnassociatedAlpha: 2 | См. таблицу 4. |
FillOrder | double | 1x1 | ||
GeoAsciiParamsTag | char | 1xN | ||
GeoDoubleParamsTag | double | 1xN | ||
GeoKeyDirectoryTag | double | Nx4 | ||
Group3Options | double | 1x1 | Compression должен быть CCITTFax3 | |
Group4Options | double | 1x1 | Compression должен быть CCITTFax4 | |
HalfToneHints | double | 1x2 | ||
HostComputer | char | 1xn | ||
ICCProfile | uint8 | 1xn | ||
ImageDescription | char | 1xn | ||
ImageLength | double | 1x1 | ||
ImageWidth | double | 1x1 | ||
InkNames | char cell array | 1xNumInks | Photometric должен быть Separated | |
InkSet | double | 1x1 | CMYK: 1MultiInk: 2 | Photometric должен быть Separated |
JPEGQuality | double | 1x1 | Значение от 1 до 100 | |
Make | char | 1xn | ||
MaxSampleValue | double | 1x1 | 0–65,535 | |
MinSampleValue | double | 1x1 | 0–65,535 | |
Model | char | 1xN | ||
ModelPixelScaleTag | double | 1x3 | ||
ModelTiepointTag | double | Nx6 | ||
ModelTransformationMatrixTag | double | 1x16 | ||
NumberOfInks | double | 1x1 | Должно быть равно SamplesPerPixel | |
Orientation | double | 1x1 | TopLeft: 1TopRight: 2BottomRight: 3BottomLeft: 4LeftTop: 5RightTop: 6RightBottom: 7LeftBottom: 8 | |
PageName | char | 1xN | ||
PageNumber | double | 1x2 | ||
Photometric | double | 1x1 | MinIsWhite: 0MinIsBlack: 1RGB: 2Palette: 3Mask: 4Separated: 5YCbCr: 6CIELab: 8ICCLab: 9ITULab: 10 | См. таблицу 2. |
Photoshop | uint8 | 1xN | ||
PlanarConfiguration | double | 1x1 | Chunky: 1 Separate: 2 | |
PrimaryChromaticities | double | 1x6 | ||
ReferenceBlackWhite | double | 1x6 | ||
ResolutionUnit | double | 1x1 | ||
RICHTIFFIPTC | uint8 | 1xN | ||
RowsPerStrip | double | 1x1 | ||
RPCCoefficientTag | double | 1x92 | 92-элементный вектор-строка | См. таблицу 6 |
SampleFormat | double | 1x1 | Uint: 1Int: 2IEEEFP: 3 | См. таблицу 2 |
SamplesPerPixel | double | 1x1 | ||
SMaxSampleValue | double | 1x1 | Область значений типов данных MATLAB, заданный для Image data | |
SMinSampleValue | double | 1x1 | Область значений типов данных MATLAB, заданный для Image data | |
Software | char | 1xN | ||
StripByteCounts | double | 1xN | Только для чтения | |
StripOffsets | double | 1xN | Только для чтения | |
SubFileType | double | 1x1 | Default : 0ReducedImage: 1Page: 2Mask: 4 | |
SubIFD | double | 1x1 | ||
TargetPrinter | char | 1xN | ||
Thresholding | double | 1x1 | BiLevel: 1 HalfTone: 2 ErrorDiffuse: 3 |
|
TileByteCounts | double | 1xN | Только для чтения | |
TileLength | double | 1x1 | Должно быть кратно 16 | |
TileOffsets | double | 1xN | Только для чтения | |
TileWidth | double | 1x1 | Должно быть кратно 16 | |
TransferFunction | double | См. примечание1 | Каждое значение должно быть в пределах 0-2 ^ 16-1 | SamplePerPixel может быть либо 1, либо 3 |
WhitePoint | double | 1x2 | Photometric может быть: RGBPalette YCbCrCIELabICCLabITULab | |
XMP | char | 1xn | N>5 | |
XPostion | double | 1x1 | ||
XResolution | double | 1x1 | ||
YCbCrCoefficents | double | 1x3 | Photometric должен быть YCbCr | |
YCbCrPositioning | double | 1x1 | Centered: 1 Cosited: 2 | Photometric должен быть YCbCr |
YCbCrSubSampling | double | 1x2 | Photometric должен быть YCbCr | |
YPosition | double | 1x1 | ||
YResolution | double | 1x1 | ||
ZipQuality | double | 1x1 | Значение от 1 до 9 |
1Размер 1x2^BitsPerSample или 3x2^BitsPerSample.
Таблица 2: Допустимые значения SampleFormat для настроек BitsPerSample
| BitsPerSample | SampleFormat | Тип данных MATLAB |
|---|---|---|
| 1 | Uint | logical |
| 8 | Uint, Int | uint8, int8 |
| 16 | Uint, Int | uint16, int16 |
| 32 | Uint, Int, IEEEFP | uint32, int32, single |
| 64 | IEEEFP | double |
Таблица 3: Действительные значения SampleFormat для BitsPerSample и фотометрических комбинаций
| Значения BitsPerSample | |||||
|---|---|---|---|---|---|
| Фотометрические значения | 1 | 8 | 16 | 32 | 64 |
MinIsWhite | Uint | Uint/Int | UintInt | UintInt IEEEFP | IEEEFP |
MinIsBlack | Uint | Uint/Int | UintInt | UintInt IEEEFP | IEEEFP |
RGB | Uint | Uint | UintIEEEFP | IEEEFP | |
Pallette | Uint | Uint | |||
Mask | Uint | ||||
Separated | Uint | Uint | UintIEEEFP | IEEEFP | |
YCbCr | Uint | Uint | UintIEEEFP | IEEEFP | |
CIELab | Uint | Uint | |||
ICCLab | Uint | Uint | |||
ITULab | Uint | Uint | |||
Таблица 4: Допустимые значения SampleFormat для комбинаций BitsPerSample и Compression
| Значения 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 |
Таблица 5: Действительные значения SamplesPerPixel для фотометрических настроек
| Фотометрические значения | SamplesPerPixel1 |
|---|---|
MinIsWhite | 1+ |
MinIsBlack | 1+ |
RGB | 3+ |
Pallette | 1 |
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 объект, см. в Mapping Toolbox™.RPCCoefficientTag (Mapping Toolbox)
2Уравнения r (n) и c (n) представляют нормированные значения строк и столбцов типовой модели строгой проекции.