tf.keras.preprocessing.image.smart_resize
Изменение размера изображений до целевого размера без искажения соотношения сторон.
tf.keras.preprocessing.image.smart_resize(
x, size, interpolation='bilinear'
)
Наборы данных изображений 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).
| 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