cp2tform

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

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

Описание

пример

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

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

tform = cp2tform(movingPoints,fixedPoints,'lwm',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