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) – 边界填充值。 默认:0

  • interp_mode (str) – 插值方法。默认值: “linear”, 目前支持参数: “linear” 和 “nearest”

返回类型:

Tensor

返回:

输出向量,形状为 [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)