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