Типы изображений
Пакет 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.
Конвертирование классов и типов изображений
В пакете ITP имеются специальные функции (см. табл. 2.), которые совершают перенормировку (перемасштабирование) при конвертации одних классов и типов изображений в другие.
Таблица 2. Функции IPT для конвертации классов и типов изображений.
Имя |
Преобразует в |
Допустимый класс |
|
im2uint8 |
uint8 |
logical,uint8,uint16,double |
|
im2uintl6 |
uint16 |
logical,uint8,uint16,double |
|
mat2gray |
double (в область [0,1]) |
double |
|
im2double |
double |
logical,uint8,uintl6, |
,double |
im2bw |
logical |
uint8,uint16,double |
|
Индексирование матриц
Матрицы в MATLAB можно представить в виде последовательности векторов- строк, заключенных в квадратные скобки и разделенных точкой с запятой. Например, набрав строку
>> А = [1 2 3; 4 5 6; 7 8 9]
получаем матрицу 3x3
А =
1 2 3
4 5 6
7 8 9
Для выбора конкретного элемента матрицы понадобятся два индекса: один для обозначения номера строки, а другой — для номера столбца, где располагается искомый элемент. Например, чтобы извлечь элемент, находящийся во второй строке и в третьем столбце, нужно написать
>> А(2, 3)
ans = 6
Оператор двоеточие может использоваться при индексировании матриц для выбора двумерных блоков их элементов. Например,
>> СЗ = А(: , 3)
СЗ =
3
6
9
Здесь можно также использовать эквивалентную запись А(1:3, 3), которая просто выберет третий столбец матрицы.
Следующая команда извлекает верхние две строки:
>> Т2 = А(1:2, 1:3)
Т2 =
1 2 3
4 5 6
Слово end задает последний элемент строки или столбца. Следующие примеры являются простейшими иллюстрациями этого приема.
>> A (end, end)
ans = 9
>> A (end, end - 2)
ans =7
Индексировать можно не только последовательные элементы. Например, можно задать команду
>> А (1:2: end, 1:2: end)
ans =
1 3
7 9
Запись 1:2:end означает следующее: начать с 1, считать с шагом 2 и остановиться, когда счетчик достигнет последнего элемента. Шаг может быть отрицательным
Задание.
Загрузить изображение в соответствии с вариантом. Определить размер изображения. Вывести дополнительную информацию о массиве с помощью функции whos.
Вывести изображение на экран. Сохранить изображение.
Перевернуть изображение симметрично относительно горизонтальной оси. Вывести результат на экран.
Уменьшить исходное изображение, проредив его матрицу, в 2 и в 4 раза. Вывести результат на экран.
Обрезать исходное изображение так, чтобы соответствующая ему матрица стала квадратной. Вывести результат на экран.
Создать квадратную матрицу размера, совпадающего с размером матрицы, полученной в пункте 5, с помощью одной из стандартных функций: magic(n), rand(n) и других. Вывести результат на экран.
Перемножить матрицы, полученные в пунктах 5 и 6. Вывести результат на экран.
