cp2tform

Вывод пространственного преобразования из пар точек управления

cp2tform не рекомендуется. Использовать fitgeotrans вместо этого.

Описание

пример

tform = cp2tform(movingPoints,fixedPoints,transformationType) выводит пространственное преобразование из пар точек управления и возвращает это преобразование как tform структура. Некоторые из типов преобразования имеют необязательные дополнительные параметры, показанные в следующих синтаксисах.

tform = cp2tform(movingPoints,fixedPoints,'polynomial',degree) позволяет вам задать порядок используемых полиномов.

tform = cp2tform(movingPoints,fixedPoints,'lwm',n) создает отображение путем вывода полинома в каждой контрольной точке с помощью соседних контрольных точек. Отображение в любом месте зависит от взвешенного среднего значения из этих полиномов. Можно опционально задать число точек, n, используется для вывода каждого полинома. The n ближайшие точки используются, чтобы вывести полином порядка 2 для каждой пары контрольных точек.

tform = cp2tform(movingPoints,fixedPoints,'piecewise linear') создает триангуляцию Делоне фиксированных управляющих точек и сопоставляет соответствующие движущиеся управляющие точки с фиксированными управляющими точками. Отображение является линейным (аффинным) для каждого треугольника и непрерывным через контрольные точки, но не непрерывно дифференцируемым, поскольку каждый треугольник имеет свое собственное отображение.

[tform,usedMP,usedFP,badMP,badFP] = cp2tform(movingPoints,fixedPoints,'piecewise linear') возвращается в usedMP и usedFP контрольные точки, которые использовались для кусочно-линейного преобразования. Этот синтаксис также возвращается в badMP и badFP контрольные точки, которые были устранены, потому что они были средними вершинами вырожденных треугольников с обратным поворотом.

tform = cp2tform(cpstruct,transformationType,___) использует cpstruct структура для хранения координат контрольной точки движущихся и фиксированных изображений.

[tform,usedMP,usedFP] = cp2tform(cpstruct,transformationType,___) также возвращается в usedMP и usedFP контрольные точки, которые использовались для преобразования. Несопоставленные и предсказанные точки не используются. Посмотрите cpstruct2pairs.

Примеры

Используйте управляющие точки, чтобы создать нерефлективную структуру преобразования подобия

Преобразуйте изображение, используйте cp2tform функция, чтобы вернуть преобразование и сравнить угол и шкалу tform к углу и шкале исходного преобразования:

I = checkerboard;
J = imrotate(I,30);
fixedPoints = [11 11; 41 71];
movingPoints = [14 44; 70 81];
cpselect(J,I,movingPoints,fixedPoints);
 
t = cp2tform(movingPoints,fixedPoints,'nonreflective similarity');

Восстановите угол и шкалу, проверяя, как модуль, параллельный оси x, поворачивается и растягивается .

u = [0 1]; 
v = [0 0]; 
[x, y] = tformfwd(t,u,v); 
dx = x(2) - x(1); 
dy = y(2) - y(1); 
angle = (180/pi) * atan2(dy, dx) 
scale = 1 / sqrt(dx^2 + dy^2)

Входные параметры

свернуть все

Управляйте точками в движущемся изображении, заданном как матрица m -by-2. Каждая строка задает координаты [x y] контрольной точки.

Пример: [11 11; 41 71]

Типы данных: double

Управляющие точки в фиксированном изображении, заданные как матрица m -by-2. Каждая строка задает координаты [x y] контрольной точки.

Пример: [14 44; 70 81]

Типы данных: double

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

Тип преобразования

Описание

Минимальное количество пар точек управления

Пример

'nonreflective similarity'

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

2

'similarity'

То же, что и 'nonreflective similarity' с сложением необязательного отражения.

3

'affine'

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

3

'projective'

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

4

'polynomial'

Используйте это преобразование, когда объекты на изображении изогнуты. Чем выше порядок полинома, тем лучше подгонка, но результат может содержать больше кривых, чем фиксированное изображение.

Можно задать degree полинома.

6 (порядок 2)

10 (порядок 3)

15 (порядок 4)

'piecewise linear'

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

4

'lwm'

Используйте это преобразование (локальное взвешенное среднее), когда искажение изменяется локально и кусочно-линейное не является достаточным.

Вы можете задать номер n точек для использования в локальном взвешенном среднем вычислении.

6 (12 рекомендуемых)

Типы данных: char

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

cpstruct - структура, созданная инструментом «Выбор контрольной точки» (cpselect) при выборе опции Export Points to Workspace. Дополнительные сведения см. в разделе Экспорт контрольных точек в рабочую область.

Типы данных: struct

Степень полиномиального преобразования, заданная как целое число 2, 3, или 4.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

Выходные аргументы

свернуть все

Преобразование, возвращенное как struct.

Движущиеся управляющие точки, которые использовались для вывода пространственного преобразования, возвращаются как матрица n -by-2. Несопоставленные и предсказанные точки не используются.

Фиксированные управляющие точки, которые использовались для вывода пространственного преобразования, возвращенные как n-на-2 матрица. Несопоставленные и предсказанные точки не используются.

Движущиеся контрольные точки, которые были устранены, потому что они были определены как выбросы, возвращены как матрица p-на-2.

Фиксированные контрольные точки, которые были устранены, потому что они были определены как выбросы, возвращенные как матрица p-на-2.

Совет

  • Когда transformtype является 'nonreflective similarity', 'similarity', 'affine', 'projective', или 'polynomial', и movingPoints и fixedPoints (или cpstruct) иметь минимальное количество контрольных точек, необходимых для конкретного преобразования, cp2tform находит коэффициенты точно.

  • Если movingPoints и fixedPoints иметь больше, чем минимальное количество контрольных точек, найдено решение методом наименьших квадратов. Посмотрите mldivide.

  • Когда либо movingPoints или fixedPoints имеет большое смещение относительно их источника (относительно области значений значений, которые она охватывает), cp2tform смещает точки в центр их ограничивающего прямоугольника на источник перед аппроксимацией tform структура. Это повышает числовую стабильность и обрабатывается прозрачно путем переноса центрированного по началу координат tform в пользовательском tform это автоматически применяет и отменяет сдвиг координат при необходимости. В результате fields(T) может дать различные результаты для различных входных входов координат, даже для того же типа преобразования.

Алгоритмы

свернуть все

cp2tform использует следующую общую процедуру:

  1. Используйте действительные пары управляющих точек, чтобы вывести пространственное преобразование или обратное отображение из выходного пространства (x, y) во входное пространство (x, y) согласно transformtype.

  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.

Подобие

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

Давайте

sc = s*cos(theta)
ss = s*sin(theta)

                   [ sc -a*-ss
 [u v] = [x y 1] *   ss  a*sc
                     tx  ty]

Решение для sc, ss, tx, ty, и a. Если a = -1, отражение включено в преобразование. Если a = 1, отражение не включено в преобразование.

Аффинно

При аффинном преобразовании x и y размерности могут быть масштабированы или срезаны независимо, и может быть перемещение. Параллельные линии остаются параллельными. Прямые линии остаются прямыми. Нерефлективные преобразования подобия являются подмножеством аффинных преобразований.

Для аффинного преобразования,

[u v] = [x y 1] * Tinv

Tinv является матрицей 3 на 2. Решите для шести элементов Tinv:

t_affine = cp2tform(movingPoints,fixedPoints,'affine');

Коэффициенты обратного отображения сохранены в t_affine.tdata.Tinv.

Для решения этих шести неизвестных коэффициентов необходимы по меньшей мере три пары контрольной точки.

Проективный

В проективном преобразовании квадрилатералы отображаются на квадрилатералы. Прямые линии остаются прямыми. Аффинные преобразования являются подмножеством проективных преобразований.

