Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Компьютерная графика / Lab3_Preobr_yarkosti

.pdf
Скачиваний:
55
Добавлен:
03.03.2016
Размер:
1 Mб
Скачать

Лабораторная работа № 3. ПРЕОБРАЗОВАНИЕ ЯРКОСТИ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ

Цель лабораторной работы – исследование свойств графических изображений и методов поэлементного преобразования монохромных изображений в среде системы MATLAB.

1 КОМПЬЮТЕРНОЕ ПРЕДСТАВЛЕНИЕ ИЗОБРАЖЕНИЙ

1.1Типы графических изображений

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

-полутоновые (grayscale, intensity),

-бинарные (binary),

-палитровые (palette),

-полноцветные (TrueColor, HighColor, RGB).

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

Бинарные – представлены двумя цветами, белым и черным. Таким образом, элементы матрицы могут иметь одно из двух значений 0 или 1, на представление которых отводится по одному байту. Особенность бинарных изображений состоит в том, что они являются логическими массивами, т.е. массив элементов 0 и 1 не логического типа, например, целого, двоичным изображением не считается. Для преобразования числовых массивов в логические используется команда logical. Преобразование любых числовых данных в логический массив предполагает замену всех ненулевых элементов входного массива логическими единицами и логическими нулями – всех нулевых элементов. Логические массивы могут быть получены также в результате выполнения операций сравнения. Для проверки того, является ли массив логическим, используется команда islogical.

В цветных палитровых изображениях используются две матрицы (рис.1). Одна из матриц содержит значения индексов, которые указывают на строку матрицы палитр.

2(23) Преобразование яркости графических и зображений

Матрица палитр, называемая цве-

товой картой, содержит три столбца (R - красный, G - зеле-

ный, B - синий), значения в кото-

рых указывают на цвет соответ-

ствующего пиксела, а количество строк равно числу различных цветов в изображении.

Рис.1 Матрицы палитрового изображения

Цветовая карта может быть задана командой:

map(k, :) = [r(k) g(k) b(k)];

где r(k), g(k), b(k) – значения RGB, сопоставленные строке k.

В командах допускается использовать также название цвета и его обозна-

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

whitebg(‘c’);

whitebg(‘cyan’); whitebg([0 1 1]);

Значения некоторых основных цветов и их обозначений указаны в таблице:

Цвет

 

Обозначение

Значение RGB

Черный

 

Black

k

[0 0 0]

Синий

 

Blue

b

[0 0 1]

Зеленый

 

Green

g

[0 1 0]

Голубой

 

Cyan

c

[0 1 1]

Красный

 

Red

r

[1 0 0]

Пурпурный

 

Magenta

m

[1 0 1]

Желтый

 

Yellow

y

[1 1 0]

Белый

 

White

w

[1 1 1]

Для указания цветов, не представленных в таблице, используются дробные чис-

ла. Например, серый цвет – [0.5 0.5 0.5], темно-красный – [0.5 0 0], аквамарино-

вый – [0.49 1 0.83].

В MATLAB имеется несколько стандартных цветовых карт, которые можно загрузить командой colormap(map_name), где map_name - наименование цветовой карты. Например, colormap(copper). Наименования карт: au-

tumn, bone, colorcube, cool, copper, flag, gray, hot, hsv, jet, lines, pink, prism,

Преобразование яркости графических изображений

3(23)

spring, summer, white, winter. Кроме того, изображение с необходимой картой можно непосредственно вывести командой imshow(X, copper). Длину карт

(количество цветов) можно ограничить, указав в круглых скобках соответствующее число, например gray(16).

Полноцветные изображения имеют формат RGB и хранятся в трехмер-

ном массиве, содержащем три матрицы (рис.2).

Элемент массива M(l,r,n) содержит сведения о номере строки l, столбца r,

задающих положение пиксела, и номер матрицы n, который может принимать значения: 1 - для R-матрицы, 2 - для G-матрицы и 3 – для B-матрицы.

Каждая из матриц содержит индек-

