Экспорт данных из 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 | 1x NumInks | 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 может быть: RGB Palette YCbCr CIELab ICCLab ITULab | |
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 | Uint Int | Uint Int IEEEFP | IEEEFP |
MinIsBlack | Uint | Uint/Int | Uint Int | Uint Int IEEEFP | IEEEFP |
RGB | Uint | Uint | Uint IEEEFP | IEEEFP | |
Pallette | Uint | Uint | |||
Mask | Uint | ||||
Separated | Uint | Uint | Uint IEEEFP | IEEEFP | |
YCbCr | Uint | Uint | Uint IEEEFP | IEEEFP | |
CIELab | Uint | Uint | |||
ICCLab | Uint | Uint | |||
ITULab | Uint | Uint |
Таблица 4: Допустимые значения SampleFormat для комбинаций BitsPerSample и Compression
Значения BitsPerSample | |||||
---|---|---|---|---|---|
Значения сжатия | 1 | 8 | 16 | 32 | 64 |
None | Uint | Uint Int | Uint Int | Uint Int IEEEFP | IEEEFP |
CCITTRLE | Uint | ||||
CCITTFax3 | Uint | ||||
CCITTFax4 | Uint | ||||
LZW | Uint | Uint Int | Uint Int | Uint Int IEEEFP | IEEEFP |
JPEG | Uint Int | ||||
CCITTRLEW | Uint | ||||
PackBits | Uint | Uint Int | Uint Int | Uint Int IEEEFP | IEEEFP |
Deflate | Uint | Uint Int | Uint Int | Uint Int IEEEFP | IEEEFP |
AdobeDeflate | Uint | Uint Int | Uint Int | Uint Int 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) представляют нормированные значения строк и столбцов типовой модели строгой проекции.