scipy.ndimage.

affine_transform#

scipy.ndimage.affine_transform(input, matrix, offset=0.0, output_shape=None, output=None, order=3, mode='constant', cval=0.0, prefilter=True)[source]#

应用仿射变换。

给定输出图像像素索引向量 o,像素值由输入图像中位置 np.dot(matrix, o) + offset 处的值决定。

此函数执行“拉取”(或“反向”)重采样,将输出空间转换为输入空间以定位数据。仿射变换通常以“推入”(或“正向”)方向描述,将输入转换为输出。如果您有“推入”变换的矩阵,请在此函数中使用其逆矩阵 (numpy.linalg.inv)。

参数:
input类数组

输入数组。

matrixndarray

逆坐标变换矩阵,将输出坐标映射到输入坐标。如果 ndiminput 的维度数,则给定矩阵必须具有以下形状之一

  • (ndim, ndim): 每个输出坐标的线性变换矩阵。

  • (ndim,): 假设二维变换矩阵是对角矩阵,对角线由给定值指定。然后将使用更有效的算法来利用问题的可分离性。

  • (ndim + 1, ndim + 1): 假设变换使用齐次坐标 [1] 指定。在这种情况下,传递给 offset 的任何值都会被忽略。

  • (ndim, ndim + 1): 与上述情况相同,但齐次变换矩阵的底行始终为 [0, 0, ..., 1],可以省略。

offsetfloat 或序列,可选

应用变换的数组偏移量。如果为浮点数,则 offset 对于每个轴都相同。如果为序列,则 offset 应包含每个轴的一个值。

output_shape整数元组,可选

形状元组。

output数组或 dtype,可选

要放置输出的数组,或返回数组的 dtype。默认情况下,将创建与 input 相同 dtype 的数组。

orderint,可选

样条插值的阶数,默认为 3。阶数必须在 0-5 之间。

mode{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’},可选

mode 参数决定如何扩展输入数组超出其边界。默认值为‘constant’。每个有效值的行为如下所示(请参阅 边界模式 上的附加绘图和详细信息)

‘reflect’ (d c b a | a b c d | d c b a)

通过关于最后一个像素边缘的反射来扩展输入。此模式有时也称为半样本对称。

‘grid-mirror’

这是‘reflect’ 的同义词。

‘constant’ (k k k k | a b c d | k k k k)

通过用由 cval 参数定义的相同常数值填充超出边缘的所有值来扩展输入。在输入边缘之外不执行插值。

‘grid-constant’ (k k k k | a b c d | k k k k)

通过用由 cval 参数定义的相同常数值填充超出边缘的所有值来扩展输入。对于输入范围之外的样本,也会发生插值。

‘nearest’ (a a a a | a b c d | d d d d)

通过复制最后一个像素来扩展输入。

‘mirror’ (d c b | a b c d | c b a)

通过关于最后一个像素中心的反射来扩展输入。此模式有时也称为全样本对称。

‘grid-wrap’ (a b c d | a b c d | a b c d)

通过围绕到相反边缘来扩展输入。

‘wrap’ (d b c d | a b c d | b c a b)

通过围绕到相反边缘来扩展输入,但以最后一点和初始点完全重叠的方式进行。在这种情况下,重叠点的样本选择不是很好定义的。

cval标量,可选

如果 mode 为‘constant’,则填充输入边缘之外的值。默认值为 0.0。

prefilterbool,可选

确定是否在插值之前使用 spline_filter 对输入数组进行预滤波。默认值为 True,如果 order > 1,则将创建一个用于滤波值的临时 float64 数组。如果将其设置为 False,则如果 order > 1,则输出会略微模糊,除非输入是预滤波的,即它是对原始输入调用 spline_filter 的结果。

返回值:
affine_transformndarray

变换后的输入。

注释

给定的矩阵和偏移量用于通过仿射变换为输出中的每个点找到输入中的对应坐标。输入在这些坐标处的值通过请求阶数的样条插值确定。输入边界之外的点根据给定模式填充。

版本 0.18.0 中的变更: 以前,仿射变换的确切解释取决于矩阵是作为一维数组还是二维数组提供。如果将一维数组提供给矩阵参数,则输出像素值在索引 o 处由输入图像中位置 matrix * (o + offset) 处的值决定。

对于复数 input,此函数独立地变换实部和虚部。

版本 1.6.0 中的新增功能: 添加了复数支持。

参考文献