Main Content

fitgeotrans

(不推荐)根据控制点对组进行几何变换拟合

不建议使用 fitgeotrans。请改用 fitgeotform2d 函数。有关详细信息,请参阅兼容性注意事项

说明

示例

tform = fitgeotrans(movingPoints,fixedPoints,tformType) 根据控制点对组 movingPointsfixedPoints 进行 tformType 类型的线性几何变换拟合。

tform = fitgeotrans(movingPoints,fixedPoints,"polynomial",degree) 根据控制点对组 movingPointsfixedPoints 进行 PolynomialTransformation2D 对象拟合。指定多项式变换的次数,可以是 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")

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

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

创建可用于对齐两个图像的仿射几何变换。

tform = fitgeotform2d(movingPoints,fixedPoints,"similarity");

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

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

输入参数

全部折叠

运动图像中的控制点,指定为 m×2 矩阵。每行指定一个控制点的 (x, y) 坐标。

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

数据类型: double | single

固定图像中的控制点,指定为 m×2 矩阵。每行指定一个控制点的 (x, y) 坐标。

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

数据类型: double | single

线性变换的类型,指定为 "nonreflectivesimilarity""similarity""affine""projective"。有关详细信息,请参阅变换类型

数据类型: char | string

多项式的次数,指定为整数 234

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

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

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

输出参量

全部折叠

变换,以几何变换对象形式返回。对象的类型取决于变换类型。

变换类型

几何变换对象
"nonreflectivesimilarity"affine2d
"similarity"affine2d
"affine"affine2d
"projective"projective2d
"polynomial"PolynomialTransformation2D
"pwl"PiecewiseLinearTransformation2D
"lwm"LocalWeightedMeanTransformation2D

详细信息

全部折叠

变换类型

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

变换类型

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

Original and transformed checkerboard image. The transformed image appears rotated 45 degrees counter-clockwise.

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

Original and transformed checkerboard image. The transformed image appears rotated 45 degrees counter-clockwise and reflected along its vertical axis.

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

Original and transformed checkerboard image. The transformed image appears sheared in the horizontal direction.

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

Original and transformed checkerboard image. The transformed image appears tilted out of plane of the image.

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

6(2 阶)

10(3 阶)

15(4 阶)

Original and transformed checkerboard image. The transformed image appears curved.

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

Original and transformed checkerboard image. The right side of the transformed image appears stretched horizontally.

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

Original and transformed checkerboard image. The transformed image appears nonuniformly stretched.

参考

[1] Goshtasby, Ardeshir. “Piecewise Linear Mapping Functions for Image Registration.” Pattern Recognition 19, no. 6 (January 1986): 459–66. https://doi.org/10.1016/0031-3203(86)90044-0.

[2] Goshtasby, Ardeshir. “Image Registration by Local Approximation Methods.” Image and Vision Computing 6, no. 4 (November 1988): 255–61. https://doi.org/10.1016/0262-8856(88)90016-9.

扩展功能

版本历史记录

在 R2013b 中推出

全部展开

R2022b: 不推荐

从 R2022b 开始,大多数 Image Processing Toolbox™ 函数都使用前乘约定来创建和执行几何变换。但是,fitgeotrans 函数使用后乘约定来估计线性几何变换。虽然当前没有删除 fitgeotrans 的计划,但您可以通过切换到支持前乘约定的 fitgeotform2d 函数来简化几何变换工作流。有关详细信息,请参阅Migrate Geometric Transformations to Premultiply Convention

要更新您的代码,请将函数名称 fitgeotrans 的实例更改为 fitgeotform2d。您还必须更改这两种变换类型的 tformType 的值:

  • "nonreflectivesimilarity" 替换为 "similarity""similarity" 变换类型支持平移、旋转和缩放,但不支持翻转。

  • "similarity" 替换为 "reflectivesimilarity""reflectivesimilarity" 变换支持平移、旋转、缩放和翻转。

您不需要更改其他参量。

不推荐使用推荐的替代项

此示例使用 fitgeotrans 函数从三个控制点对组估计二维仿射变换。

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotrans(mp,fp,"affine");

此示例使用 fitgeotform 函数从三个控制点对组估计二维仿射变换。

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotform2d(mp,fp,"affine");

此示例估计仅包含平移、旋转和各向同性缩放的二维仿射变换。

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotrans(mp,fp,"nonreflectivesimilarity");

此示例估计仅包含平移、旋转和各向同性缩放的二维仿射变换。

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotform2d(mp,fp,"similarity");

此示例估计仅包含平移、旋转、各向同性缩放和翻转的二维仿射变换。

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotrans(mp,fp,"similarity");

此示例估计仅包含平移、旋转、各向同性缩放和翻转的二维仿射变换。

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotform2d(mp,fp,"reflectivesimilarity");