mindspore.dataset.vision.RandomAffine
- class mindspore.dataset.vision.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=Inter.NEAREST, fill_value=0)[源代码]
对输入图像应用随机仿射变换。
- 参数:
degrees (Union[int, float, sequence]) - 旋转度数的范围。 如果 degrees 是一个数字,它代表旋转范围是(-degrees, degrees)。 如果 degrees 是一个序列,它代表旋转是 (min, max)。
translate (sequence, 可选) - 一个序列(tx_min, tx_max, ty_min, ty_max)用于表示水平(tx)方向和垂直(ty)方向的最小/最大平移范围,取值范围 [-1.0, 1.0]。默认值:
None
。 水平和垂直偏移分别从以下范围中随机选择:(tx_min*width, tx_max*width) 和 (ty_min*height, ty_max*height)。 如果 translate 是一个包含2个值的元组或列表,则 (translate[0], translate[1]) 表示水平(X)方向的随机平移范围。 如果 translate 是一个包含4个值的元组或列表,则 (translate[0], translate[1]) 表示水平(X)方向的随机平移范围,(translate[2], translate[3])表示垂直(Y)方向的随机平移范围。 如果为None,则不对图像进行任何平移。scale (sequence, 可选) - 图像的比例因子的随机范围,必须为非负数,使用原始比例。默认值:
None
。shear (Union[float, Sequence[float, float], Sequence[float, float, float, float]], 可选) - 图像的剪切因子的随机范围,必须为正数。默认值:
None
。 如果是数字,则应用在 (-shear, +shear) 范围内平行于 X 轴的剪切。 如果 shear 是一个包含2个值的元组或列表,则在 (shear[0],shear[1]) 范围内进行水平(X)方向的剪切变换。 如果 shear 是一个包含4个值的元组或列表,则在 (shear[0],shear[1]) 范围内进行水平(X)方向的剪切变换,并在(shear[2], shear[3])范围内进行垂直(Y)方向的剪切变换。 如果为None,则不应用任何剪切。resample (
Inter
, 可选) - 图像插值方法。可选值详见mindspore.dataset.vision.Inter
。 默认值:Inter.NEAREST
。fill_value (Union[int, tuple[int]], 可选) - 用于填充输出图像中变换之外的区域。元组中必须有三个值,取值范围是[0, 255]。默认值:
0
。
- 异常:
TypeError - 如果 degrees 不是int、float或sequence类型。
TypeError - 如果 translate 不是sequence类型。
TypeError - 如果 scale 不是sequence类型。
TypeError - 如果 shear 不是int、float或sequence类型。
TypeError - 如果 resample 不是
mindspore.dataset.vision.Inter
的类型。TypeError - 如果 fill_value 不是int或tuple[int]类型。
ValueError - 如果 degrees 为负数。
ValueError - 如果 translate 不在范围 [-1.0, 1.0] 内。
ValueError - 如果 scale 为负数。
ValueError - 如果 shear 不是正数。
RuntimeError - 如果输入图像的shape不是 <H, W> 或 <H, W, C>。
- 支持平台:
CPU
样例:
>>> import numpy as np >>> import mindspore.dataset as ds >>> import mindspore.dataset.vision as vision >>> from mindspore.dataset.vision import Inter >>> >>> # Use the transform in dataset pipeline mode >>> random_affine_op = vision.RandomAffine(degrees=15, ... translate=(-0.1, 0.1, 0, 0), ... scale=(0.9, 1.1), ... resample=Inter.NEAREST) >>> transforms_list = [random_affine_op] >>> data = np.random.randint(0, 255, size=(1, 100, 100, 3)).astype(np.uint8) >>> numpy_slices_dataset = ds.NumpySlicesDataset(data, ["image"]) >>> numpy_slices_dataset = numpy_slices_dataset.map(operations=transforms_list, input_columns=["image"]) >>> for item in numpy_slices_dataset.create_dict_iterator(num_epochs=1, output_numpy=True): ... print(item["image"].shape, item["image"].dtype) ... break (100, 100, 3) uint8 >>> >>> # Use the transform in eager mode >>> data = np.random.randint(0, 255, size=(100, 100, 3)).astype(np.uint8) >>> output = vision.RandomAffine(degrees=15, translate=(-0.1, 0.1, 0, 0), ... scale=(0.9, 1.1), resample=Inter.NEAREST)(data) >>> print(output.shape, output.dtype) (100, 100, 3) uint8
- 教程样例: