Spec-Zone.ru › TensorFlow

tf.image.resize

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

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

Используется в ноутбуках

Используется в руководстве Используется в учебных материалах
  • tf.data: создание конвейеров ввода данных TensorFlow
  • Оценщики
  • DeepDream
  • pix2pix: преобразование изображений в изображения с помощью условной GAN
  • Перенос стиля с помощью нейронной сети
  • Сегментация изображений
  • Состязательный пример с использованием FGSM

Изображения будут искажены при изменении размера, если их исходное соотношение сторон отличается от 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 Одномерный тензор int32 из 2 элементов: new_height, new_width. Новый размер изображений.
method Значение из перечисления image.ResizeMethod или соответствующая строка. Значение по умолчанию — bilinear.
preserve_aspect_ratio Нужно ли сохранять соотношение сторон. Если задан этот параметр, images будет изменен до размера, вписывающегося в size с сохранением соотношения сторон исходного изображения. Изображение увеличивается, если size больше текущего размера image. По умолчанию — False.
antialias Нужно ли использовать фильтр сглаживания при уменьшении изображения.
name Имя этой операции (необязательно).
Вызывает исключения
ValueError если форма images несовместима с аргументами формы этой функции
ValueError если size имеет недопустимую форму или тип.
ValueError если указан неподдерживаемый метод изменения размера.
Возвращает
Если images имел размерность 4, возвращается тензор float размерности 4 с формой [batch, new_height, new_width, channels]. Если images имел размерность 3, возвращается тензор float размерности 3 с формой [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/api_docs/python/tf/image/resize

Spec-Zone.ru

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