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


Python tf.keras.preprocessing.image.smart_resize用法及代码示例


将图像大小调整为目标大小,而不会出现纵横比失真。

用法

tf.keras.preprocessing.image.smart_resize(
    x, size, interpolation='bilinear'
)

参数

  • x 输入图像或一批图像(作为张量或 NumPy 数组)。格式必须为 (height, width, channels)(batch_size, height, width, channels)
  • size (height, width) 整数的元组。目标大小。
  • interpolation 字符串,用于调整大小的插值。默认为 'bilinear' 。支持 bilinear , nearest , bicubic , area , lanczos3 , lanczos5 , gaussian , mitchellcubic

返回

  • 形状为 (size[0], size[1], channels) 的数组。如果输入图像是 NumPy 数组,则输出是 NumPy 数组,如果是 TF 张量,则输出是 TF 张量。

TensorFlow 图像数据集通常会生成大小不同的图像。但是,这些图像需要进行批处理才能被 Keras 层处理。要进行批处理,图像需要共享相同的高度和宽度。

你可以简单地做:

size = (200, 200)
ds = ds.map(lambda img:tf.image.resize(img, size))

但是,如果这样做,则会扭曲图像的纵横比,因为通常它们的纵横比并不都与 size 相同。在许多情况下这很好,但并非总是如此(例如,对于 GAN,这可能是一个问题)。

请注意,将参数 preserve_aspect_ratio=True 传递给 resize 将保留纵横比,但代价是不再遵守提供的目标大小。因为tf.image.resize 不会裁剪图像,所以您的输出图像仍然会有不同的大小。

这要求:

size = (200, 200)
ds = ds.map(lambda img:smart_resize(img, size))

您的输出图像实际上是 (200, 200) ,并且不会失真。相反,图像中不适合目标尺寸的部分会被裁剪掉。

调整大小的过程是:

  1. 取与目标尺寸具有相同纵横比的图像的最大居中裁剪。例如,如果 size=(200, 200) 并且输入图像的大小为 (340, 500) ,我们将沿宽度居中裁剪 (340, 340)
  2. 将裁剪后的图像调整为目标大小。在上面的示例中,我们将 (340, 340) 裁剪调整为 (200, 200)

相关用法


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