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

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

.pdf
Скачиваний:
70
Добавлен:
03.03.2016
Размер:
473.12 Кб
Скачать

Лабораторная работа. ПИКСЕЛЬНОЕ ПРЕОБРАЗОВАНИЕ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

Цель лабораторной работы – исследование в среде системы MATLAB ме-

тодов геометрического преобразования монохромных изображений.

1 ГЕОМЕТРИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ

1.1.Варианты геометрического преобразования

Всистеме MATLAB пространственное преобразование задается в виде

tform-структуры, один из вариантов определения которой заключается в использовании функции maketform:

tform=maketform(transform_type, transform_parameters)

Аргумент transform_type может принимать значения:

‘affine’ (аффинные) – масштабные изменения (растяжение, сжатие), пово-

рот (вращение), перемещение, деформация сдвигом. Прямые линии остаются прямыми, параллельные линии остаются параллельными.

‘projective’ (проективные) – преобразования аналогичны аффинным, пря-

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

‘box’ (подмножество аффинных) – независимые масштабные изменения

(растяжение, сжатие) и перемещения по любой размерности.

‘composite’ – семейство пространственных преобразований, которые при-

меняются последовательно.

‘custom’ – пространственное преобразование, заданное пользователем.

Остальные аргументы зависят от выбранного типа преобразования и поясняются на справочной странице функции maketform.

1.2. Аффинные преобразования

В системе MATLAB реализована следующая матричная форма аффинно-

 

 

 

 

t11

t12

0

 

го преобразования изображений: x

y

1 x

y 1 x

y 1 t21

t22

0

,

 

 

 

 

 

 

 

 

 

 

 

 

 

t

t

32

1

 

 

 

 

 

31

 

 

 

2(8) Лабораторная работа 4

где x, y - координатная система, в которой находится исходное изображение

(x – направление по горизонтали, а y – по вертикали), а x , y - координатная система, в которой располагается результат преобразования.

Значения элементов матрицы и соответствующие операции показаны в таблице:

Тип

 

Матрица

 

Координатные уравнения

 

 

 

 

 

 

 

 

 

 

 

sx

0

0

 

 

 

x

Масштабирование

 

 

0

s

 

0

 

 

x sx

 

 

 

 

 

 

(растяжение, сжатие)

 

 

 

 

 

y

 

 

 

y sy

y

 

 

 

 

 

 

 

 

 

 

 

 

0

0

1

 

 

 

 

 

cos

sin

0

 

x cos y sin

Поворот (вращение)

 

 

 

 

cos

 

x

sin

0

y xsin y cos

 

 

0

 

 

0

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

0

 

 

 

 

Деформация сдвигом

 

 

1

0

 

 

x x y

 

 

 

y x y

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

0

1

 

 

 

 

 

 

 

1

0

0

 

 

 

Перемещение

 

 

0

1

 

 

x x x

 

 

0

 

y y y

 

 

 

x

 

y

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аффинную tform-структуру можно определить указанием ее матрицы:

>>T=[2 0 0; 0 3 0; 0 0 1];

>>tform=maketform('affine', T) tform =

ndims_in: 2 ndims_out: 2

forward_fcn: @fwd_affine inverse_fcn: @inv_affine

tdata: [1x1 struct]

Информация о матрице и обратной матрице хранится в поле tdata:

>> tform.tdata

>> tform.tdata.T

>> tform.tdata.Tinv

 

ans =

ans =

 

 

ans =

 

 

 

T: [3x3 double]

2

0

0

0.5000

0

0

Tinv: [3x3 double]

0

3

0

0

0.3333

0

 

0

0

1

0

 

0

1.0000

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

tformfwd – вычисление прямого преобразования,

tforminv – вычисление обратного преобразования.

Лабораторная работа 4

3(8)

Функция tformfwd вызывается следующим образом:

 

X1Y1=tformfwd(XY, tform)

где XY - матрица размером Pх2, в каждой строке которой расположены пары x

и y координат одной точки изображения P. Аналогично, X1Y1 - это матрица,

столбцы которой содержат x и y координаты преобразованных точек. Напри-

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

>>T=[5 0 0; 0 6 0; 0 0 1];

>>tform=maketform('affine', T);

>>XY = [1 1; 3 2];

>>X1Y1 = tformfwd(XY, tform) X1Y1 =

5 6

15 12

>>XYi = tforminv(X1Y1, tform) XYi =

1

1

3

2

1.3. Реализация пространственного преобразования

Для формирования преобразованного изображения по методу обратного отображения в системе MATLAB используется функция imtransform, вызов которой имеет вид:

g = imtransform(f, tform, interp)

где interp - строка символов, которая определяет метод интерполяции ближай-

ших пикселов для вычисления значения выходного пиксела и имеет возможные значения ‘bilinear’ (билинейная интерполяция - по умолчанию), ‘bicubic’ (бикубическая интерполяция), ‘nearest’ (по ближайшему соседу). Например (рис.1):

f=imread('cameraman.tif');

%Увеличение по горизонтали и уменьшение по вертикали tform = maketform('affine',[1.4 0 0; 0 0.8 0; 0 0 1]);

g1 = imtransform(f,tform);

%Деформация горизонтальная

tform = maketform('affine',[1 0 0; 0.3 1 0; 0 0 1]); g2 = imtransform(f,tform);

% Деформация вертикальная

tform = maketform('affine',[1 0.3 0; 0 1 0; 0 0 1]); g3 = imtransform(f,tform);

4(8)

Лабораторная работа 4

% Поворот

