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, σ = 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