сированные переменные со значе-

нием, соответствующим относи-

тельной яркости красного, зеленого и синего цветов.

Рис.2 Цветовые матрицы массива RGB

Извлечь из общего цветного изображения отдельные цветовые слои мож-

но командами (рис.3):

fR=imageRGB(:, :, 1); fG=imageRGB(:, :, 2); fB=imageRGB(:, :, 3);

а) RGB

б) слой R

в) слой G

г) слой B

Рис.3 Пример выделения отдельных слоев из изображения RGB

4(23)

Преобразование яркости графических и зображений

При воспроизведении RGB изображения, например, на экране монитора,

каждый слой активирует соответствующий цветной фильтр. Согласно яркости

(интенсивности) пикселей каждого слоя формируются три изображения в тонах красного, зеленого и синего, объединение которых представляет собой цветное изображение.

Создать цветное изображение из отдельных слоев можно командой:

imageRGB=cat(3, fR, fG, fB);

В общем случае оператор cat(dim, A1, A2, …) связывает матрицы вдоль раз-

мерности, указанной переменной dim. При dim=1 матрицы располагаются по

вертикали, при dim=2 – по горизонтали, при dim =3 – по третьему направле-

нию, т.е. вглубь, что соответствует компоновке массива в формате RGB.

Система MATLAB не устанавливает ограничений на число размерностей массивов. Функция ndims возвращает размер массива, например

n=ndims(A);

Эта функция всегда имеет значения не меньше, чем 2, т.к. считается, что даже скаляры имеют размерность 2.

Количество возможных цветов в общей палитре RGB равно

2r 2g 2b 2 r g b , где r, g, b – разрядности каждой цветной компоненты. При r=g=b=8 изображение имеет глубину 24 бита, а количество цветов равно 224, т.е. 16.7 миллиона (TrueColor). Кроме того, часто используются цветные изображе-

ния, имеющие 16, 256 или 65536 (HighColor) цветов.

1.2 Типы данных их преобразование

Системой MATLAB поддерживаются следующие типы данных: double, single - вещественные, int8, int16, int32 – целые со знаком, uint8, uint16, uint32 –

целые без знака, char – символьные, logical – бинарные. Например, если элемен-

ты полутонового изображения принадлежат классу uint8 или uint16, то они представлены целыми числами в интервалах [0, 255] и [0, 65535] соответствен-

но. Если изображение класса double, то его пикселы являются вещественными числами с плавающей запятой и должны иметь значения в интервале [0, 1].

Конвертировать данные из одного типа в другой можно командами, одно-

Преобразование яркости графических изображений

5(23)

именными с названием типа данных. Например, преобразовать массив в тип uint8 можно командой a=uint(b), где a и b – преобразованный и исходный мас-

сивы. Если при этом массив типа double имеет элементы со значениями вне ин-

тервала [0, 255] и дробные числа, то система MATLAB преобразует все отрица-

тельные величины в 0, большие 255 – в 255, а у всех остальных элементов от-

брасывается дробная часть. Таким образом, перед конвертированием необходи-

мо выполнить перемасштабирование элементов изображения, для чего в систе-

ме MATLAB имеются специальные функции:

im2uint8 - выполняет все необходимые преобразования с предварительным анализом типа входных данных. Функция im2uint8 обнуляет все отрица-

тельные значения входного изображения, устанавливает число 255 на место ве-

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

ния b размером 2х2 класса double, имеющего значения

-0.5 0.5 0.75 1.5

командой a=im2uint8(b) сформирует результат

0 128

191255

im2uint16 - выполняет аналогичные действия.

mat2gray - преобразует произвольные массивы double в нормирован-

ные массивы double со значениями в интервале [0,1]:

A=mat2gray(B, [Bmin Bmax]);

Все элементы, меньшие Bmin, обнуляются, а все элементы, большие Bmax -

заменяются единицами. При выполнении команды

A=mat2gray(B);

в качестве значений Bmin и Bmax принимаются минимум и максимум исходно-