tform = maketform('affine',[0.67 0.5 0 ; -0.5 0.67 0; 0 0 1]); g4 = imtransform(f,tform);

% Перемещение

tform = maketform('affine',[1 0 0 ; 0 1 0; 2 3 1]); g5 = imtransform(f,tform);

subplot(4,2,1), subimage(f) subplot(4,2,2), subimage(g1) subplot(4,2,3), subimage(g2) subplot(4,2,4), subimage(g3) subplot(4,2,5), subimage(g4)

Рис.1 Пример аффинного преобразования

1.4. Линейное конформное преобразование

Линейной конформное преобразование является частным случаем аффин-

ного преобразования, при котором, несмотря на изменение размеров изображе-

ния, формы и углы сохраняются. В этом случае аффинная матрица имеет вид:

s cos

s sin

x

s sin

 

 

 

 

 

0

 

 

 

 

s cos

0

, где s - масштаб,

- угол поворота,

x

и y переме-

 

y

1

 

 

 

 

 

 

 

 

 

 

щение по направлениям x и y.

Лабораторная работа 4

5(8)

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

конформное преобразование и применяет его к изображению в виде шахматной

доски:

f=checkerboard(50); s=0.8; % масштаб

theta=pi/6; % угол поворота tx=80; ty=50; % перемещение

T=[s*cos(theta) s*sin(theta) 0; -s*sin(theta) s*cos(theta) 0; tx ty 1]; tform = maketform('affine', T);

%Билинейная интерполяция g1 = imtransform(f, tform); imshow(f), figure, imshow(g1)

%Интерполяция по ближайшему соседу g2 = imtransform(f, tform, 'nearest');

figure, imshow(g2)

%Изменение фона

[g3, xd, yd] = imtransform(f, tform, 'FillValue', 0.5); figure, imshow(xd, yd, g3),axis on

На рис.2 показаны исходное и преобразованные изображения шахматной доски, на которых видно, что качество преобразования при билинейной интер-

поляции лучше, чем по ближайшему соседу. В свою очередь, параметр 'FillValue' управляет цветом фона изображения.

В дополнение к масштабированию и повороту матрицей в примере было задано перемещение. Однако на рисунках это перемещение никак не отражено. Причина заключается в работе функции imtransform по умолчанию. При ра-

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

норируются.

6(8)

Лабораторная работа 4

Рис.2 Преобразование шахматной доски

Для устранения недостатка отсутствия визуализации перемещения ис-

пользуются дополнительные параметры XData и YData, позволяющие точно указать расположение результирующего изображения в выходном простран-

стве. Параметр XData – это вектор из двух компонент, задающий координаты верхнего левого угла выходного изображения, а YData - координаты нижнего правого угла.

Следующие команды формируют изображение шахматной доски в вы-

ходной области, расположенной между точками (x,y)=(1,1) и (x,y)=(600,600),

после чего поворачивают и масштабируют его (рис.3):

f=checkerboard(50); s=0.8; % масштаб

theta=pi/6; % угол поворота tx=80; ty=50; % перемещение

% Перемещение

T2=[1 0 0; 0 1 0; tx ty 1];

tform2 = maketform('affine', T2);

Лабораторная работа 4

7(8)

[ff,xd,yd]=imtransform(f,tform2,'XData',[1 600],'YData',[1 600],'FillValue', 0.5); imshow(f), figure, imshow(xd, yd, ff), axis on

% Масштабирование и поворот

T=[s*cos(theta) s*sin(theta) 0; -s*sin(theta) s*cos(theta) 0; 0 0 1]; tform = maketform('affine', T);

%Билинейная интерполяция g1 = imtransform(ff, tform);

figure, imshow(xd, yd, g1), axis on

%Изменение фона

[g3, xd, yd] = imtransform(ff, tform, 'FillValue', 0.5); figure, imshow(xd, yd, g3), axis on

Рис.3 Демонстрация перемещения преобразованной шахматной доски

1.5. Проективное преобразование

Функция imtransform позволяет также реализовать проективное преоб-

разование. Для преобразования задаются координаты контрольных точек (точек привязки) на входном и выходном изображениях, например (рис.4):

I = imread('cameraman.tif');

udata = [0 1]; vdata = [0 1]; % input coordinate system inputpoints = [ 0 0; 1 0; 1 1; 0 1];

outputpoints = [-4 2; -8 -3; -3 -5; 6 3];

tform = maketform('projective', inputpoints, outputpoints); [B,xdata,ydata] = imtransform(I, tform, 'bicubic', 'udata', udata,...

'vdata', vdata, 'size', size(I), 'fill', 128); subplot(1,2,1), imshow(udata,vdata,I), axis on subplot(1,2,2), imshow(xdata,ydata,B), axis on

8(8)

Лабораторная работа 4

Рис.4 Пример проективного преобразования

2.ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ

1.По отношению к фрагменту заданного изображения выполнить следу-

ющие аффинные геометрические преобразования:

перемещение,

масштабирование,

поворот,

горизонтальный и вертикальный сдвиг (деформацию).

Операции выполнить при различных вариантах интерполяции.

2. По отношению к фрагменту заданного изображения выполнить проек-

тивное геометрическое преобразование.

3.СОДЕРЖАНИЕ ОТЧЕТА ПО ЛАБОРАТОРНОЙ РАБОТЕ

1.Формулировка задания.

2.Текст программы.

3.Результаты выполнения всех разделов задания.

4.Файл с результатами выполнения задания.

5.Пояснения полученных результатов.

6.Ответы на контрольные вопросы.

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