
Функции Image Toolbox / cp2tform.php
.htmСписок функцийImage Processing Toolbox. Описание функции CP2TFORM Семинары Обучение Лицензирование Разработка Подписка Форум Регистрация Matlab Toolboxes Simulink Blocksets Femlab Полезное Вход Обработка сигналов и изображений\image Processing ToolboxСписок функций Image Processing Toolbox: Анализ изображений
В оглавление \ К следующему разделу \ К предыдущему разделу
CP2TFORM Геометрические преобразования на основе пар контрольных точек Синтаксис:
TFORM=cp2tform(input_points, base_points, transformtype)
TFORM=cp2tform(CPSTRUCT, transformtype)
TFORM=cp2tform(input_points, base_points, transformtype, parameter)
TFORM=cp2tform(CPSTRUCT, transformtype, parameter)
[TFORM, input_points, base_points]=cp2tform(CPSTRUCT, ...)
[TFORM, input_points, base_points, input_points_bad, base_points_bad]=cp2tform(..., 'piecewise linear')
Описание:
Функция TFORM=cp2tform(input_points, base_points, transformtype) выбирает пары контрольных точек и использует их для вывода пространственных преобразований изображения. Функция возвращает TFORM структуру, которая содержит в себе пространственные преобразования. input_points представляет собой матрицу формата double и размерности m2, содержащую координаты x и y контрольных точек изображения, которое будет подвержено преобразованию. base_points также является массивом формата double с размерностью m2, который содержит координаты x и y контрольных точек на основном изображении. Параметр transformtype определяет тип проводимых преобразований. Для более детальной информации о типах, смотрите “Типы преобразований” (Transform Type).
Функция TFORM=cp2tform(CPSTRUCT, transformtype) обрабатывает CPSTRUCT структуру, которая содержит массивы контрольных точек исходного и основного изображений. CPSTRUCT создается в Control Point Selection Tool, cpselect.
Функция [TFORM, input_points, base_points]=cp2tform(CPSTRUCT, ...) возвращает контрольные точки, которые используются в input_points и base_points. Некоторые из этих точек могут не использоваться. Для более детальной информации см. cpstruct2pairs.
Типы преобразований:
Параметр transformtype определяет тип пространственных преобразований. В таблице приведено все типы преобразований, которые поддерживаются функцией cp2tform. В таблице указывается минимальное число пар контрольных точек, которые необходимы при выборе конкретного типа преобразований. Для преобразований, указанных как 'lwm' и 'polynomial' возможно применение дополнительных оптимизирующих параметров. Для более подробной информации см. описание синтаксиса.
Типы преобразованийОписаниеМинимум контрольных точекПримеры'linear conformal'Это преобразование используется, когда форму исходного изображения нужно оставить без изменений, за исключением частей изображения искаженных некоторой комбинацией преобразований или вращением. Прямые линии остаются прямыми, а параллельные – параллельными.2 пары'affine'
Это преобразование используется, когда форму исходного изображения нужно представить срезанной. Прямые линии остаются прямыми, а параллельные – параллельными, прямоугольник превращается в параллелограмм.3 пары'projective'
Это преобразование используется, когда изображение необходимо наклонить. Прямые линии остаются прямыми, а параллельные сходятся в перспективе.4 пары'polynomial'
Это преобразование используется, когда объект изображения необходимо искривить. Чем выше полиномиальная степень, тем более искривленным получается результирующее изображение.6 пар (степень 2)
10 пар (степень 3)
16 пар (степень 4)'piecewise linear'
Это преобразование используется, когда к различным частям исходного изображения применяются различные преобразования.4 пары'lwm'
Это преобразование (взвешенное локальное средние) используется, когда необходимо искривить различные локальные участки.6 пар (12 пар рекомендуется)Когда параметр transformtype является 'linear conformal', 'affine', 'projective' или 'polynomial', а input_points и base_points (или CPSTRUCT) имеют минимальное число контрольных точек необходимых для специальных преобразований, то функция cp2tform однозначно определяет коэффициенты. Для более детальной информации см. mldivide.
TFORM=cp2tform(input_points, base_points, 'polynomial', ORDER);
TFORM=cp2tform(CPSTRUCT, 'polynomial', order) .
Когда в типе преобразований указан параметр 'polynomial', можно использовать оптимальное определение полинома. Степень может быть скалярной величиной – 2, 3 или 4. Если не указывать степень, то по умолчанию она равна 3.
TFORM=cp2tform(input_points, base_points, 'lwm', N);
TFORM=cp2tform(CPSTRUCT, 'lwm',N) .
Когда в типе преобразований указан параметр 'lwm', можно оптимально определить число точек N, используемых для каждого полинома. Радиус действия значительно увеличивается, если контрольные точки используют этот полином. N соседних точек используется полиномом степени 2 для каждой пары контрольных точек. Если не указать число N, то по умолчанию оно равно 12. N может быть меньше 6, что уменьшает возможность генерации неверного полинома.
[TFORM,input_points,base_points,input_points_bad,base_points_bad]=
cp2tform(input_points,base_points,'piecewise linear');
[TFORM,input_points,base_points,input_points_bad,base_points_bad]=
cp2tform(CPSTRUCT,'piecewise linear') .
Когда в типе преобразований указан параметр 'lwm', то функция cp2tform возвращает оптимальные контрольные точки, которые используются в input_points и base_points, а также возвращает два массива input_points_bad и base_points_bad, которые содержат устраненные контрольные точки.
Алгоритм:
Функция cp2tform использует следующие основные процедуры:
1. Использование пар контрольных точек для вывода пространственных преобразований.
2. Возвращение TFORM структуры, содержащей пространственные преобразования.
Процедуры изменяются в зависимости от типа преобразований “transformtype”.
Линейные конформные преобразования.
Линейные конформные преобразования содержат в себе вращение, масштабирование и перемещение. Форма и углы сохраняются. Параллельные линии остаются параллельными. Прямые линии остаются прямыми.
sc=scale*cos(angle);
ss=scale*sin(angle);
[u v]=[x y 1]*[ sc –ss ss sc tx ty] .
Для sc, ss, tx, ty найдем:
t_lc=cp2tform(input_points, base_points, 'linear conformal') .
Коэффициенты инверсного представления хранятся в t_lc.tdata.Tinv. Линейные конформные преобразования являются частным случаем аффинных преобразований t_lc.forward_fcn в @affine_fwd и t_lc.inverse_fcn в @affine_inv. При минимальных двух парах контрольных точек необходимо найти четыре неизвестных коэффициента.
Аффинные преобразования.
В аффинных преобразованиях, размерности x и y независимо масштабируются и далее с ними проводятся последующие преобразования. Параллельные линии остаются параллельными. Прямые линии остаются прямыми. Линейные конформные преобразования являются частным случаем аффинных преобразований.
Для аффинных преобразований:
[u v]=[x y 1]*Tinv .
Tinv является матрицей размерности 32 . Найти для 6 элементов массив Tinv.
t_affine=cp2tform(input_points, base_points, 'affine') .
Коэффициенты инверсных преобразований хранятся в t_affine.tdata.Tinv. Для минимальных 3 пар контрольных точек необходимо найти 6 неизвестных коэффициентов.
Преобразование проекций (Projective).
При проекционных преобразованиях четырехугольник представляется четырехугольником. Прямые линии преобразуются в прямые. Аффинные преобразования являются подмножеством проекционных преобразований.
Для проекционных преобразований:
[up vp wp]=[x y w]*Tinv ,
где
u=up/wp;
v=vp/wp .
Tinv является матрицей с размерностью 33.
Исходные данные
Tinv=[ A D G;B E H;C F I ];
u=(Ax+By+C)/(Gx+Hy+I);
v=(Dx+Ey+F)/(Gx+Hy+I) .
Найти для 9 элементов Tinv.
t_proj=cp2tform(input_points, base_points, 'projective') .
Коэффициенты инверсных преобразований содержатся в t_proj.tdata.Tinv. При минимальных 4 парах контрольных точек находятся 9 неизвестных коэффициентов.
Полиномиальные преобразования (Polynomial).
При полиномиальных преобразованиях, полиномиальная функция от x и y является детерминированной.
Второй порядок полинома
Для полиномиальных преобразований второго порядка:
[u v]=[1 x y x*y x^2 y^2]*Tinv .
u и v являются полиномами второго порядка от x и y. Каждый полином второго порядка имеет шесть термов. При определении всех коэффициентов размерность Tinv равна 62.
t_poly_ord2=cp2tform(input_points, base_points, 'polynomial') .
Коэффициенты инверсных преобразований хранятся в t_poly_ord2.tdata. Для минимальных 6 пар контрольных точек необходимо определить 12 неизвестных коэффициентов.
Третий порядок полинома
Для полиномиальных преобразований третьего порядка:
[u v]=[1 x y x*y x^2 y^2 y*x^2 x*y^2 x^3 y^3]*Tinv .
u и v являются полиномами третьего порядка от x и y. Каждый полином третьего порядка имеет десять термов. При определении всех коэффициентов размерность Tinv равна 102.
t_poly_ord3=cp2tform(input_points, base_points, 'polynomial',3) .
Коэффициенты инверсных преобразований хранятся в t_poly_ord3.tdata. Для минимальных 10 пар контрольных точек необходимо определить 20 неизвестных коэффициентов.
Четвертый порядок полинома
Для полиномиальных преобразований четвертого порядка:
[u v]=[1 x y x*y x^2 y^2 y*x^2 x*y^2 x^3 y^3]*Tinv .
u и v являются полиномами четвертого порядка от x и y. Каждый полином четвертого порядка имеет пятнадцать термов. При определении всех коэффициентов размерность Tinv равна 152.
t_poly_ord4=cp2tform(input_points, base_points, 'polynomial',4) .
Коэффициенты инверсных преобразований хранятся в t_poly_ord4.tdata. Для минимальных 15 пар контрольных точек необходимо определить 30 неизвестных коэффициентов.
Кусочно–линейные преобразования.
При кусочно–линейных преобразованиях линейные аффинные преобразования применяются отдельно к каждому участку изображения [1]. Для этого необходимо:
1. Найти триангуляционную свертку для основных контрольных точек.
2. Использовать три вертикали для каждой триангуляции и вывода аффинных преобразований основных исходных координат.
Локальное взвешенное средние.
Для каждой контрольной точки в in base_points необходимо:
1.Найти N близких контрольных точек.
2.Использовать эти N точек и соответствующие им точки в input_points для вывода полинома второго порядка.
3.Вычислить радиус воздействия этого полинома как расстояние от центра контрольной точки к самой дальней точке, использовав выведенный полином (используя base_points) [2].
Пример:
I=checkerboard;
J=imrotate(I, 30);
base_points=[11 11; 41 71];
input_points=[14 44; 70 81];
cpselect(J, I, input_points, base_points);
t=cp2tform(input_points, base_points, 'linear conformal') .
Для обратного получения углов и масштабов:
ss=t.tdata.Tinv(2,1); %ss=scale*sin(angle);
sc=t.tdata.Tinv(1,1); % sc=scale*cos(angle);
angle=atan2(ss,sc)*180/pi;
scale=sqrt(ss*ss+sc*sc) .
Сопутствующие функции: CPCORR, CPSELECT, CPSTRUCT2PAIRS, IMTRANSFORM.
Ссылки:
1. Ardeshir Goshtasby, Piecewise linear mapping functions for image registration, Pattern Recognition, Vol 19, pp. 459–466, 1986.
2. Ardeshir Goshtasby, Image registration by local approximation methods, Image and Vision Computing, Vol 6, p. 255–261, 1988.
В оглавление \ К следующему разделу \ К предыдущему разделу
I Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
II Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2004 г.) На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro E-mail: matlab@exponenta.ru Информация на сайте была обновлена 14.05.05 Copyright 2001-2005 SoftLine Co
Наши баннеры hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=58396&im=33&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("") >