将图像大小调整为目标大小,而不会出现纵横比失真。
用法
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)
,并且不会失真。相反,图像中不适合目标尺寸的部分会被裁剪掉。
调整大小的过程是:
- 取与目标尺寸具有相同纵横比的图像的最大居中裁剪。例如,如果
size=(200, 200)
并且输入图像的大小为(340, 500)
,我们将沿宽度居中裁剪(340, 340)
。 - 将裁剪后的图像调整为目标大小。在上面的示例中,我们将
(340, 340)
裁剪调整为(200, 200)
。
相关用法
- Python tf.keras.preprocessing.image.ImageDataGenerator用法及代码示例
- Python tf.keras.preprocessing.image.DirectoryIterator.__len__用法及代码示例
- Python tf.keras.preprocessing.sequence.TimeseriesGenerator用法及代码示例
- Python tf.keras.preprocessing.sequence.pad_sequences用法及代码示例
- Python tf.keras.preprocessing.sequence.make_sampling_table用法及代码示例
- Python tf.keras.preprocessing.text.text_to_word_sequence用法及代码示例
- Python tf.keras.applications.inception_resnet_v2.preprocess_input用法及代码示例
- Python tf.keras.metrics.Mean.merge_state用法及代码示例
- Python tf.keras.layers.InputLayer用法及代码示例
- Python tf.keras.callbacks.ReduceLROnPlateau用法及代码示例
- Python tf.keras.layers.serialize用法及代码示例
- Python tf.keras.metrics.Hinge用法及代码示例
- Python tf.keras.experimental.WideDeepModel.compute_loss用法及代码示例
- Python tf.keras.metrics.SparseCategoricalAccuracy.merge_state用法及代码示例
- Python tf.keras.metrics.RootMeanSquaredError用法及代码示例
- Python tf.keras.applications.resnet50.preprocess_input用法及代码示例
- Python tf.keras.metrics.SparseCategoricalCrossentropy.merge_state用法及代码示例
- Python tf.keras.metrics.sparse_categorical_accuracy用法及代码示例
- Python tf.keras.layers.Dropout用法及代码示例
- Python tf.keras.activations.softplus用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.preprocessing.image.smart_resize。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。