文档

cp2tform

从控制点对推断空间变换

cp2tform不建议使用。使用fitgeotrans代替。

语法

TFORM = cp2tform(movingPoints,fixedPoints, transformtype)
TFORM = cp2tform(CPSTRUCT, transformtype)
[TFORM, movingPoints, fixedPoints] = cp2tform(CPSTRUCT,…)
TFORM = cp2tform(movingPoints,fixedPoints, '多项式',order)
TFORM = cp2tform(CPSTRUCT,'多项式',order)
TFORM = cp2tform(movingPoints,fixedPoints,'分段线性')
TFORM = cp2tform(CPSTRUCT,'分段线性')
TFORM = cp2tform(movingPoints,fixedPoints,'lwm', N)
TFORM = cp2tform(CPSTRUCT, 'lwm', N)
[TFORM, movingPoints, fixedPoints, movingPoints_bad, fixedPoints_bad] = cp2tform(movingPoints, fixedPoints, '分段线性')
[TFORM, movingPoints, fixedPoints, movingPoints_bad, fixedPoints_bad] = cp2tform(CPSTRUCT, '分段线性')

描述

TFORM= cp2tform (movingPoints定点transformtype从控制点对推断空间转换,并将此转换作为a返回TFORM结构。

TFORM= cp2tform (CPSTRUCTtransformtype工作在CPSTRUCT结构,该结构包含移动和固定图像的控制点矩阵。控制点选择工具,cpselect,创建CPSTRUCT

TFORMmovingPoints定点= cp2tform(CPSTRUCT,……)返回中使用的控制点movingPoints而且定点.不使用未匹配点和预测点。看到cpstruct2pairs

TFORM= cp2tform (movingPoints定点,“多项式”,顺序)让你指定多项式的使用顺序。

TFORM= cp2tform (CPSTRUCT多项式,秩序工作在CPSTRUCT结构。

TFORM= cp2tform (movingPoints定点分段线性的创建固定控制点的Delaunay三角剖分,并将相应的移动控制点映射到固定控制点。映射对于每个三角形都是线性的(仿射),并且在控制点上是连续的,但不是连续可微的,因为每个三角形都有自己的映射。

TFORM= cp2tform (CPSTRUCT分段线性的工作在CPSTRUCT结构。

TFORM= cp2tform (movingPoints定点“lwm”N通过使用相邻控制点在每个控制点推断一个多项式来创建映射。任何位置的映射依赖于这些多项式的加权平均。你可以选择指定点数,N,用于推断每个多项式。的N最接近点用于推断每个控制点对的2阶多项式。如果你省略了N,默认为12。N可以小到6,但是制造N产生病态多项式的小风险。

TFORM= cp2tform (CPSTRUCT“lwm”N工作在CPSTRUCT结构。

TFORMmovingPoints定点movingPoints_badfixedPoints_bad= cp2tform(movingPoints定点分段线性的返回中使用的控制点movingPoints而且定点控制点被消除了因为它们是退化折叠三角形的中间顶点movingPoints_bad而且fixedPoints_bad

TFORMmovingPoints定点movingPoints_badfixedPoints_bad= cp2tform(CPSTRUCT分段线性的工作在CPSTRUCT结构

输入参数

movingPoints

2,矩阵中包含x- - -y-你想变换的图像中控制点的坐标。

定点

2,矩阵中包含x- - -y-固定图像中控制点的坐标。

transformtype

指定要推断的空间转换类型。的cp2tform函数需要最少数量的控制点对来推断每种转换类型的结构。下表列出了支持的所有转换类型万博1manbetxcp2tform按复杂程度排序。的“lwm”而且多项式的转换类型可以有一个可选的附加参数参数

转换类型

CPSTRUCT

包含移动和固定图像的控制点矩阵的结构。使用控制点选择工具(cpselect),以创建CPSTRUCT

多项式,秩序

指定要使用的多项式的顺序。订单可以是2、3或4。

默认值:3.

分段线性的

每一块都是线性的,连续的,不可连续微的。

“lwm”

局部加权平均值。

N

点数。

输出参数

TFORM

结构包含空间变换。

movingPoints

移动控制点用来推断空间变换。不使用未匹配点和预测点。

定点

固定的控制点用于推断空间变换。不使用未匹配点和预测点。

movingPoints_bad

移动控制点被排除,因为它们被确定为异常值。

fixedPoints_bad

固定控制点被排除,因为它们被确定为异常值。

例子

转换图像,使用cp2tform函数返回变换,并比较的角度和尺度TFORM到原变换的角度和尺度:

I =棋盘;J = imrotate(I,30);fixedPoints = [11 11;41 71];movingPoints = [14 44;70 81);cpselect (J,我,movingPoints定点);t = cp2tform(movingPoints,fixedPoints,'非反射相似性');通过检查平行于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)

提示

  • transformtype“无反射相似”“相似”仿射的“射影”,或多项式的,movingPoints而且定点(或CPSTRUCT)拥有某一特定转换所需的最少控制点数目,cp2tform准确地求出系数。

  • 如果movingPoints而且定点当控制点个数大于最小值时,求出最小二乘解。看到mldivide

  • movingPoints定点相对于它们的原点(相对于它所涵盖的值范围)有较大的偏移,cp2tform在拟合a之前,将点移动到其边界框的原点中心TFORM结构。这增强了数值稳定性,并通过以原点为中心包装透明地处理TFORM在一个定制中TFORM这将根据需要自动应用和撤消坐标移位。结果,字段(T)可以为不同的坐标输入给出不同的结果,甚至对于相同的转换类型。

算法

全部折叠

cp2tform使用以下一般程序:

  1. 使用有效的控制点对从输出空间推断空间变换或逆映射(xy)到输入空间(xy)根据transformtype

  2. 返回TFORM包含空间转换的结构。

操作步骤因类型而异transformtype

无反射相似

非反射性相似转换可以包括旋转、缩放和平移。形状和角度被保留。平行线保持平行。直线保持直线。

Sc =比例尺*cos(角度)ss =比例尺*sin(角度)[u v] = [x y 1] * [Sc -ss ss Sc tx ty]

解出sc党卫军tx,

相似

相似转换可以包括旋转、缩放、平移和反射。形状和角度被保留。平行线保持平行。直线保持直线。

Sc = s*cos(theta) ss = s*sin(theta) [Sc -a*-ss [u v] = [x y 1] * ss a* Sc tx ty]

解出sc党卫军tx,一个.如果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 + + I)为什么v = (Dx +是+ F) / (Gx + + 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,'多项式');

逆映射的系数存储在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.每个三阶多项式有10项。为了指定所有系数,Tinv大小为10 × 2。

t_poly_ord3 = cp2tform(movingPoints, fixedPoints,'多项式',3);

逆映射的系数存储在t_poly_ord3.tdata

求解这20个未知系数至少需要10个控制点对。

四阶多项式

对于四阶多项式变换:

[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. 利用每个三角形的三个顶点,推断出从固定坐标到移动坐标的仿射映射。

请注意

至少需要四个控制点对。四对会得到两个映射不同的三角形。

局部加权平均

对于每个控制点定点

  1. 找到N最近的控制点。

  2. 使用这些N点及其对应的点在movingPoints来推断一个二阶多项式。

  3. 计算该多项式的影响半径,即从中心控制点到用于推断该多项式的最远点的距离(使用定点[2]

请注意

求解二阶多项式至少需要6个控制点对。如果使用的多项式对太少,可能会导致病态多项式。

参考文献

[1] Goshtasby, Ardeshir,“用于图像配准的分段线性映射函数”,模式识别,第19卷,1986,第459-466页。

[2] Goshtasby, Ardeshir,“局部逼近方法的图像配准”,图像与视觉计算,第6卷,1988,第255-261页。

R2006a之前介绍

这个话题有用吗?