tf.image.crop_and_resize
View source on GitHub |
Extracts crops from the input image tensor and resizes them.
tf.image.crop_and_resize( image, boxes, box_indices, crop_size, method='bilinear', extrapolation_value=0, name=None )
Extracts crops from the input image tensor and resizes them using bilinear sampling or nearest neighbor sampling (possibly with aspect ratio change) to a common output size specified by crop_size
. This is more general than the crop_to_bounding_box
op which extracts a fixed size slice from the input image and does not allow resizing or aspect ratio change.
Returns a tensor with crops
from the input image
at positions defined at the bounding box locations in boxes
. The cropped boxes are all resized (with bilinear or nearest neighbor interpolation) to a fixed size = [crop_height, crop_width]
. The result is a 4-D tensor [num_boxes, crop_height, crop_width, depth]
. The resizing is corner aligned. In particular, if boxes = [[0, 0, 1, 1]]
, the method will give identical results to using tf.compat.v1.image.resize_bilinear()
or tf.compat.v1.image.resize_nearest_neighbor()
(depends on the method
argument) with align_corners=True
.
Args | |
---|---|
image | A 4-D tensor of shape [batch, image_height, image_width, depth] . Both image_height and image_width need to be positive. |
boxes | A 2-D tensor of shape [num_boxes, 4] . The i -th row of the tensor specifies the coordinates of a box in the box_ind[i] image and is specified in normalized coordinates [y1, x1, y2, x2] . A normalized coordinate value of y is mapped to the image coordinate at y * (image_height - 1) , so as the [0, 1] interval of normalized image height is mapped to [0, image_height - 1] in image height coordinates. We do allow y1 > y2 , in which case the sampled crop is an up-down flipped version of the original image. The width dimension is treated similarly. Normalized coordinates outside the [0, 1] range are allowed, in which case we use extrapolation_value to extrapolate the input image values. |
box_indices | A 1-D tensor of shape [num_boxes] with int32 values in [0, batch) . The value of box_ind[i] specifies the image that the i -th box refers to. |
crop_size | A 1-D tensor of 2 elements, size = [crop_height, crop_width] . All cropped image patches are resized to this size. The aspect ratio of the image content is not preserved. Both crop_height and crop_width need to be positive. |
method | An optional string specifying the sampling method for resizing. It can be either "bilinear" or "nearest" and default to "bilinear" . Currently two sampling methods are supported: Bilinear and Nearest Neighbor. |
extrapolation_value | An optional float . Defaults to 0 . Value used for extrapolation, when applicable. |
name | A name for the operation (optional). |
Returns | |
---|---|
A 4-D tensor of shape [num_boxes, crop_height, crop_width, depth] . |
Example:
import tensorflow as tf 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 #=> (5, 24, 24, 3)
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/image/crop_and_resize