megengine.functional.nn.remap¶
- remap(inp, map_xy, border_mode='replicate', scalar=0.0, interp_mode='linear')[源代码]¶
对一批 2D 图像使用重映射。重映射指的是将图像中的像素重新定位到新图像中另一个位置。
输入图像通过向量
map_xy
转换为输出图像。输出向量的 H 和 W 与map_xy
的 H 和 W 相同- 参数
inp (
Tensor
) – 输入图像,其形状表示为[b, c, in_h, in_w]
map_xy (
Tensor
) – 转换矩阵,其形状应该是[b, o_h, o_w, 2]
. 输出向量的形状由 o_h 和 o_w 来决定。对于输出中的每个元素,其值由 inp 和map_xy
来决定,map_xy[..., 0]
以及map_xy[..., 1]
分别是 inp 当前元素的位置。因此,结果的取值范围在[0, in_w - 1]
以及[0, in_h - 1]
之间。border_mode (
str
) – 像素填充方式。默认值为 “replicate”, 目前也支持 “constant”, “reflect”, “reflect_101”, “wrap”. “replicate” 表示重复填充图像的边缘像素值,来展开新的边界。”constant” 表示用固定的数值来填充图像的边缘。scalar (
float
) – 边界填充值。 默认:0interp_mode (
str
) – 插值方法。默认值: “linear”, 目前支持参数: “linear” 和 “nearest”
- 返回类型
- 返回
输出向量,形状为 [b, c, o_h, o_w]
实际案例
>>> import numpy as np >>> inp_shape = (1, 1, 4, 4) >>> inp = Tensor(np.arange(16, dtype=np.float32).reshape(inp_shape)) >>> map_xy_shape = (1, 2, 2, 2) >>> map_xy = Tensor(np.array([[[1., 0.],[0., 1.]], ... [[0., 1.],[0., 1.]]], ... dtype=np.float32).reshape(map_xy_shape)) >>> out = F.vision.remap(inp, map_xy) >>> out.numpy() array([[[[1., 4.], [4., 4.]]]], dtype=float32)