用法:
cucim.skimage.transform.warp(image, inverse_map, map_args={}, output_shape=None, order=None, mode='constant', cval=0.0, clip=True, preserve_range=False)
根据给定的坐标变换扭曲图像。
- image:ndarray
输入图像。
- inverse_map:转换对象,可调用
cr = f(cr, **kwargs)
或 ndarray 逆坐标图,将输出图像中的坐标转换为输入图像中对应的坐标。
根据输入图像的维度,有许多不同的选项可以定义此映射。 2-D 图像对于gray-scale 图像可以具有 2 个维度,或者具有颜色信息的 3 个维度。
对于二维图像,您可以直接传递一个转换对象,例如
skimage.transform.SimilarityTransform
,或者它的倒数。对于二维图像,您可以传递
(3, 3)
齐次变换矩阵,例如skimage.transform.SimilarityTransform.params
。对于 2-D 图像,该函数将输出图像中的
(col, row)
坐标的(M, 2)
数组转换为输入图像中的相应坐标。可以通过map_args
指定函数的额外参数。对于N-D 图像,您可以直接传递坐标数组。第一个维度指定输入图像中的坐标,而后续维度确定输出图像中的位置。例如:对于二维图像,您需要传递一个形状为
(2, rows, cols)
的数组,其中rows
和cols
确定输出图像的形状,第一维包含输入图像中的(row, col)
坐标.有关更多文档,请参阅scipy.ndimage.map_coordinates
。
请注意,
(3, 3)
矩阵被解释为齐次变换矩阵,因此如果输出的形状为(3,)
,则不能对 3-D 输入中的值进行插值。有关用法,请参见示例部分。
- map_args:字典,可选
传递给
inverse_map
的关键字参数。- output_shape:元组(行,列),可选
生成的输出图像的形状。默认情况下,输入图像的形状被保留。请注意,即使对于多波段图像,也只需要指定行和列。
- order:整数,可选
- 插值的顺序。顺序必须在 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
扭曲的输入图像。
参数:
返回:
注意:
- 输入图像被转换为
double
图像。 - 在 [0, 3] 中的
SimilarityTransform
,AffineTransform
和ProjectiveTransform
和order
的情况下,此函数使用基础变换矩阵以更快的例程扭曲图像。
例子:
>>> from cucim.skimage.transform import warp >>> from skimage import data >>> image = cp.array(data.camera())
以下图像扭曲都是相同的,但在执行时间上存在很大差异。图像移至底部。
使用几何变换来扭曲图像(快速):
>>> from cucim.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)
使用变换矩阵扭曲图像(快速):
>>> import cupy as cp >>> matrix = cp.asarray([[1, 0, 0], [0, 1, -10], [0, 0, 1]]) >>> warped = warp(image, matrix) >>> from cucim.skimage.transform import ProjectiveTransform, warp >>> warped = warp(image, ProjectiveTransform(matrix=matrix))
您还可以使用几何变换的逆(快速):
>>> warped = warp(image, tform.inverse)
对于N-D 图像,您可以传递一个坐标数组,它为输出图像中的每个元素指定输入图像中的坐标。例如:如果你想重新调整一个 3-D 立方体,你可以这样做:
>>> cube_shape = (30, 30, 30) >>> cube = cp.random.rand(*cube_shape)
设置坐标数组,定义缩放:
>>> scale = 0.1 >>> output_shape = tuple(int(scale * s) for s in cube_shape) >>> coords0, coords1, coords2 = cp.mgrid[:output_shape[0], ... :output_shape[1], :output_shape[2]] >>> coords = cp.asarray([coords0, coords1, coords2])
假设立方体包含空间数据,其中第一个数组元素中心位于真实空间中的坐标 (0.5, 0.5, 0.5),即我们必须在缩放图像时考虑这个额外的偏移量:
>>> coords = (coords + 0.5) / scale - 0.5 >>> warped = warp(cube, coords)
相关用法
- Python cucim.skimage.transform.warp_polar用法及代码示例
- Python cucim.skimage.transform.warp_coords用法及代码示例
- Python cucim.skimage.transform.rescale用法及代码示例
- Python cucim.skimage.transform.SimilarityTransform用法及代码示例
- Python cucim.skimage.transform.AffineTransform用法及代码示例
- Python cucim.skimage.transform.resize用法及代码示例
- Python cucim.skimage.transform.PolynomialTransform用法及代码示例
- Python cucim.skimage.transform.EuclideanTransform用法及代码示例
- Python cucim.skimage.transform.rotate用法及代码示例
- Python cucim.skimage.transform.PolynomialTransform.estimate用法及代码示例
- Python cucim.skimage.transform.pyramid_laplacian用法及代码示例
- Python cucim.skimage.transform.downscale_local_mean用法及代码示例
- Python cucim.skimage.transform.ProjectiveTransform.estimate用法及代码示例
- Python cucim.skimage.transform.ProjectiveTransform用法及代码示例
- Python cucim.skimage.transform.integrate用法及代码示例
- Python cucim.skimage.transform.estimate_transform用法及代码示例
- Python cucim.skimage.feature.shape_index用法及代码示例
- Python cucim.skimage.restoration.richardson_lucy用法及代码示例
- Python cucim.skimage.util.invert用法及代码示例
- Python cucim.skimage.data.binary_blobs用法及代码示例
注:本文由纯净天空筛选整理自rapids.ai大神的英文原创作品 cucim.skimage.transform.warp。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。