Для проективного преобразования,

[up vp wp] = [x y w] * Tinv

где

u = up/wp 
v = vp/wp

Tinv является матрицей 3 на 3.

Принятие

Tinv = [ A D G;
         B E H;
         C F I ];
u = (Ax + By + C)/(Gx + Hy + I)
v = (Dx + Ey + F)/(Gx + Hy + I)

Решите для девяти элементов Tinv:

t_proj = cp2tform(movingPoints,fixedPoints,'projective');

Коэффициенты обратного отображения сохранены в t_proj.tdata.Tinv.

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

Примечание

Аффинное или проективное преобразование также может быть выражено так, для Tinv 3 на 2:

[u v]'  =  Tinv' * [x y 1]' 

Или, вот так, для Tinv 3 на 3:

[u v 1]'  =  Tinv' * [x y 1]'

Полином

В полиномиальном преобразовании полиномиальные функции x и y определить отображение.

Полиномы второго порядка

Для полиномиального преобразования второго порядка,

[u v] = [1  x  y  x*y  x^2  y^2] * Tinv

Оба u и v являются полиномами второго порядка x и y. Каждый полином второго порядка имеет шесть членов. Чтобы задать все коэффициенты, Tinv имеет размер 6 на 2.

t_poly_ord2 = cp2tform(movingPoints,fixedPoints,'polynomial');

Коэффициенты обратного отображения сохранены в t_poly_ord2.tdata.

Для решения 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. Каждый полином третьего порядка имеет 10 членов. Чтобы задать все коэффициенты, Tinv имеет размер 10 на 2.

t_poly_ord3 = cp2tform(movingPoints, fixedPoints,'polynomial',3);

Коэффициенты обратного отображения сохранены в t_poly_ord3.tdata.

Для решения 20 неизвестных коэффициентов необходимо по меньшей мере десять пар контрольной точки.

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

Для полиномиального преобразования четвертого порядка:

[u v] = [1 x y x*y x^2 y^2 y*x^2 x*y^2 x^3 y^3 x^3*y x^2*y^2 x*y^3 x^4 y^4] * Tinv

Оба u и v являются полиномами четвертого порядка x и y. Каждый полином четвертого порядка имеет 15 членов. Чтобы задать все коэффициенты, Tinv имеет размер 15 на 2.

t_poly_ord4 = cp2tform(movingPoints, fixedPoints,'polynomial',4);

Коэффициенты обратного отображения сохранены в t_poly_ord4.tdata.

Для решения 30 неизвестных коэффициентов необходимо по меньшей мере 15 пар контрольной точки.

Кусочно-линейный

В кусочно-линейном преобразовании линейные (аффинные) преобразования применяются отдельно к каждой треугольной области изображения [1].

  1. Найдите Триангуляцию Делоне фиксированных контрольных точек.

  2. Используя три вершины каждого треугольника, выведите аффинное отображение от фиксированных до движущихся координат.

Примечание

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

Локальное взвешенное среднее

Для каждой контрольной точки в fixedPoints:

  1. Найдите N ближайшие контрольные точки.

  2. Используйте эти N точки и их соответствующие точки в movingPoints для вывода полинома второго порядка.

  3. Вычислите радиус влияния этого полинома как расстояние от центральной контрольной точки до самой дальней точки, используемой для вывода полинома (использование fixedPoints)[2].

Примечание

Для решения полинома второго порядка необходимо по меньшей мере шесть пар контрольной точки. Плохо обусловленные полиномы могут возникнуть, если используется слишком мало пар.

Ссылки

[1] Goshtasby, Ardeshir, «Кусочно-линейные функции отображения для регистрации изображений», Pattern Recognition, Vol. 19, 1986, pp. 459-466.

[2] Goshtasby, Ardeshir, «Регистрация изображений локальными методами приближения», Image and Vision Computing, Vol. 6, 1988, pp. 255-261.

Представлено до R2006a