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


Python tf.image.resize用法及代码示例


使用指定的 methodimages 的大小调整为 size

用法

tf.image.resize(
    images, size, method=ResizeMethod.BILINEAR, preserve_aspect_ratio=False,
    antialias=False, name=None
)

参数

  • images 形状为 [batch, height, width, channels] 的 4-D 张量或形状为 [height, width, channels] 的 3-D 张量。
  • size 2 个元素的一维 int32 张量:new_height, new_width。图像的新尺寸。
  • method image.ResizeMethod 或等效字符串。默认为 bilinear
  • preserve_aspect_ratio 是否保留纵横比。如果设置了此项,则 images 将调整为适合 size 的大小,同时保留原始图像的纵横比。如果 size 大于 image 的当前大小,则放大图像。默认为假。
  • antialias 对图像进行下采样时是否使用抗锯齿过滤器。
  • name 此操作的名称(可选)。

抛出

  • ValueError 如果 images 的形状与此函数的形状参数不兼容
  • ValueError 如果 size 的形状或类型无效。
  • ValueError 如果指定了不受支持的调整大小方法。

返回

  • 如果 images 是 4-D,则形状为 [batch, new_height, new_width, channels] 的 4-D 浮点张量。如果 images 是 3-D,则形状为 [new_height, new_width, channels] 的 3-D 浮点张量。

如果原始纵横比与 size 不同,调整大小的图像将失真。为避免失真,请参阅tf.image.resize_with_pad

image = tf.constant([
 [1,0,0,0,0],
 [0,1,0,0,0],
 [0,0,1,0,0],
 [0,0,0,1,0],
 [0,0,0,0,1],
])
# Add "batch" and "channels" dimensions
image = image[tf.newaxis, ..., tf.newaxis]
image.shape.as_list()  # [batch, height, width, channels]
[1, 5, 5, 1]
tf.image.resize(image, [3,5])[0,...,0].numpy()
array([[0.6666667, 0.3333333, 0.       , 0.       , 0.       ],
       [0.       , 0.       , 1.       , 0.       , 0.       ],
       [0.       , 0.       , 0.       , 0.3333335, 0.6666665]],
      dtype=float32)

它同样适用于单个图像而不是一批图像:

tf.image.resize(image[0], [3,5]).shape.as_list()
[3, 5, 1]

antialias 为真时,采样滤波器将对输入图像进行抗锯齿以及插值。当使用抗锯齿对图像进行下采样时,采样滤波器内核被缩放,以便正确地对输入图像信号进行抗锯齿处理。 antialias 对图像进行上采样时无效:

a = tf.image.resize(image, [5,10])
b = tf.image.resize(image, [5,10], antialias=True)
tf.reduce_max(abs(a - b)).numpy()
0.0

method 参数需要来自 image.ResizeMethod 枚举或等效字符串的项目。选项包括:

  • bilinear:双线性插值。如果antialias为真,在下采样时成为半径为 1 的帽子/帐篷过滤器函数。
  • lanczos3:半径为 3 的 Lanczos 内核。高质量的实用滤波器,但可能有一些振铃,尤其是在合成图像上。
  • lanczos5:Lanczos 内核,半径为 5。Very-high-quality 过滤器,但可能有更强的振铃。
  • bicubic:键的三次插值。等效于Catmull-Rom 内核。质量相当好,比 Lanczos3Kernel 更快,尤其是在上采样时。
  • gaussian:半径为 3 的高斯核,sigma = 1.5 /3.0。
  • nearest:最近邻插值。antialias与最近邻插值一起使用时无效。
  • area:使用区域插值进行抗锯齿重采样。antialias与区域插值一起使用时无效;它总是抗锯齿。
  • mitchellcubic:Mitchell-Netravali 三次非插值滤波器。对于合成图像(尤其是那些缺乏适当预过滤的图像),振铃比 Keys 三次核少,但不那么锐利。

注意:在图像边附近,过滤内核可能部分位于图像边界之外。对于这些像素,只有图像内部的输入像素会被包含在滤波器总和中,并且输出值会被适当地归一化。

返回值的类型为 float32 ,除非 methodResizeMethod.NEAREST_NEIGHBOR ,否则返回 dtype 是 images 的dtype:

nn = tf.image.resize(image, [5,7], method='nearest')
nn[0,...,0].numpy()
array([[1, 0, 0, 0, 0, 0, 0],
       [0, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 0],
       [0, 0, 0, 0, 0, 0, 1]], dtype=int32)

使用 preserve_aspect_ratio=True 可以保留纵横比,因此 size 是每个维度的最大值:

max_10_20 = tf.image.resize(image, [10,20], preserve_aspect_ratio=True)
max_10_20.shape.as_list()
[1, 10, 10, 1]

相关用法


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