Лекция: Image( X );

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


#$+ Показ произвольных растровых изображений.

Произвольное изображение на экране компьютера представляет собой массив пикселов, каждый из которых характеризуется своим цветом. Цвет пиксела определяется тремя составляющими: красным, зелёным и синим (Red, Green, Blue — RGB). Для задания величины составляющей цвета пиксела достаточно одного байта памяти (8 битов), где можно записать целые числа от нуля до 255 (всего 256 значений).

Итак, каждому пикселу экрана должны соответствовать три целых числа в диапазоне от 0 до 255. В системе MATLAB таким целым числам соответствует тип данных, обозначаемый как uint8. Под такой тип данных отводится в памяти всего один байт, вместо 8 байт для обычных вещественных (дробных) чисел типа double. По умолчанию любой переменной в системе MATLAB ставится в соответствие тип double независимо от числовых значений, которые вы присваиваете переменным.

Например, в результате следующей строки кода

iVar1 = 128

создаётся переменная с именем iVar1 и типом double, которой присваивается значение 128. Для хранения такого значения достаточно одного байта памяти, однако для переменной iVar1 типа double отводится 8 байт памяти. Налицо явный перерасход памяти компьютера.

Чтобы избежать такого перерасхода переменную нужно явно объявлять как целую, используя модификатор uint8:

iVar2 = uint8( 128 );

Так созданная переменная iVar2 считается целой переменной (а не вещественной), и под неё отводится один байт памяти. Такие переменные в системе MATLAB специально предназначены для хранения целых значений от 0 до 255 (с целью экономии памяти) и не предназначены для вычислений! По-крайней мере в версии MATLAB 5.2 это ещё так. В результате для следующего фрагмента

iVar2 = iVar2 + 1;

получаем сообщение об ошибке:

??? Function '+' not defined for variables of class 'uint8'.

Дословно означающее, что операция «сложение» для переменных типа uint8 не определена.

Чтобы узнать (если забыли), какой тип имеет та или иная переменная из рабочего пространства системы MATLAB, нужно ввести и выполнить команду

Whos

в результате в командном окне MATLABа появится следующее сообщение:

из которого видно, что iVar1 является массивом размера 1x1 (то есть фактически скаляром) типа double и занимает в памяти 8 байт, а iVar2 имеет тип uint8 и занимает в памяти только 1 байт (в 8 раз меньше). При этом обе переменные имеют одинаковые значения.

Некоторый набор цветов (в количестве m штук), называемый палитрой или colormap, можно оформить в виде матрицы размером m x 3 типа double. Например, матрица map1

map1(1,1) = 0.12; map1(1,2) = 0.123; map1(1,3) = 0.987;

map1(2,1) = 0.456; map1(2,2) = 0.7; map1(2,3) = 0.22;

map1(3,1) = 0.88; map1(3,2) = 0.19; map1(3,3) = 0.611;

map1(4,1) = 0.255; map1(4,2) = 0.298; map1(4,3) = 0.128;

map1(5,1) = 0.01; map1(5,2) = 0.78; map1(5,3) = 0.60;

задаёт набор из пяти цветов. Каждая строка соответствует одному цвету. Элементы строки (слева — направо) задают красную, зелёную и синию составляющие цвета.

Далее сформируем матрицу k x L типа uint8, каждый элемент которой будет равен одному из номеров (минус единица) строк таблицы цветов map1. Такой матрицы вместе с матрицей цветов будет достаточно, чтобы показать на экране компьютера массив пикселов, то есть произвольное изображение.

Например, матрица X1

X1=uint8( [ 1 4 1 3 2; 4 0 2 1 3 ] )

задаёт массив типа uint8 размером 2 x 5 пиксел. Этот массив всего занимает в памяти 10 байт, а не 80 байт, как было бы в случае массива типа double. Первый пиксел в первом ряду имеет цвет, задаваемый второй строкой матрицы map1, второй пиксел в этом же ряду соответствует пятой строке матрицы map1, и так далее.

Чтобы заставить систему MATLAB реально отобразить произвольную картину пикселов, нужно вызвать функцию image.

Например, с помощью функций

еще рефераты
Еще работы по информатике