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]
| Аргументы | |
|---|---|
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/versions/r2.9/api_docs/python/tf/image/resize