Spec-Zone.ru › TensorFlow 2.9

tf.image.resize

Изменение размера images до size с использованием указанного method.

tf.image.resize(
    images,
    size,
    method=ResizeMethod.BILINEAR,
    preserve_aspect_ratio=False,
    antialias=False,
    name=None
)

Измененные изображения будут искажены, если их исходное соотношение сторон не совпадает с size. Чтобы избежать искажений, см. tf.image.resize_with_pad.

image = tf.constant([
 [1,0,0,0,0],
 [0,1,0,0,0],
 [0,0,1,0,0],
 [0,0,0,1,0],
 [0,0,0,0,1],
])
# Add "batch" and "channels" dimensions
image = image[tf.newaxis, ..., tf.newaxis]
image.shape.as_list()  # [batch, height, width, channels]
[1, 5, 5, 1]
tf.image.resize(image, [3,5])[0,...,0].numpy()
array([[0.6666667, 0.3333333, 0.       , 0.       , 0.       ],
       [0.       , 0.       , 1.       , 0.       , 0.       ],
       [0.       , 0.       , 0.       , 0.3333335, 0.6666665]],
      dtype=float32)

Это работает одинаково хорошо с одним изображением вместо пакета изображений:

tf.image.resize(image[0], [3,5]).shape.as_list()
[3, 5, 1]

Когда antialias имеет значение true, фильтр выборки будет выполнять антиалиасинг входного изображения, а также интерполировать его. При уменьшении размера изображения с антиалиасингом ядро фильтра выборки масштабируется для правильного антиалиасинга входного сигнала изображения. antialias не имеет эффекта при увеличении размера изображения:

a = tf.image.resize(image, [5,10])
b = tf.image.resize(image, [5,10], antialias=True)
tf.reduce_max(abs(a - b)).numpy()
0.0

Аргумент method ожидает элемент из перечисления image.ResizeMethod или его строкового эквивалента. Доступные варианты:

  • bilinear: Билинейная интерполяция. Если antialias имеет значение true, то при уменьшении размера изображения становится функцией фильтра шляпы/навеса с радиусом 1.
  • lanczos3: Ядро Лагранжа с радиусом 3. Практический фильтр высокого качества, но может иметь некоторое «звончение», особенно на синтетических изображениях.
  • lanczos5: Ядро Лагранжа с радиусом 5. Фильтр очень высокого качества, но может иметь более сильное «звончение».
  • bicubic: Кубический интерполянт Киса. Эквивалентно ядру Катмулла-Рома. Достаточно хорошее качество и быстрее, чем Lanczos3Kernel, особенно при увеличении размера.
  • gaussian: Гауссовское ядро с радиусом 3, sigma = 1.5 / 3.0.
  • nearest: Интерполяция ближайшего соседа. antialias не оказывает влияния при использовании интерполяции ближайшего соседа.
  • area: Антиалиасинговая ресемплинг с интерполяцией области. antialias не оказывает влияния при использовании интерполяции области; он всегда выполняет антиалиасинг.
  • mitchellcubic: Кубический неинтерполяционный фильтр Митчелла-Нетравали. Для синтетических изображений (особенно тех, которые не имеют надлежащего предварительного фильтра), меньше «звончения», чем кубическое ядро Киса, но меньше резкости.
Примечание: Вблизи краёв изображения ядро фильтра может частично находиться за пределами границ изображения. Для этих пикселей будут включены только пиксели входного изображения внутри границ, а значение выходного значения будет соответствующим образом нормализовано.

Значение возврата имеет тип float32, если method не является ResizeMethod.NEAREST_NEIGHBOR, в таком случае возвращаемый тип данных совпадает с типом данных images:

nn = tf.image.resize(image, [5,7], method='nearest')
nn[0,...,0].numpy()
array([[1, 0, 0, 0, 0, 0, 0],
       [0, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 0],
       [0, 0, 0, 0, 0, 0, 1]], dtype=int32)

При использовании preserve_aspect_ratio=True, соотношение сторон сохраняется, поэтому size является максимальным для каждого измерения:

max_10_20 = tf.image.resize(image, [10,20], preserve_aspect_ratio=True)
max_10_20.shape.as_list()
[1, 10, 10, 1]
Аргументы
images 4-мерный тензор формы [batch, height, width, channels] или 3-мерный тензор формы [height, width, channels].
size 1-мерный int32 тензор из 2 элементов: new_height, new_width. Новый размер изображений.
method image.ResizeMethod или его строковой эквивалент. По умолчанию bilinear.
preserve_aspect_ratio Сохранять ли соотношение сторон. Если это значение установлено в true, то images будет изменён на размер, который поместится в size, сохраняя при этом соотношение сторон исходного изображения. Масштабирует изображение, если size больше текущего размера image. По умолчанию False.
antialias Использовать ли фильтр антиалиасинга при уменьшении размера изображения.
name Имя для этой операции (необязательно).
Исключения
ValueError если форма images несовместима с формами аргументов этой функции
ValueError если size имеет недопустимую форму или тип.
ValueError если указан неподдерживаемый метод изменения размера.
Возвращаемое значение
Если images было 4-мерным, то 4-мерный float тензор формы [batch, new_height, new_width, channels]. Если images было 3-мерным, то 3-мерный float тензор формы [new_height, new_width, channels].

© 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/image/resize

Spec-Zone.ru

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