本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

fitgeotrans

对控制点对组进行几何变换拟合

说明

示例

tform = fitgeotrans(movingPoints,fixedPoints,transformationType) 获取控制点对组 movingPointsfixedPoints,并使用它们来推断 transformationType 指定的几何变换。

tform = fitgeotrans(movingPoints,fixedPoints,'polynomial',degree) 对控制点对组 movingPointsfixedPoints 进行 PolynomialTransformation2D 对象拟合。指定多项式变换的次数 degree,可以是 2、3 或 4。

tform = fitgeotrans(movingPoints,fixedPoints,'pwl') 对控制点对组 movingPointsfixedPoints 进行 PiecewiseLinearTransformation2D 对象拟合。这种变换通过将平面分解成局部分段线性区域来映射控制点。不同仿射变换映射每个局部区域中的控制点。

tform = fitgeotrans(movingPoints,fixedPoints,'lwm',n) 对控制点对组 movingPointsfixedPoints 进行 LocalWeightedMeanTransformation2D 对象拟合。局部加权均值变换通过使用相邻控制点在每个控制点上推断多项式来创建映射。在任何位置上的映射都取决于这些多项式的加权平均值。函数使用 n 个最近点来推断每个控制点对组的二次多项式变换。

示例

全部折叠

此示例说明如何创建可用于对齐两个图像的几何变换。

创建棋盘图像,并将其旋转以创建未对齐的图像。

I = checkerboard(40);
J = imrotate(I,30);
imshowpair(I,J,'montage')

在固定图像(棋盘)和运动图像(旋转后的棋盘)上定义一些匹配的控制点。您可以使用 Control Point Selection 工具以交互方式定义点。

fixedPoints = [41 41; 281 161];
movingPoints = [56 175; 324 160];

创建可用于对齐两个图像的几何变换,以 affine2d 几何变换对象形式返回。

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = 
  affine2d with properties:

    Dimensionality: 2
                 T: [3x3 double]

使用 tform 估计值对旋转后的图像重采样,将其与固定图像配准。错误颜色叠加图像中的着色区域(绿色和品红色)表示配准错误。错误的原因是控制点之间缺乏精确的对应关系。

Jregistered = imwarp(J,tform,'OutputView',imref2d(size(I)));
figure
imshowpair(I,Jregistered)

检查平行于 x 轴的单位向量的旋转和拉伸情况,以还原变换的角度和缩放。

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

输入参数

全部折叠

要变换的图像中控制点的 x 和 y 坐标,指定为 m×2 双精度矩阵。

示例: movingPoints = [11 11; 41 71];

数据类型: double | single

固定图像中控制点的 x 和 y 坐标,指定为 m×2 双精度矩阵。

示例: fixedPoints = [14 44; 70 81];

数据类型: double | single

变换类型,指定为以下类型之一:'nonreflectivesimilarity''similarity''affine''projective'。有关详细信息,请参阅变换类型

数据类型: char | string

多项式的次数,指定为整数 2、3 或 4。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

用于局部加权均值计算的点数,指定为数值。n 最小为 6,但 n 值较小时容易生成病态多项式

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出参数

全部折叠

变换,以变换对象形式返回。对象的类型取决于变换类型。例如,如果您指定变换类型 'affine',则 tformaffine2d 对象。如果您指定 'pwl',则 tformimage.geotrans.PiecewiseLinearTransformation2d 对象。

详细信息

全部折叠

变换类型

下表按复杂度顺序列出 fitgeotrans 支持的所有变换类型。

变换类型

说明控制点对组的最小数量示例
'nonreflective similarity'当运动图像中的形状保持不变,但图像因某种程度的平移、旋转和缩放而失真时,请使用此变换。直线保持笔直,平行线仍保持平行。 2

'similarity''nonreflective similarity' 相同,只是增加了翻转(可选)。3

'affine'当运动图像中的形状呈现剪切时,请使用此变换。直线保持笔直,平行线仍保持平行,但矩形变为平行四边形。3

'projective'当场景出现倾斜时,请使用此变换。直线保持笔直,但平行线向消失点收敛。4

'polynomial'当图像中的对象弯曲时,请使用此变换。多项式的阶数越高,拟合越好,但结果可能比固定图像包含更多曲线。

6(2 阶)

10(3 阶)

15(4 阶)

'pwl'当图像的各个部分失真程度不同时,请使用此变换(分段线性)。4

'lwm'当失真在局部有所变化、用分段线性不足以表示时,请使用此变换(局部加权均值)。 6(推荐 12)

参考

[1] Goshtasby, Ardeshir, "Piecewise linear mapping functions for image registration," Pattern Recognition, Vol. 19, 1986, pp. 459-466.

[2] Goshtasby, Ardeshir, "Image registration by local approximation methods," Image and Vision Computing, Vol. 6, 1988, pp. 255-261.

扩展功能

在 R2013b 中推出