Вывод изображения на дисплей

Загрузка, вывод и сохранение изображений в MATLAB. Элементарные преобразования черно-белого изображения.

 

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

Пакет Image Processing Toolbox (IPT) состоит из функций MATLAB (они называются М-функции или М-файлы), которые расширяют возможности стандартной среды MATLAB для решения задач цифровой обработки изображений.

Загрузка изображений

Для загрузки (чтения) изображений в рабочее пространство MATLAB используется функция imread со следующим синтаксисом:

imread(‘filename’).

Здесь filename – строка символов, образующих полное имя загружаемого файла изображения (включая любое расширение). Например, командная строка

>> f=imread(‘chestxray.jpg’);

Присваивает изображение формата JPEG с именем chestxray матричной переменной f. Заметим, что символ (‘) используется в качестве ограничителя символьной строки filename. Точка с запятой в конце командной строки означает инструкцию системе MATLAB не отображать вывод для данной команды. Если точка с запятой отсутствует, то MATLAB отображает результат (вывод) выполнения операций в командной строке. Символ приглашения (>>) обозначает начало командной строки, который появляется в окне команд MATLAB.

Приведем таблицу с некоторыми графическими форматами, распознаваемыми командами imread и imwrite, начиная с MATLAB 6.5.

Формат изображения Расшифровка сокращения Допустимые расширения
TIFF JPEG GIF BMP PNG XWD Tagget Image File Format Joint Photographic Experts Group Graphics Interchange Format Windows Bitmap Portable Network Graphics X Window Dump .tif, .tiff .jpg, .jpeg .gif .bmp .png .xwd

Если в имя файла изображения не включена информация о пути к данному файлу, то filename ищется в текущей папке. А если его там нет, то делается поиск данного файла во всех папках, пути к которым указаны в пути поиска MATLAB. Самый простой способ прочесть изображение из некоторой конкретной папки – это включить полный или относительный путь к этой папке в строке filename. Например, команда

>> f=imread(‘D:\myimage\chestxray.jpg’);

считывает изображение из папки myimage на диске D:, а команда

>> f=imread(‘.\myimage\chestxray.jpg’);

загружает изображение из подпапки myimage текущей рабочей папки. Текущая рабочая папка MATLAB отображается в строке инструментов рабочего стола и ее можно поменять вручную.

Функция size(f) возвращает размер изображения, т.е. число строк и столбцов:

>> size(f)

ans =

1024 1024

Эта функция будет особенно полезной при автоматическом определении размера изображения, которое делается операцией

>> [M,N]=size(f);

При такой записи переменной M будет присвоено число строк изображения, а переменной N – число столбцов.

Функция whos сообщает дополнительную информацию о массиве. Например, строка

>> whos f

дает следующий результат:

Name Size Bytes Class
f 1024x1024 uint8 array
Grand total is 1048576 elements using 1048576 bytes

Запись unit8 означает один из классов данных MATLAB.

 

Вывод изображения на дисплей

Изображения можно вывести на дисплей компьютера с помощью функции imshow, которая имеет синтаксис:

imshow(fg,G);

где f – матрица изображения, а G – число уровней яркости, используемое при отображении этого изображения. Если аргумент G опущен, то по умолчанию принимается 256 уровней яркости. Команда

imshow(f,[low high])

означает, что все пиксели со значением не больше числа low надо показывать черными, а все пиксели со значениями не меньше числа high - белыми. Все промежуточные значения показываются с промежуточной яркостью с использованием числа уровней, принятому по умолчанию.

Запись в командной строке

imshow(f, [ ])

задает для переменной low минимальное значение массива f, а переменной high присваивает его максимальное значение.

Пример 1. Чтение и вывод изображения.

Следующая команда читает изображение bird.bmp, выдает основную информацию об этом изображении и отображает его с помощью функции imshow:

>> f=imread('D:\Document\bird.bmp');

>> whos f

Name Size Bytes Class
f 512x512 uint8 array
Grand total is 262144 elements using 262144 bytes

