# tensorflow::ops::SampleDistortedBoundingBoxV2

`#include <image_ops.h>`

Generate a single randomly distorted bounding box for an image.

## Summary

Bounding box annotations are often supplied in addition to ground-truth labels in image recognition or object localization tasks. A common technique for training such a system is to randomly distort an image while preserving its content, i.e. *data augmentation*. This Op outputs a randomly distorted localization of an object, i.e. bounding box, given an `image_size`, `bounding_boxes` and a series of constraints.

The output of this Op is a single bounding box that may be used to crop the original image. The output is returned as 3 tensors: `begin`, `size` and `bboxes`. The first 2 tensors can be fed directly into `tf.slice` to crop the image. The latter may be supplied to `tf.image.draw_bounding_boxes` to visualize what the bounding box looks like.

Bounding boxes are supplied and returned as `[y_min, x_min, y_max, x_max]`. The bounding box coordinates are floats in `[0.0, 1.0]` relative to the width and height of the underlying image.

For example,


```
    # Generate a single distorted bounding box.
    begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
        tf.shape(image),
        bounding_boxes=bounding_boxes)
```

<br />


```
    # Draw the bounding box in an image summary.
    image_with_box = tf.image.draw_bounding_boxes(tf.expand_dims(image, 0),
                                                  bbox_for_draw)
    tf.summary.image('images_with_box', image_with_box)
```

<br />


```
    # Employ the bounding box to distort the image.
    distorted_image = tf.slice(image, begin, size)
```

<br />

Note that if no bounding box information is available, setting `use_image_if_no_bounding_boxes = true` will assume there is a single implicit bounding box covering the whole image. If `use_image_if_no_bounding_boxes` is false and no bounding boxes are supplied, an error is raised.

Arguments:

- scope: A [Scope](https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope) object
- image_size: 1-D, containing `[height, width, channels]`.
- bounding_boxes: 3-D with shape `[batch, N, 4]` describing the N bounding boxes associated with the image.
- min_object_covered: The cropped area of the image must contain at least this fraction of any bounding box supplied. The value of this parameter should be non-negative. In the case of 0, the cropped area does not need to overlap any of the bounding boxes supplied.

<br />

Optional attributes (see `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs`):

- seed: If either `seed` or `seed2` are set to non-zero, the random number generator is seeded by the given `seed`. Otherwise, it is seeded by a random seed.
- seed2: A second seed to avoid seed collision.
- aspect_ratio_range: The cropped area of the image must have an aspect ratio = width / height within this range.
- area_range: The cropped area of the image must contain a fraction of the supplied image within this range.
- max_attempts: Number of attempts at generating a cropped region of the image of the specified constraints. After `max_attempts` failures, return the entire image.
- use_image_if_no_bounding_boxes: Controls behavior if no bounding boxes supplied. If true, assume an implicit bounding box covering the whole input. If false, raise an error.

<br />

Returns:

- `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output` begin: 1-D, containing `[offset_height, offset_width, 0]`. Provide as input to `tf.slice`.
- `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output` size: 1-D, containing `[target_height, target_width, -1]`. Provide as input to `tf.slice`.
- `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output` bboxes: 3-D with shape `[1, 1, 4]` containing the distorted bounding box. Provide as input to `tf.image.draw_bounding_boxes`.

<br />

| ### Constructors and Destructors ||
|---|---|
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1a633c7a8fbd11d968753f7db7f8cb7c77(const ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope & scope, ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input image_size, ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input bounding_boxes, ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input min_object_covered)` ||
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1a1ef02f96804b5d3af88d2d7cae711680(const ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope & scope, ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input image_size, ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input bounding_boxes, ::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input min_object_covered, const https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs & attrs)` ||

| ### Public attributes ||
|---|---|
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1a5d0358f3cdc7973434e015fa6f3fe62b` | `::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1af9d2d6c57b4b1e64bc1ab2995e11a8ef` | `::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1ac4143ebffc12cab6d5b82b75e33eb651` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/operation#classtensorflow_1_1_operation` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1a5fd41322042a9c0f149f4ac711dd3447` | `::https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output` |

| ### Public static functions ||
|---|---|
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1abba18b38ff171324e05dac58493e7b90(const gtl::ArraySlice< float > & x)` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1aa01c6c23d7fc5888fc28358d4408fe10(const gtl::ArraySlice< float > & x)` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1adfa00342bdb57c3ba355f97d1b57f525(int64 x)` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1a019982d4504da89850b6e7ca7aa91ad3(int64 x)` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1ad49de5c7f25d7017493f33cc34503692(int64 x)` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs` |
| `https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1a9e8e8674c6cfb73384697ffb8da60062(bool x)` | `https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs#structtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2_1_1_attrs` |

| ### Structs ||
|---|---|
| [tensorflow::ops::SampleDistortedBoundingBoxV2::Attrs](https://www.tensorflow.org/versions/r1.15/api_docs/cc/struct/tensorflow/ops/sample-distorted-bounding-box-v2/attrs) | Optional attribute setters for [SampleDistortedBoundingBoxV2](https://www.tensorflow.org/versions/r1.15/api_docs/cc/class/tensorflow/ops/sample-distorted-bounding-box-v2#classtensorflow_1_1ops_1_1_sample_distorted_bounding_box_v2). |

## Public attributes

### bboxes

```
::tensorflow::Output bboxes
```

### begin

```
::tensorflow::Output begin
```

### operation

```
Operation operation
```

### size

```
::tensorflow::Output size
```

## Public functions

### SampleDistortedBoundingBoxV2

```
 SampleDistortedBoundingBoxV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input image_size,
  ::tensorflow::Input bounding_boxes,
  ::tensorflow::Input min_object_covered
)
```

### SampleDistortedBoundingBoxV2

```
 SampleDistortedBoundingBoxV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input image_size,
  ::tensorflow::Input bounding_boxes,
  ::tensorflow::Input min_object_covered,
  const SampleDistortedBoundingBoxV2::Attrs & attrs
)
```

## Public static functions

### AreaRange

```
Attrs AreaRange(
  const gtl::ArraySlice< float > & x
)
```

### AspectRatioRange

```
Attrs AspectRatioRange(
  const gtl::ArraySlice< float > & x
)
```

### MaxAttempts

```
Attrs MaxAttempts(
  int64 x
)
```

### Seed

```
Attrs Seed(
  int64 x
)
```

### Seed2

```
Attrs Seed2(
  int64 x
)
```

### UseImageIfNoBoundingBoxes

```
Attrs UseImageIfNoBoundingBoxes(
  bool x
)
```