Чтобы экспортировать данные из рабочей области MATLAB® с помощью одного из стандартных форматов графических файлов, используйте imwrite
функция. Используя эту функцию, можно экспортировать данные в форматах, таких как теговый формат графических файлов (TIFF), формат графических данных JPEG (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 для получения дополнительной информации.
В то время как можно использовать imwrite
чтобы экспортировать данные изображения и метаданные (теги) к файлам тегового формата графических файлов (TIFF), функция действительно имеет некоторые ограничения. Например, когда это необходимо, чтобы изменить данные изображения или метаданные в файле, необходимо записать все данные в файл. Вы не можете только для записи обновленный фрагмент. Используя Tiff
объект, можно записать фрагменты данных изображения и изменить или добавить отдельные теги в файл TIFF. Когда вы создаете Tiff
объект, это представляет вашу связь с файлом TIFF и обеспечивает доступ ко многим стандартным программам в библиотеке LibTIFF.
Следующие разделы обеспечивают постепенные примеры использования Tiff
методы объекта и свойства выполнить некоторые общие задачи с файлами TIFF. Получать все возможное от Tiff
объект, необходимо быть знакомы со спецификацией TIFF и техническими примечаниями. Смотрите эту документацию в наборе библиотек и утилит LibTIFF — TIFF
.
Создайте некоторые данные изображения. Этот пример читает данные изображения из файла JPEG, включенного с MATLAB:
imgdata = imread('ngc6543a.jpg');
Создайте новый файл 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
методы объекта.
Установите требуемые теги 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
.
Запишите данные изображения и метаданные к текущему каталогу с помощью write
метод Tiff
объект.
write(t,imgdata);
Если вы хотели поместить повторные изображения в свой файл, вызовите writeDirectory
метод прямо после выполнения этой операции записи. writeDirectory
метод настраивает новую директорию файла изображения в файле и делает эту новую директорию текущим каталогом.
Закройте свою связь с файлом путем закрытия Tiff
объект:
close(t);
Протестируйте это, вы создали допустимый файл TIFF при помощи imread
функционируйте, чтобы считать файл, и затем отобразить изображение:
imagesc(imread('myfile.tif'));
Можно только изменить полосу или мозаику данных изображения, если данные не сжаты.
Откройте существующий файл TIFF для модификации путем создания Tiff
объект. Этот пример использует файл, созданный в Создании Нового файла TIFF. Tiff
конструктор возвращает указатель на Tiff
объект.
t = Tiff('myfile.tif','r+');
Сгенерируйте некоторые данные, чтобы записать в полосу в изображении. Этот пример создает 3D массив нулей, который является размером полосы. Код использует количество строк в полосе, ширине изображения и количестве выборок на пиксель как размерности. Массив является массивом 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. 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'
). 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
свойство задать правильное значение для короткой настройки: Tiff.PlanarConfiguration.Chunky
.
Запишите данные изображения и метаданные к текущему каталогу с помощью write
метод Tiff
объект.
write(t,imgdata);
Настройте первый подкаталог путем вызова writeDirectory
метод. 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
метод. 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 char при необходимости. | |
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 | ||
SampleFormat | double | 1x1 | Uint : 1Int : 2IEEEFP : 3 | См. таблицу 2 |
SamplesPerPixel | double | 1x1 | ||
SMaxSampleValue | double | 1x1 | Диапазон типа данных MATLAB указан для Данных изображения | |
SMinSampleValue | double | 1x1 | Диапазон типа данных MATLAB указан для Данных изображения | |
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 | См. note1 | Каждое значение должно быть в 0 2\U 005E\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 |
1Size 1x2^BitsPerSample
or3x2^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 единственный |
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 и сжатия
Значения 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+
|
1, Когда вы задаете больше, чем ожидаемое количество выборок на пиксель (n+
), необходимо установить ExtraSamples
пометьте соответственно.