Spec-Zone.ru › TensorFlow 2.3

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]
Args
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 Сохранять ли соотношение сторон. Если это установлено, то images будет изменён на размер, который помещается в size, сохраняя при этом соотношение сторон исходного изображения. Масштабирует изображение вверх, если size больше текущего размера image. По умолчанию False.
antialias Используются ли фильтры антиалиасинга при уменьшении размера изображения.
name Имя операции (необязательно).
Raises
ValueError если форма images несовместима с формами аргументов этой функции
ValueError если у size неверная форма или тип.
ValueError если указан неподдерживаемый метод изменения размера.
Returns
Если images был 4-мерным, 4-мерный float тензор формы [batch, new_height, new_width, channels]. Если images был 3-мерным, 3-мерный float тензор формы [new_height, new_width, channels].

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/image/resize

Spec-Zone.ru

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