>> imshow(f , [ ])

В результате выполнения этой команды появится окно, содержащее рисунок, ниспадающие меню и кнопки инструментов.

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

Если теперь показать другое изображение с помощью функции imshow, то MATLAB поместит его на место старого. Чтобы сохранить на рабочем столе предыдущее изображение, можно использовать команду figure. Если набрать строку

>> imshow(f), figure, imshow(g)

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

>> imshow(g, [ ])

 

Сохранение изображений

Изображения записываются на диск функцией imwrite, которая имеет следующий синтаксис:

imwrite(f, ‘filename’)

При такой записи строка filename должна содержать расширение, поддерживаемое системой MATLAB (см. табл. 1). Иначе желаемый формат можно задать явно с помощью третьего аргумента функции. Например, следующая команда записывает матрицу f в изображение с форматом TIFF с именем patient:

>> imwrite(f, ‘ patient ’, ‘tif ’)

или, что эквивалентно,

>> imwrite(f, ‘ patient.tif ‘)

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

 

 

Классы данных

Несмотря на то, что приходится работать с целочисленными координатами, значения самих пикселей не обязательно должны быть целыми числами. В табл. 1 перечислены разные классы данных, поддерживаемые системой MATLAB. Все численные операции в MATLAB выполняются с двойной точностью в классе данных double.

 

Таблица 1. Классы данных. Первые восемь классов называются числовыми, девятый — символьный класс, последний класс — логический

Имя Описание
double Вещественные числа с плавающей запятой двойной точности в диапазоне, примерно, от — 10308 до 10308 (8 байт на число).
uint8 Целые без знака в интервале [0,255] (1 байт на число).
uintl6 Целые без знака в интервале [0,65535] (2 байта на число).
uint32 Целые без знака в интервале [0,4294967295] (4 байта на число).
int8 Целые со знаком в интервале [—128,127] (1 байт на число).
intl6 Целые со знаком в интервале [—32768, 32767] (2 байта на число).
int32 Целые со знаком в интервале [-2147483648, 2147483647] (4 байта).
single Вещественные числа с плавающей запятой обычной точности в диапазоне, примерно, от —1038 до 1038 (4 байта на число).
char Символы (буквы и знаки) (2 байта на символ).
logical Значения 0 или 1 (1 байт на элемент).

 

Типы изображений

Пакет IPT поддерживает следующие типы изображений:

© полутоновые изображения (изображения с градацией серого цвета);

© двоичные изображения;

© индексированные изображения;

© цветные изображения RGB.

Большинство монохромных изображений обрабатывается операциями, которые работают с двоичными и полутоновыми изображениями, поэтому вначале наше внимание будет обращено именно на эти два типа изображений. Индексированный тип и тип изображений RGB будут обсуждаться

Полутоновое изображение — это матрица, элементы яркости которой представлены в виде числовых значений. Если элементы полутонового изображения принадлежат классу uint8 или uintl6, то они представлены целыми числами, соответственно, в интервалах [0,255] и [0,65535]. Если изображение принадлежит классу double, то его пиксели являются вещественными числами с плавающей запятой. По общему соглашению, пиксели изображений double должны лежать в интервале [0,1].

Двоичные изображения имеют в MATLAB весьма специфический смысл. Они являются логическими массивами, состоящими из 0 и 1. Поэтому массив элементов 0 и 1 других классов, например, uint8, двоичным изображением не считается. Для преобразования числовых массивов в логические служит функция logical. Если А — числовой массив, состоящий из 0 и 1, то для построения логического массива В с теми же элементами следует выполнить команду

В = logical(А) .

Если массив А имеет также другие элементы, отличные от 0 и 1, то функция logical преобразует все его ненулевые единицы в логический элемент 1, а все нулевые — в логический элемент 0. Операции сравнения и логические операторы тоже порождают логические массивы.

Чтобы проверить, является ли данный массив логическим, применяется функция islogical:

islogical(C) .

Если С — логический массив, то эта функция возвращает 1, в противном случае - 0.