Чтобы импортировать данные в рабочую область MATLAB® от графического файла, используйте функцию imread
. Используя эту функцию, можно импортировать данные из файлов во многих стандартных форматах файлов, включая теговый формат графических файлов (TIFF), Формат обмена графическими данными (GIF), формат графических данных JPEG (JPEG) и форматы Переносимой сетевой графики (PNG). Для полного списка поддерживаемых форматов смотрите страницу с описанием imread
.
Этот пример читает данные изображения, сохраненные в файле в формате JPEG в рабочее пространство MATLAB как массив I
:
I = imread('ngc6543a.jpg');
imread
представляет изображение в рабочей области как многомерный массив класса uint8
. Размерности массива зависят от формата данных. Например, imread
использует три измерения, чтобы представлять цветные изображения RGB:
whos I Name Size Bytes Class I 650x600x3 1170000 uint8 array Grand total is 1170000 elements using 1170000 bytes
Для большего количества управления чтением файлов TIFF используйте объект Tiff
— смотрите Данные изображения Чтения и Метаданные из файлов TIFF для получения дополнительной информации.
Если у вас есть файл в стандартном графическом формате, используйте функцию imfinfo
, чтобы получить информацию о ее содержимом. Функция imfinfo
возвращает структуру, содержащую информацию о файле. Поля в структуре меняются в зависимости от формата файла, но imfinfo
всегда возвращает некоторую основную информацию включая имя файла, дату последнего изменения, размер файла и формат.
Этот пример возвращает информацию о файле в формате формата графических данных JPEG (JPEG):
info = imfinfo('ngc6543a.jpg')
info = Filename: 'matlabroot\toolbox\matlab\demos\ngc6543a.jpg' FileModDate: '01-Oct-1996 16:19:44' FileSize: 27387 Format: 'jpg' FormatVersion: '' Width: 600 Height: 650 BitDepth: 24 ColorType: 'truecolor' FormatSignature: '' NumberOfSamples: 3 CodingMethod: 'Huffman' CodingProcess: 'Sequential' Comment: {'CREATOR: XV Version 3.00b Rev: 6/15/94 Quality =...'}
В то время как можно использовать imread
, чтобы импортировать данные изображения и метаданные из файлов TIFF, функция действительно имеет некоторые ограничения. Например, файл TIFF может содержать повторные изображения, и каждый отображает, может иметь несколько подызображений. В то время как можно считать все изображения из файла TIFF мультиизображений с imread
, вы не можете получить доступ к подызображениям. Используя объект Tiff
, можно считать данные изображения, метаданные и подызображения из файла TIFF. Когда вы создаете объект Tiff
, он представляет вашу связь с файлом TIFF и обеспечивает доступ ко многим стандартным программам в библиотеке LibTIFF.
Постепенный пример использования методов объекта Tiff
и свойств считать подызображения из файла TIFF следует. Чтобы получить все возможное от объекта Tiff
, ознакомьте себя со спецификацией TIFF и техническими примечаниями. Смотрите LibTIFF - TIFF Library and Utilities
.
Файл TIFF может содержать один или несколько директории файла изображения (IFD). Каждая IFD содержит данные изображения и метаданные (теги), сопоставленные с изображением. Каждая IFD может содержать один или несколько subIFDs, которые также могут содержать данные изображения и метаданные. Эти подызображения обычно являются уменьшаемым разрешением (миниатюра) версии данных изображения в IFD, содержащей subIFDs.
Чтобы считать подызображения в IFD, необходимо получить местоположение подызображения от тега SubIFD
. Тег SubIFD
содержит массив байтовых смещений, которые указывают на подызображения. Затем можно передать адрес subIFD к методу setSubDirectory
, чтобы сделать subIFD текущей IFD. Большинство методов объекта Tiff
работает с текущей IFD.
Откройте файл TIFF, который содержит изображения и подызображения с помощью конструктора Object Tiff
. Этот пример использует файл TIFF, созданный в Создании Подкаталогов файла TIFF, который содержит одну директорию IFD с двумя subIFDs. Конструктор Tiff
открывает файл TIFF и делает первый subIFD в файле текущей IFD:
t = Tiff('my_subimage_file.tif','r');
Получите местоположения subIFDs, сопоставленного с текущей IFD. Используйте метод getTag
, чтобы получить значение тега SubIFD
. Этот метод возвращает массив байтовых смещений, которые задают местоположение subIFDs:
offsets = getTag(t,'SubIFD')
Перейдите к первому подызображению. Во-первых, установите currentIFD на директорию, содержащую первое подызображение:
dirNum = 1; setDirectory(t,dirNum);
Затем переместитесь к первому subIFD по использованию метода setSubDirectory
. Задайте байтовое смещение subIFD в качестве аргумента. Этот вызов делает subIFD текущей IFD:
setSubDirectory(t,offsets(1));
Считайте данные изображения из текущей IFD (первый subIFD) тот же способ, которым вы читаете любую другую IFD в файле:
subimage_one = read(t);
Просмотрите первое подызображение:
imagesc(subimage_one)
Перейдите к второму подызображению. Во-первых, сбросьте currentIFD к директории, содержащей второе подызображение:
setDirectory(t,dirNum);
Затем переместитесь к второму subIFD по использованию метода setSubDirectory
. Задайте байтовое смещение второго subIFD:
setSubDirectory(t,offsets(2));
Считайте данные изображения из текущей IFD (второй subIFD), как вы были бы с любой другой IFD в файле:
subimage_two = read(t);
Просмотрите второе подызображение:
imagesc(subimage_two)
Закройте объект Tiff
:
close(t);