cp2tform

Выведите пространственное преобразование из пар контрольной точки

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

Синтаксис

tform = cp2tform(movingPoints,fixedPoints,transformationType)
tform = cp2tform(movingPoints,fixedPoints,'polynomial',degree)
tform = cp2tform(movingPoints,fixedPoints,'lwm',n)
tform = cp2tform(movingPoints,fixedPoints,'piecewise linear')
[tform,usedMP,usedFP,badMP,badFP] = cp2tform(movingPoints,fixedPoints,'piecewise linear')
tform = cp2tform(cpstruct,transformationType,___)
[tform,usedMP,usedFP] = cp2tform(cpstruct,transformationType,___)

Описание

пример

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

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

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

Тип преобразования, заданного как одно из следующих, перечисленного в порядке увеличивающейся сложности. Функция 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 является структурой, произведенной инструментом Control Point Selection (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-by-2 матрица. Несопоставленные и предсказанные точки не используются.

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

Фиксированные контрольные точки, которые были устранены, потому что они были полны решимости быть выбросами, возвратились как p-by-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.

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

Примечание

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

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

Или, как это, для 3х3 Tinv:

[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.

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

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

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

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

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

Примечание

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

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

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

  1. Найдите N самыми близкими контрольными точками.

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

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

Примечание

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

Ссылки

[1] Goshtasby, Ardeshir, "Кусочное линейное отображение функционирует для регистрации изображений", Распознавание образов, Издание 19, 1986, стр 459-466.

[2] Goshtasby, Ardeshir, "Регистрация изображений локальными методами приближения", Изображение и Вычисление Видения, Издание 6, 1988, стр 255-261.

Смотрите также

| | | | |

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