Чтение, запись и запрос файлов изображений

Работа с форматами изображения

В его нативной форме изображение формата графических файлов не хранится как матрица MATLAB®, или даже обязательно как матрица. Большинство графических файлов начинается с заголовка, содержащего специфичные для формата информационные теги, и продолжает растровые данные, которые могут быть считаны как непрерывный поток. Поэтому вы не можете использовать стандартные команды ввода-вывода MATLAB load и save, чтобы считать и записать изображение формата графических файлов.

Вызовите специальные функции MATLAB, чтобы считать и записать данные изображения из форматов графических файлов:

  • Чтобы считать изображение формата графических файлов используют imread.

  • Чтобы записать изображение формата графических файлов, используйте imwrite.

  • Чтобы получить информацию о природе изображения формата графических файлов, используйте imfinfo.

Эта таблица дает более ясное изображение, которого команды MATLAB должны использоваться с который типы изображения.

Процедура

Функции, чтобы использовать

Загрузите или сохраните матрицу как MAT-файл.

load

save

Загрузите или сохраните образ формата графических файлов, например, BMP, TIFF.

imread

imwrite

Отобразите любое изображение, загруженное в рабочее пространство MATLAB.

image

imagesc

Утилиты

imfinfo

ind2rgb

Чтение графического изображения

Функция imread читает изображение из любого поддерживаемого файла графического изображения в любой из поддерживаемых битовых глубин. Большинство изображений, которые вы читаете, является 8-битным. Когда они читаются в память, они хранятся как класс uint8. Основным исключением к этому правилу является поддержка MATLAB 16-битных данных для PNG и изображений TIFF; если вы читаете 16-битный PNG или изображение TIFF, это хранится как класс uint16.

Примечание

Для индексируемых изображений imread всегда читает палитру в массив класса double, даже при том, что сама матрица изображений может иметь класс uint8 или uint16.

Следующие команды читают изображение ngc6543a.jpg в переменную RGB рабочей области, и затем отображает изображение с помощью функции image:

RGB = imread('ngc6543a.jpg');
image(RGB)

Можно записать (сохраняют) данные изображения с помощью функции imwrite. Операторы

load clown % An image that is included with MATLAB
imwrite(X,map,'clown.bmp')

создайте файл BMP, содержащий изображение клоуна.

Запись графического изображения

Когда вы сохраняете образ с помощью imwrite, поведение по умолчанию должно автоматически уменьшать битовую глубину до uint8. Многие изображения, используемые в MATLAB, являются 8-битными, и большинство изображений формата графических файлов не требует данных с двойной точностью. Одно исключение из правила для сохранения данных изображения как uint8 - то, что PNG и изображения TIFF могут быть сохранены как uint16. Поскольку эти два формата поддерживают 16-битные данные, можно заменить поведение значения по умолчанию MATLAB путем определения uint16 как типа данных для imwrite. Следующий пример показывает запись 16-битного файла PNG с помощью imwrite.

imwrite(I,'clown.png','BitDepth',16);

Подмножество графическое изображение (обрезка)

Иногда вы хотите работать только с фрагментом файла изображения, или вы хотите разбить его в подразделы. Задайте внутренние координаты прямоугольного подраздела, с которым вы хотите работать и сохранить его в файл из командной строки. Если вы не знаете координаты угловых точек подраздела, выбираете их в интерактивном режиме, когда следующий пример показывает:

% Read RGB image from graphics file. 
im = imread('street2.jpg'); 

% Display image with true aspect ratio
image(im); axis image

% Use ginput to select corner points of a rectangular
% region by pointing and clicking the mouse twice
p = ginput(2); 

% Get the x and y corner coordinates as integers
sp(1) = min(floor(p(1)), floor(p(2))); %xmin
sp(2) = min(floor(p(3)), floor(p(4))); %ymin
sp(3) = max(ceil(p(1)), ceil(p(2)));   %xmax
sp(4) = max(ceil(p(3)), ceil(p(4)));   %ymax

% Index into the original image to create the new image
MM = im(sp(2):sp(4), sp(1): sp(3),:);

% Display the subsetted image with appropriate axis ratio
figure; image(MM); axis image

% Write image to graphics file. 
imwrite(MM,'street2_cropped.tif') 

Если вы знаете, каковы угловые координаты изображений должны быть, можно вручную задать sp в предыдущем примере вместо того, чтобы использовать ginput.

Можно также отобразить “поле круглой резинки”, когда вы взаимодействуете с изображением к подмножеству оно. Смотрите пример кода для rbbox для деталей. Для получения дополнительной информации см. документацию для функций image и ginput.

Получение информации о графических файлах

Функция imfinfo позволяет вам получить информацию о графических файлах в любом из стандартных форматов, перечисленных ранее. Информация, которую вы получаете, зависит от типа файла, но это всегда включает, по крайней мере, следующее:

  • Имя файла, включая путь к папке, если файл не находится в текущей папке

  • FileFormat

  • Номер версии формата файла

  • Дата модификации файла

  • Размер файла в байтах

  • Ширина изображения в пикселях

  • Высота изображения в пикселях

  • Количество бит на пиксель

  • Тип изображения: RGB (истинный цвет), интенсивность (шкала полутонов), или индексированный