二维和三维几何变换过程概述
要执行2-D或3-D几何转换,首先创建一个存储有关转换信息的几何转换对象。然后,将待变换的图像和几何变换对象传递给imwarp
函数。您可以选择提供关于输入图像的空间引用信息imwarp
.
imwarp
使用几何变换将输出图像中的坐标映射到输入图像中的对应坐标(逆映射)。然后,imwarp
使用坐标映射在输入图像内插值像素值并计算输出像素值。
创建几何变换对象
不同类型的几何变换对象存储关于变换的不同信息。
有几个对象存储一个表示特定类型的线性几何变换的变换矩阵。这些对象包括:
affinetform2d
,affinetform3d
,rigidtform2d
,rigidtform3d
,simtform2d
,simtform3d
,transltform2d
,transltform3d
,projtform2d
.的
geometricTransform2d
而且geometricTransform3d
对象存储逆逐点映射函数,也可选存储正向逐点映射函数。的
PolynomialTransformation2D
对象以二维多项式的形式存储逆点映射。的
LocalWeightedMeanTransformation2D
而且PiecewiseLinearTransformation2D
对象表示局部变化的点映射函数的不同形式。
有几种方法可以创建几何变换对象。
创建几何变换的方法 |
|
|
|
projective2d |
|
其他几何变换 |
---|---|---|---|---|---|---|
指定平移、旋转或缩放参数 | X | X | ||||
指定变换矩阵 | X | X | X | X | ||
指定自定义点映射函数 | X | |||||
控制点对的估计变换 | X(二维) | X(二维) | X(二维) | X | ||
利用相似度优化估计变换 | X(二维) | X(二维) | X(二维) | |||
使用相位相关估计变换 | X(二维) | X(二维) | ||||
生成随机仿射变换 | X |
指定平移、旋转或缩放参数
如果您知道平移量、旋转角度和比例因子,那么您可以通过指定这些参数来创建转换。
指定要创建的转换
transltform2d
而且transltform3d
表示转换转换的对象。指定要创建的平移、旋转角度或两者都要创建
rigidtform2d
而且rigidtform3d
表示刚性转换的对象。指定要创建的平移、旋转和各向同性比例因子的任意组合
simtform2d
而且simtform3d
表示非反射相似性转换的对象。
下面的示例定义平移和旋转角度,然后创建rigidtform2d
几何变换对象从指定的参数。
Theta = 30;翻译= [10 20.5];Tform = rigidtform2d(theta,translation)
tform = rigidtform2d with properties:维度:2旋转角度:30翻译:[10 20.5000]R: [2×2 double] A: [3×3 double]
指定变换矩阵
对于更复杂的线性几何变换,可以将变换表示为矩阵。例如,对射影变换或涉及反射、各向异性缩放、剪切或线性变换组合的仿射变换使用矩阵表示。指定转换矩阵以创建affinetform2d
,affinetform3d
,或projtform2d
对象。有关创建转换矩阵的更多信息,请参见几何变换的矩阵表示法.
的非各向同性缩放和反射的变换矩阵y轴,然后创建affinetform2d
从变换矩阵得到几何变换对象。
scaleX = 0.8;scaleY = 1.5;A = [scaleX 0 0;0 -scaleY 0;0 0 1];tform = affinetform2d(A)
tform = affinetform2d属性:维度:2 A: [3×3 double]
指定自定义点映射函数
方法创建自定义2-D和3-D几何变换geometricTransform2d
和geometricTransform3d
对象分别。
下面的示例指定了一个逆映射函数,该函数接受并返回打包(x,y)的格式。然后,该示例创建一个geometricTransform2d
几何变换对象由逆映射函数得到。
Inversefn = @(c) [c(:,1)+c(:,2),c(:,1).^2]
inversefn = function_handle价值:@ (c) [c (: 1) + c (:, 2), c(: 1) ^ 2]。
tform = geometricTransform2d(inversefn)
InverseFcn: [function_handle] ForwardFcn:[]维数:2
类似地,下面的示例创建一个geometricTransform3d
几何变换对象使用逆映射函数。该示例指定了一个逆映射函数,该函数接受并返回打包(x,y,z)的格式。
inversefn = @ (c) [c (: 1) + c (:, 2), c (: 1) - c (:, 2), c(:, 3) ^ 2]。
inversefn = function_handle价值:@ (c) [c (: 1) + c (:, 2), c (: 1) - c (:, 2), c(:, 3) ^ 2]。
tform = geometricTransform3d(inversefn)
InverseFcn: [function_handle] ForwardFcn:[]维数:3
控制点对的估计变换
控件的控制点对可以创建几何转换对象fitgeotform2d
函数。的fitgeotform2d
函数自动从这些点估计转换,并返回一个几何转换对象。
不同的转换需要不同数量的点。例如,仿射变换需要在每个图像中有三个非共线点(三角形),射影变换需要四个点(四边形)。
此示例定义了两对控制点,然后使用fitgeotform2d
要创建affinetform2d
几何变换对象。
movingPoints = [11 11;21 11;21日21];fixedPoints = [51 51;61 51;61 61];tform = fitgeotform2d(move points,fixedPoints,“仿射”)
tform = affinetform2d属性:维度:2 A: [3×3 double]
利用相似度优化估计变换
如果您有一个固定图像和一个稍微不对齐的移动图像,那么您可以使用imregtform
函数来估计使图像对齐的仿射几何变换。imregtform
使用常规阶梯梯度下降或1 + 1进化优化器优化两幅图像的均方或Mattes互信息相似度度量。有关更多信息,请参见为基于强度的图像配准创建一个优化器和度量.
使用相位相关估计变换
如果固定图像和移动图像严重不对齐,则可以使用imregcorr
函数估计仿射几何变换,改善图像对齐。您可以使用相似度优化来优化结果转换。
生成随机仿射变换
属性可以创建具有随机化变换参数的仿射几何变换randomAffine2d
而且randomAffine3d
功能。这些函数支持所有仿射参数,包括关于每个轴的反射、旋转、剪切和非各向同性比例因子。随机仿射变换通常被用作深度学习的数据增强技术。