tf.image.crop_and_resize
Извлекает фрагменты из входного тензора изображения и изменяет их размер.
tf.image.crop_and_resize(
image,
boxes,
box_indices,
crop_size,
method='bilinear',
extrapolation_value=0.0,
name=None
)
Используется в блокнотах
| Используется в учебных пособиях |
|---|
Извлекает фрагменты из входного тензора изображения и изменяет их размер с помощью билинейной интерполяции или интерполяции методом ближайшего соседа (возможно, с изменением соотношения сторон) до общего выходного размера, заданного параметром crop_size. Эта операция более универсальна, чем операция crop_to_bounding_box, которая извлекает из входного изображения фрагмент фиксированного размера и не позволяет изменять размер или соотношение сторон. Сначала извлекаются фрагменты, а затем изменяется их размер.
Возвращает тензор с crops из входного image в позициях, заданных расположением ограничивающих рамок в boxes. Размер всех обрезанных рамок изменяется (с помощью билинейной интерполяции или интерполяции методом ближайшего соседа) до фиксированного size = [crop_height, crop_width]. Результат представляет собой 4-мерный тензор [num_boxes, crop_height, crop_width, depth]. При изменении размера углы совмещаются. В частности, если boxes = [[0, 0, 1, 1]], метод вернет результаты, идентичные результатам использования tf.compat.v1.image.resize_bilinear() или tf.compat.v1.image.resize_nearest_neighbor() (в зависимости от аргумента method) с align_corners=True.
| Аргументы | |
|---|---|
image | 4-мерный тензор формы [batch, image_height, image_width, depth]. Значения image_height и image_width должны быть положительными. |
boxes | 2-мерный тензор формы [num_boxes, 4]. Строка тензора с номером i задает координаты рамки на изображении box_ind[i] в нормализованных координатах [y1, x1, y2, x2]. Нормализованная координата y соответствует координате изображения y * (image_height - 1), поэтому интервал нормализованной высоты изображения [0, 1] соответствует интервалу [0, image_height - 1] в координатах высоты изображения. Допускается условие y1 > y2; в этом случае извлеченный фрагмент будет перевернут по вертикали относительно исходного изображения. Аналогичным образом обрабатывается размерность ширины. Допускаются нормализованные координаты за пределами диапазона [0, 1]; в этом случае для экстраполяции значений входного изображения используется extrapolation_value. |
box_indices | Одномерный тензор формы [num_boxes] со значениями int32 в диапазоне [0, batch). Значение box_ind[i] указывает изображение, к которому относится рамка с номером i. |
crop_size | Одномерный тензор из 2 элементов, size = [crop_height, crop_width]. Размер всех обрезанных фрагментов изображения изменяется до этого размера. Соотношение сторон содержимого изображения не сохраняется. Значения crop_height и crop_width должны быть положительными. |
method | Необязательная строка, задающая метод выборки при изменении размера. Может принимать значение "bilinear" или "nearest"; по умолчанию используется "bilinear". В настоящее время поддерживаются два метода выборки: билинейная интерполяция и интерполяция методом ближайшего соседа. |
extrapolation_value | Необязательный параметр типа float. По умолчанию используется 0.0. Значение, используемое для экстраполяции, если применимо. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
4-мерный тензор формы [num_boxes, crop_height, crop_width, depth]. |
Пример использования:
BATCH_SIZE = 1 NUM_BOXES = 5 IMAGE_HEIGHT = 256 IMAGE_WIDTH = 256 CHANNELS = 3 CROP_SIZE = (24, 24)
image = tf.random.normal(shape=( BATCH_SIZE, IMAGE_HEIGHT, IMAGE_WIDTH, CHANNELS) ) boxes = tf.random.uniform(shape=(NUM_BOXES, 4)) box_indices = tf.random.uniform(shape=(NUM_BOXES,), minval=0, maxval=BATCH_SIZE, dtype=tf.int32) output = tf.image.crop_and_resize(image, boxes, box_indices, CROP_SIZE) output.shape TensorShape([5, 24, 24, 3])
Пример с линейной интерполяцией:
image = np.arange(0, 18, 2).astype('float32').reshape(3, 3)
result = tf.image.crop_and_resize(
image[None, :, :, None],
np.asarray([[0.5,0.5,1,1]]), [0], [3, 3], method='bilinear')
result[0][:, :, 0]
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[ 8., 9., 10.],
[11., 12., 13.],
[14., 15., 16.]], dtype=float32)>Пример с интерполяцией методом ближайшего соседа:
image = np.arange(0, 18, 2).astype('float32').reshape(3, 3)
result = tf.image.crop_and_resize(
image[None, :, :, None],
np.asarray([[0.5,0.5,1,1]]), [0], [3, 3], method='nearest')
result[0][:, :, 0]
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[ 8., 10., 10.],
[14., 16., 16.],
[14., 16., 16.]], dtype=float32)>
© 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/crop_and_resize