Spec-Zone.ru › TensorFlow

tf.image.crop_and_resize

Извлекает фрагменты из входного тензора изображения и изменяет их размер.

tf.image.crop_and_resize(
    image,
    boxes,
    box_indices,
    crop_size,
    method='bilinear',
    extrapolation_value=0.0,
    name=None
)

Используется в блокнотах

Используется в руководствах
  • MoveNet: Ультрабыстрая и точная модель распознавания поз.
  • Сегментация объектов с помощью Model Garden

Извлекает фрагменты из входного тензора изображения и изменяет их размер с помощью билинейной или ближайшей-соседней выборки (возможно, с изменением соотношения сторон) до заданного размера выходного тензора, определенного параметром 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 1-мерный тензор размера [num_boxes] с целочисленными значениями int32 в [0, batch). Значение box_ind[i] указывает на изображение, к которому относится i-й прямоугольник.
crop_size 1-мерный тензор из 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API