го массива.

im2double - преобразует входной массив в тип double. Если входной массив типа logical, uint8, uint16, то выходной – тип double в диапазоне [0,1].

Если входной массив типа double, то массив не изменяется. Например,

6(23)

Преобразование яркости графических и зображений

H=uint8([25 50; 128 200]); HD=im2double(H)

HD =

0.0980 0.1961

0.5020 0.7843

т.е. входной массив преобразован делением каждого элемента на 255. Массив типа uint16 будет делиться на 65535.

im2bw - преобразует входной массив в логический тип. Например, ко-

манда

PB=im2bw(P, T)

порождает двоичное изображение PB из полутонового изображения P, исполь-

зуя порог преобразования T. Значения всех элементов исходного изображения,

меньшие T, заменяются логическими нулями, а все остальные – логическими единицами. Значение порога должно находиться в интервале [0,1] независимо от типа входного изображения. Выходной массив автоматически конвертирует-

ся в логический. При выполнении команды

PB=im2bw(P)

по умолчанию T=0.5.

Если входное изображение типа uint8 или uint16 то функция im2bw вна-

чале делит его на 255 или 65535, соответственно, а затем учитывает порог пре-

образования. Если входное изображение типа double, то функция im2bw сразу применяет порог. При входном логическом массиве выходной - идентичен.

Например, изображение

f=[1

2; 3 4]

f =

 

1

2

3

4

типа double преобразуется следующей командой в двоичное так, что величины не более 2 заменяются нулями, а все остальные – единицами:

gbd=im2double(im2bw(mat2gray(f),0.6)) gbd =

00

11

Эту операцию также можно выполнить командой gbd=double(f>2).

Преобразование яркости графических изображений

7(23)

1.3 Конвертирование изображений

Система MATLAB поддерживает взаимное конвертирование изображений различных типов при помощи следующих функций:

dither – функция диффузионного псевдосмешения цветов:

-XD = dither(imageRGB, map, Qm, Qe) - формирование палитрового изоб-

ражения из RGB методом диффузионного псевдосмешения цветов с использо-

ванием палитры map. Параметр Qm задает число битов каждой из цветовых со-

ставляющих, а Qe - погрешность (разность между действительным значением цвета и его ближайшим представлением в палитре). При отсутствии параметров

Qm и Qe используются их значения по умолчанию.

- BW = dither(imagegray) – преобразование полутонового изображения в би-

нарное.

Реализованный функцией dither алгоритм изменяет количество цветов или градаций серого по сравнению исходным изображением перегруппировкой пикселей в локальных областях, причем смешение цветов формирует близкий к необходимому цвет. Улучшение цветового восприятия сопровождается ухуд-

шением разрешающей способности изображения.

gray2ind – преобразование полутонового изображения в палитровое.

Команда

[X, map] = gray2ind(imagegray, n)

формирует палитровое изображение с цветовой картой, содержащей n градаций серого. Если параметр n отсутствует, то по умолчанию n=64.

grayslice – преобразование полутонового изображения в палитровое с отсечением. Команда

X = grayslice(imagegray, n)

формирует палитровое изображение с использованием нескольких порогов яр-

кости. В результате палитра отсутствует. Количество уровней устанавливается параметром n, а их значения равны 1/ n,2 / n,3 / n,..., n 1 / n .

Команда

X = grayslice(imagegray, v)

8(23)

Преобразование яркости графических и зображений

формирует палитровое изображение с использованием уровней, заданных век-

тором v и имеющих значения в интервале от 0 до 1.

Сформированные изображения можно показать с помощью функции imshow(X, map) или функции sumimage(X, map) с любой палитрой подходя-

щей длины, т.е. большей, чем количество уровней отсечения.

im2bw – бинаризация отсечением по порогу яркости. Команда

BW = im2bw(imageRGB, n)

формирует бинарное изображение из цветного изображения RGB. Вначале ис-

ходное изображение преобразуется в полутоновое, а затем применяется отсече-

