Spec-Zone.ru › TensorFlow 2.9

tf.keras.preprocessing.image.smart_resize

Изменение размера изображений до целевого размера без искажения соотношения сторон.

tf.keras.preprocessing.image.smart_resize(
    x, size, interpolation='bilinear'
)
Предупреждение: tf.keras.preprocessing.image.smart_resize не рекомендуется для нового кода. Предпочтительнее использовать tf.keras.layers.Resizing, который обеспечивает ту же функциональность в качестве слоя предобработки и добавляет поддержку tf.RaggedTensor. См. руководство по слоям предобработки preprocessing layer guide для обзора слоев предобработки.

Наборы данных изображений 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).
Args
x Входное изображение или пакет изображений (как тензор или массив NumPy). Должен быть в формате (height, width, channels) или (batch_size, height, width, channels).
size Кортеж из (height, width) целых чисел. Целевой размер.
interpolation Строка, интерполяция для изменения размера. По умолчанию 'bilinear'. Поддерживает bilinear, nearest, bicubic, area, lanczos3, lanczos5, gaussian, mitchellcubic.
Returns
Массив с формой (size[0], size[1], channels). Если входное изображение было массивом NumPy, выходной является массивом NumPy, а если это тензор TF, то выходной является тензором TF.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/keras/preprocessing/image/smart_resize

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API