Цифровое представление изображения в MATLAB
Изображение в MATLAB представлена посредством следующих классов данных – unit8, unit16, double (см. п.2.). В зависимости от представления чисел в матрице цветов IPT поддерживает типы изображений, изложенных ниже.
Бинарные изображения
Черно-белое изображение в MATLAB представляется матрицей в бинарном виде. Элементы матрицы бинарных (двоичных) изображений являются бинарными и могут принимать только 2 значения - 0 и 1, обозначающих соответственно черный и белый цвета (тип logical). Таким образом, двоичное изображение задается матрицей из нулей и единиц.
Пример 3.1.Задано бинарное изображение на рис.4. Найти его матрицу.
На следующем рисунке приведено бинарное изображение размером 12*12 и его матрица (черная рамка в один пиксел).
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 1 1 1 1 0
0 0 0 0 0 0 1 1 1 1 1 0
0 0 0 0 0 1 1 1 1 1 1 0
0 0 0 0 1 1 1 1 1 1 1 0
0 0 0 1 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0
Рис.4. Бинарный образ изображения
3.2.2. Полутоновые изображения (изображения с градацией серого)(grayscale)
Если монохромное изображение учитывает переходы от черного к белому через оттенки серого, то формат представления числа от граничных значений 0 и 1 расширяется до отрезка [min_color, max_color]. Такое изображение называется полутоновым.
В этом случае матрица состоит из целых чисел типа uint8(см. п. 2), т.е. минимальное значение 0, максимальное – 255 (всего вариантов). Возможны также типы uint16 и double из интервала [0,1].
Пример 3.2.На рис.5 показан прямоугольник, содержащий темный треугольник, в полутоновом формате и его матрица. Можно видеть, что пикселы, соответствующие темному треугольнику, имеют меньшие значения интенсивности, чем верхний светлый угол.
255 249 255 255 246 255 255 255 242 255 240 128
255 252 252 252 255 251 255 238 255 234 128 128
250 255 255 253 255 253 242 255 235 128 128 128
255 254 255 255 240 255 243 248 128 128 128 128
255 244 250 249 255 240 255 128 128 128 128 128
255 239 253 255 241 255 121 127 128 128 128 128
242 255 252 246 255 128 128 128 128 128 128 128
255 244 255 238 129 128 128 128 128 128 128 128
242 255 240 128 128 128 128 128 128 128 128 128
255 234 128 128 128 128 128 128 128 128 128 128
235 128 128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 128 128 128 128 128 128 128
Рис.5. Полутоновый образ изображения
3.2.3. Цветные изображения RGB(true color RGB)
Каждому пикселу графического изображения соответствует трехмерный вектор. Таким образом, изображению соответствуют три матрицы, которые в дальнейшем будем называть цветовыми картами, причем матрица, соответствующая первому индексу – матрица интенсивности красной компоненты, второму – зеленой, третья – синей.
Пример 3.3. Цветное изображение и три его матрицы. На рис.6 квадрат закрашен в серый (верхний треугольник), красный (против часовой стрелки), розовый и белый цвета, имя графического образа – «treyg_3».
Рис.6. Принтерный образ цветного изображения
Карта интенсивности красной компоненты RGB рис.6.
>>treyg_3(:,:,1) =
0 0 0 0 0 0 0 0 0 0 0 0 0 |
0 0 128 128 128 128 128 128 128 128 128 255 0 |
0 255 0 128 128 128 128 128 128 128 255 255 0 |
0 255 255 0 128 128 128 128 128 128 255 255 0 |
0 255 255 0 128 128 128 128 128 255 255 255 0 |
0 255 255 255 0 128 128 128 255 255 255 255 0 |
0 255 255 255 255 0 128 255 255 255 255 255 0 |
0 255 255 255 255 255 0 255 255 255 255 255 0 |
0 255 255 255 255 255 255 0 255 255 255 255 0 |
0 255 255 255 255 255 255 255 0 255 255 255 0 |
0 255 255 255 255 255 255 255 255 0 255 255 0 |
0 255 255 255 255 255 255 255 255 255 0 255 0 |
0 255 255 255 255 255 255 255 255 255 0 255 0 |
0 255 255 255 255 255 255 255 255 255 255 0 0 |
Карта интенсивности зеленой компоненты RGB
>>treyg_3(:,:,2) =
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 128 128 128 128 128 128 128 128 128 0 0
0 0 0 128 128 128 128 128 128 128 0 255 0
0 0 0 0 128 128 128 128 128 128 0 255 0
0 0 0 0 128 128 128 128 128 0 255 255 0
0 0 0 0 0 128 128 128 0 255 255 255 0
0 0 0 0 0 0 128 0 255 255 255 255 0
0 0 0 0 0 0 0 255 255 255 255 255 0
0 0 0 0 0 0 0 0 255 255 255 255 0
0 0 0 0 0 0 0 0 0 255 255 255 0
0 0 0 0 0 0 0 0 0 0 255 255 0
0 0 0 0 0 0 0 0 0 0 0 255 0
0 0 0 0 0 0 0 0 0 0 0 255 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
Карта интенсивности синей компоненты RGB
>>treyg_3(:,:,3) =
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 128 128 128 128 128 128 128 128 128 0
0 0 0 128 128 128 128 128 128 128 0 255 0
0 0 0 0 128 128 128 128 128 128 0 255 0
0 0 0 0 128 128 128 128 128 0 255 255 0
0 0 0 0 0 128 128 128 0 255 255 255 0
0 0 0 0 0 0 128 0 255 255 255 255 0
0 0 0 0 0 0 0 255 255 255 255 255 0
0 0 0 0 0 0 255 0 255 255 255 255 0
0 0 0 0 0 255 255 255 0 255 255 255 0
0 0 0 0 255 255 255 255 255 0 255 255 0
0 0 0 0 255 255 255 255 255 255 0 255 0
0 0 0 255 255 255 255 255 255 255 0 255 0
0 0 255 255 255 255 255 255 255 255 255 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
3.2.4. Индексированные (сжатые) изображения(indexed colormap)
MATLAB имеет собственный формат представления цветных изображений, который используется в командах обработки изображений, будем называть его в дальнейшем индексированным. Этот способ предстваления изображения сжимает RGB информацию, при этом качество изображения теряется, но скорость обработки информации о цвете возрастает.
Конструкция индексированного файла состоит в следующем. Стандартное цветное изображение сопоставляет каждому (i,j) пикселу тройку значений (R(i,j), G(i,j), B(i,j)). Так как значения всех координат - целые числа из интервала то различных комбинаций – конечное число – не более 2563. Величины интенсивностей R(i,j), G(i,j), B(i,j) нормируются и отображаются на отрезок [0,1].
MATLAB создает наборы RGB-троек в виде матрицы Colormap_ k*3, которая имеет 3 столбца и m строки. По умолчанию m=64. Тогда номер 0<k<m-1 для каждого пиксела дает тройку цветов. Таким образом, индексированный формат – это матрица K(i,j), где для (i,j) пиксела указано значение k - номер строки в матрице Colormap.
Объект colormap задает цветовую аппроксимацию изображения и строится следующим образом. Каждая RGB координата из отрезка [0,255] пропорционально отображается в [0,1]. Определяется минимальное и максимальное значение каждой координаты, каждый отрезок изменения координат разбивается на 4 части. Рассматриваются все тройки с такими координатами. Количество всех вариантов 43 =64, поэтому m=64. Затем все тройки выписываются в лексико-графическом порядке в предположении, что B –младший разряд, а R – старший.
При конвертировании изображения типа true color в индексированный формат с матрицей colormap цвет (R(i,j), G(i,j), B(i,j)) каждого пиксела заменяется на наиболее близкую в норме l2 тройку из списка colormap.
Пример 3.4.Пример индексированного формата цветного изображения приведен на рис.7 .
Рассмотрим простейший графический файл из 9-ти пикселов, цвет которых по периметру белый и цвет пиксела в центре – черный.
Рис.7. 9 пикселов
Тогда RGB структура изображения имеет вид:
A(:,:,1) = 255 255 255 255 0 255 255 255 255 | A(:,:,2) = 255 255 255 255 0 255 255 255 255 | A(:,:,3) = 255 255 255 255 0 255 255 255 255 |
Индексированный формат – это матрица map и матрица индексов.
>> map=colormap
map =
N R G B
1 0 0 .5625
2 0 0 .6250
3 0 0 0.6875
4 0 0 0.7500
5 0 0 0.8125
6 0 0 0.8750
7 0 0 0.9375
8 0 0 1.0000
9 0 0.0625 1.0000
10 0 0.1250 1.0000
11 0 0.1875 1.0000
12 0 0.2500 1.0000
13 0 0.3125 1.0000
14 0 0.3750 1.0000
15 0 0.4375 1.0000
16 0 0.5000 1.0000
17 0 0.5625 1.0000
18 0 0.6250 1.0000
19 0 0.6875 1.0000
20 0 0.7500 1.0000
21 0 0.8125 1.0000
22 0 0.8750 1.0000
23 0 0.9375 1.0000
24 0 1.0000 1.0000
25 0.0625 1.0000 0.9375
26 0.1250 1.0000 0.8750
27 0.1875 1.0000 0.8125
28 0.2500 1.0000 0.7500
29 0.3125 1.0000 0.6875
30 0.3750 1.0000 0.6250
31 0.4375 1.0000 0.5625
32 0.5000 1.0000 0.5000
33 0.5625 1.0000 0.4375
34 0.6250 1.0000 0.3750
35 0.6875 1.0000 0.3125
36 0.7500 1.0000 0.2500
37 0.8125 1.0000 0.1875
38 0.8750 1.0000 0.1250
39 0.9375 1.0000 0.0625
40 1.0000 1.0000 0
41 1.0000 0.9375 0
42 1.0000 0.8750 0
43 1.0000 0.8125 0
44 1.0000 0.7500 0
45 1.0000 0.6875 0
46 1.0000 0.6250 0
47 1.0000 0.5625 0
48 1.0000 0.5000 0
49 1.0000 0.4375 0
50 1.0000 0.3750 0
51 1.0000 0.3125 0
52 1.0000 0.2500 0
53 1.0000 0.1875 0
54 1.0000 0.1250 0
55 1.0000 0.0625 0
56 1.0000 0 0
57 0.9375 0 0
58 0.8750 0 0
59 0.8125 0 0
60 0.7500 0 0
61 0.6875 0 0
62 0.6250 0 0
63 0.5625 0 0
64 0.5000 0 0
>> B=rgb2ind(A,map) % представление изображения на % Рис.4 в индексированном
% формате.
B =
31 31 31
31 63 31
31 31 31
Пример 3.5.Рассмотрим цветное изображение (рис.8) и результат его преобразования в индексированный формат со значениями m=64 и m=8.
Рис.8. Цветное изображение в формате RGB
Выполним последовательность команд
>> I=imread(‘RGB.jpg’);
>> [II,map] = rgb2ind(I,64);
>> imshow(II,map)
>> [II,map] = rgb2ind(I,8);
>> imshow(II,map)
Рис.9. Индексированный формат при m=64 | Рис.10. Индексированный формат при m=8 |
В случае m=8 объект colormap имеет вид:
>> map
map =
0.2196 0.2784 0.2039
0.6471 0.7216 0.6863
0.4196 0.4784 0.3765
0.1529 0.4392 0.6510
0.4275 0.4902 0.4863
0.8824 0.9059 0.8745
0.3451 0.4039 0.2667
0.5059 0.5765 0.5373
На рис.9 и 10 можно наблюдать снижение качества изобра-жения при убывании m.