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 | Одномерный тензор 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