Компьютерная графика / Lab5_Geometr_preobr
.pdfЛабораторная работа. ПИКСЕЛЬНОЕ ПРЕОБРАЗОВАНИЕ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
Цель лабораторной работы – исследование в среде системы 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.Ответы на контрольные вопросы.