exponenta event banner

cp2tform

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

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

Описание

пример

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 - структура, созданная инструментом «Выбор контрольной точки» (cpselect) при выборе параметра «Экспорт точек в рабочее пространство». Дополнительные сведения см. в разделе Экспорт контрольных точек в рабочую область.

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

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

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

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

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

свернуть все

Преобразование, возвращенное как структура.

Движущиеся контрольные точки, которые использовались для вывода пространственного преобразования, возвращались в виде матрицы 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.

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

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

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

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

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

Примечание

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

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

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

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

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

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

Примечание

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

Ссылки

[1] Гоштасби, Ардешир, «Кусочно-линейные картографические функции для регистрации изображения», Распознавание образов, том 19, 1986, стр. 459-466.

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

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