当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python skimage.transform.warp用法及代码示例


用法:

skimage.transform.warp(image, inverse_map, map_args={}, output_shape=None, order=None, mode='constant', cval=0.0, clip=True, preserve_range=False)

根据给定的坐标变换扭曲图像。

参数

imagendarray

输入图像。

inverse_map转换对象,可调用 cr = f(cr, **kwargs) 或 ndarray

逆坐标图,将输出图像中的坐标转换为输入图像中对应的坐标。

根据输入图像的维度,有许多不同的选项可以定义此映射。 2-D 图像对于gray-scale 图像可以具有 2 个维度,或者具有颜色信息的 3 个维度。

  • 对于二维图像,您可以直接传递一个转换对象,例如 skimage.transform.SimilarityTransform ,或者它的倒数。

  • 对于二维图像,您可以通过(3, 3)齐次变换矩阵,例如skimage.transform SimilarityTransform.params.

  • 对于二维图像,一个函数将一个(M, 2)数组(col, row)输出图像中的坐标到它们在输入图像中的对应坐标。可以通过指定函数的额外参数map_args.

  • 对于N-D 图像,您可以直接传递坐标数组。第一个维度指定输入图像中的坐标,而后续维度确定输出图像中的位置。例如:在二维图像的情况下,您需要传递一个形状数组(2, rows, cols),其中科尔斯确定输出图像的形状,第一维包含(row, col)输入图像中的坐标。看scipy.ndimage.map_coordinates获取更多文档。

请注意,(3, 3) 矩阵被解释为齐次变换矩阵,因此如果输出的形状为 (3,) ,则不能对 3-D 输入中的值进行插值。

有关用法,请参见示例部分。

map_args字典,可选

传递给inverse_map 的关键字参数。

output_shape元组(行,列),可选

生成的输出图像的形状。默认情况下,输入图像的形状被保留。请注意,即使对于多波段图像,也只需要指定行和列。

orderint 可选
插值的顺序。顺序必须在 0-5 范围内:
  • 0:Nearest-neighbor
  • 1:Bi-linear(默认)
  • 2:Bi-quadratic
  • 3:Bi-cubic
  • 4:Bi-quartic
  • 5:Bi-quintic

如果 image.dtype 为 bool,则默认值为 0,否则为 1。

mode{‘constant’, ‘edge’, ‘symmetric’, ‘reflect’, ‘wrap’},可选

根据给定的模式填充输入边界之外的点。模式与 numpy.pad 的行为匹配。

cval浮点数,可选

与模式‘constant’(图像边界外的值)结合使用。

clip布尔型,可选

是否将输出裁剪到输入图像的值范围内。这是默认启用的,因为高阶插值可能会产生超出给定输入范围的值。

preserve_range布尔型,可选

是否保持原来的取值范围。否则,输入图像将根据以下约定进行转换img_as_float.另见https://scikit-image.org/docs/dev/user_guide/data_types.html

返回

warped双ndarray

扭曲的输入图像。

注意

例子

>>> from skimage.transform import warp
>>> from skimage import data
>>> image = data.camera()

以下图像扭曲都是相同的,但在执行时间上存在很大差异。图像移至底部。

使用几何变换来扭曲图像(快速):

>>> from skimage.transform import SimilarityTransform
>>> tform = SimilarityTransform(translation=(0, -10))
>>> warped = warp(image, tform)

使用可调用(慢):

>>> def shift_down(xy):
...     xy[:, 1] -= 10
...     return xy
>>> warped = warp(image, shift_down)

使用变换矩阵扭曲图像(快速):

>>> matrix = np.array([[1, 0, 0], [0, 1, -10], [0, 0, 1]])
>>> warped = warp(image, matrix)
>>> from skimage.transform import ProjectiveTransform
>>> warped = warp(image, ProjectiveTransform(matrix=matrix))

您还可以使用几何变换的逆(快速):

>>> warped = warp(image, tform.inverse)

对于N-D 图像,您可以传递一个坐标数组,它为输出图像中的每个元素指定输入图像中的坐标。例如:如果你想重新调整一个 3-D 立方体,你可以这样做:

>>> cube_shape = np.array([30, 30, 30])
>>> rng = np.random.default_rng()
>>> cube = rng.random(cube_shape)

设置坐标数组,定义缩放:

>>> scale = 0.1
>>> output_shape = (scale * cube_shape).astype(int)
>>> coords0, coords1, coords2 = np.mgrid[:output_shape[0],
...                    :output_shape[1], :output_shape[2]]
>>> coords = np.array([coords0, coords1, coords2])

假设立方体包含空间数据,其中第一个数组元素中心位于真实空间中的坐标 (0.5, 0.5, 0.5),即我们必须在缩放图像时考虑这个额外的偏移量:

>>> coords = (coords + 0.5) / scale - 0.5
>>> warped = warp(cube, coords)

相关用法


注:本文由纯净天空筛选整理自scikit-image.org大神的英文原创作品 skimage.transform.warp。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。