tf.keras.preprocessing.image.smart_resize
Изменение размера изображений до целевого размера без искажения соотношения сторон.
tf.keras.preprocessing.image.smart_resize(
x,
size,
interpolation='bilinear',
data_format='channels_last',
backend_module=None
)
Наборы данных изображений обычно содержат изображения разного размера. Однако эти изображения необходимо сгруппировать в батчи перед обработкой слоями Keras. Для группировки изображения должны иметь одинаковую высоту и ширину.
Можно просто сделать так в TF (или эквиваленте JAX):
size = (200, 200) ds = ds.map(lambda img: resize(img, size))
Однако, если вы сделаете это, вы исказите соотношение сторон ваших изображений, так как в целом они не имеют одинакового соотношения сторон, как size. В многих случаях это приемлемо, но не всегда (например, для моделей генерации изображений это может быть проблемой).
Обратите внимание, что передача аргумента preserve_aspect_ratio=True в 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).
| Аргументы | |
|---|---|
x | Входное изображение или набор изображений (как тензор или массив NumPy). Должен быть в формате (height, width, channels) или (batch_size, height, width, channels). |
size | Кортеж из (height, width) целых чисел. Целевой размер. |
interpolation | Строка, интерполяция для изменения размера. По умолчанию 'bilinear'. Поддерживает bilinear, nearest, bicubic, lanczos3, lanczos5. |
data_format | "channels_last" или "channels_first". |
backend_module | Модуль бэкенда для использования (если отличается от стандартного бэкенда). |
| Возвращаемое значение | |
|---|---|
Массив с формой (size[0], size[1], channels). Если входное изображение было массивом NumPy, результат — массив NumPy, а если это тензор родного бэкенда, результат — тензор родного бэкенда. |
© 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/api_docs/python/tf/keras/preprocessing/image/smart_resize