ние по порогу яркости n. Команда

BW = im2bw(X, map, n)

Выполняет аналогичные операции по отношению к палитровому изображению.

ind2gray – преобразование палитрового изображения в полутоновое: imagegray = ind2gray(X, map)

ind2rgb – преобразование палитрового изображения в изображение

RGB, например

imageRGB = ind2rgb(X, map)

mat2gray – преобразование матрицы в полутоновое изображение. В ко-

манде

imagegray = mat2gray(A, [amin amax])

значения конвертируемых в интервал от 0 до 1 элементов матрицы A задаются в пределах от amin до amax. В команде

imagegray = mat2gray(A)

значения пределов устанавливаются по минимальному и максимальному зна-

чениям элементов матрицы A.

rgb2gray – преобразование изображения RGB в полутоновое изображе-

ние, например

imagegray = rgb2gray (imageRGB)

Командой

newmap=rgb2gray(map)

создается палитра яркости на основании исходных R-, G-, B-составляющих ис-

Преобразование яркости графических изображений

9(23)

ходной палитры map.

rgb2ind - формирование палитрового изображения. Команда

[X, map] = rgb2ind(imagegray, n, dither_option)

формирует палитровое изображение из полутонового с заданием n количества цветов (длины) карты map. dither_option - опция, имеющая два значения: ‘dither’ (по умолчанию) – с применением псевдосмешения, ‘nodither’ - при котором оттенок исходного изображения конвертируется в ближайший цвет новой карты

(зависящий от значения n), т.е. без псевдосмешения.

Следующая команда создает палитровое изображение из полноцветного:

[X, map] = rgb2ind(imageRGB, n).

Команда

X = rgb2ind(imageRGB, map)

формирует палитровое изображение из полноцветного с использованием цвето-

вой карты map.

2 ФУНКЦИИ РАБОТЫ С ГРАФИЧЕСКИМИ ФАЙЛАМИ

2.1 Считывание графических файлов

Для считывания графических файлов используется функция imread, кото-

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

y = imread('filename');

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

талоге или в одном из каталогов, входящих в список поиска MATLAB. В ре-

зультате в переменную y заносится содержимое файла в виде матрицы.

Определить размер матрицы можно функцией size. Например:

size (y)

ans = 220 328

Первое число указывает на число строк, а второе – число столбцов матри-

цы (если изображение цветное, то матрица многомерная и присутствует третье число, указывающее на количество слоев, т.е. мерность матрицы).

Функцию size допустимо использовать с двумя параметрами:

10(23)

Преобразование яркости графических и зображений

[L, M] = size (y)

В таком случае переменной L присваивается число строк изображения, а пере-

менной M - число столбцов.

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

whos y

 

 

 

Name

Size

Bytes

Class

y

220x328

72160

uint8 array

Grand total is 72160 elements using 72160 bytes

Для массива цветного изображения:

whos z

 

 

Name

Size

Bytes

Class

z

220x328x3

216480

uint8 array

Grand total is 216480 elements using 216480 bytes

2.2 Вывод изображений на экран

На экран монитора изображение можно вывести функцией imshow:

- imshow (y, n) – команда выводит на экран монитора полутоновое изобра-

жение, заданное матрицей y, с использованием n уровней яркости (уровней се-

рого), по умолчанию - 256 уровней.

- imshow (y, [low high]) – команда задает операцию, при которой все пик-

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

зываются с яркостью, количество уровней которой принято по умолчанию.

- imshow (y, [ ]) – команда выводит изображение в предположении, что пе-

ременной low присвоено минимальное значение массива y, а переменной high -

максимальное. Эта команда используется при показе изображений, имеющих узкий динамический диапазон значений.

Функция pixval используется для интерактивного определения значений яркости отдельных пикселов. Курсор, расположенный поверх изображения, пе-

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

ния во всех слоях). При нажатии и удержании клавиши мыши указывается ве-

личина перемещения курсора по изображению.

Соседние файлы в папке Компьютерная графика