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, σ = 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/api_docs/python/tf/image/resize

Spec-Zone.ru

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