# transform

Use the `transform` model to apply transformations to input source images.
The transformations are applied in the order they are written in the `pipeline`.

## Configuration

```json

```

## Attributes

| Name                        | Type   | Required?   | Description                                                                                                                                                                                                                          |
|-----------------------------|--------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `source`                   | string | **Required** | `name` of the camera to transform.                                                                                                                                                                                                  |
| `pipeline`                 | array  | **Required** | Specify an array of transformation objects.                                                                                                                                                                                         |
| `intrinsic_parameters`      | object | Optional     | The intrinsic parameters of the camera used to do 2D <-> 3D projections:<br>- `width_px`: The expected width of the aligned image in pixels. Value must be >= 0.<br>- `height_px`: The expected height of the aligned image in pixels. Value must be >= 0.<br>- `fx`: The image center x point.<br>- `fy`: The image center y point.<br>- `ppx`: The image focal x.<br>- `ppy`: The image focal y.        |
| `distortion_parameters`     | object | Optional     | Modified Brown-Conrady parameters used to correct for distortions caused by the shape of the camera lens:<br>- `rk1`: The radial distortion x.<br>- `rk2`: The radial distortion y.<br>- `rk3`: The radial distortion z.<br>- `tp1`: The tangential distortion x.<br>- `tp2`: The tangential distortion y.    |

## Pipeline transformations

The following transformation objects are available for the `pipeline`:

### Classifications

Classifications overlay text from the `GetClassifications` method of the [vision service](https://docs.viam.com/vision/) onto the image.

```json

```

**Attributes:**  
- `classifier_name`: The name of the classifier in the [vision service](https://docs.viam.com/vision/).  
- `confidence_threshold`: The threshold above which to display classifications.  
- `max_classifications`: _Optional_. The maximum number of classifications to display on the camera stream at any given time. Default: `1`.  
- `valid_labels`: _Optional_. An array of labels that you to see detections for on the camera stream. If not specified, all labels from the classifier are used.

### Crop

The Crop transform trims an image to a rectangular area specified by two points: the top left (`(x_min, y_min)`) and the bottom right (`(x_max, y_max)`).  
You can provide these points as integer pixel values or as decimal proportions of the image’s width and height.  
The origin (`(0, 0)`) occupies the top left pixel of the image; X values increase as you move right, Y values increase as you move down.

- [Template](https://docs.viam.com/reference/components/camera/transform/#tabset-referencecomponentscameratransform-1-0)  
- [Pixel Coordinate Example](https://docs.viam.com/reference/components/camera/transform/#tabset-referencecomponentscameratransform-1-1)  
- [Proportional Coordinate Example](https://docs.viam.com/reference/components/camera/transform/#tabset-referencecomponentscameratransform-1-2)

```json

```

To crop a 100 x 200 image to the rectangular region between pixel coordinates `(30, 40)` and `(60, 80)`, pass those coordinates in the following configuration:

```json

```

To crop any image to a rectangular region that occupies the central 50% of the image, use proportional coordinates `(0.25, 0.25)` and `(0.75, 0.75)`:

```json

```

#### Tip

To convert pixel coordinates to proportional, divide **X by image width** and **Y by image height**.  
For example, for pixel coordinates `(25, 50)` and `(75, 150)` in a 100 × 200 image:

- `(25, 50)` → `(25 / 100, 50 / 200)` → `(0.25, 0.25)`  
- `(75, 150)` → `(75 / 100, 150 / 200)` → `(0.75, 0.75)`

Use the formula `(X / <image width>, Y / <image height>)`.

**Attributes:**  
- `x_min_px`: The X pixel or proportional value of the top left corner of the crop area.  
- `y_min_px`: The Y pixel or proportional value of the top left corner of the crop area.  
- `x_max_px`: The X pixel or proportional value of the bottom right point of the crop area.  
- `y_max_px`: The Y pixel or proportional value of the bottom right point of the crop area.  
- `overlay_crop_box`: When `true`, instead of cropping, overlays the cropping box on the original image to visualize where the crop would apply.

### Detections

The Detections transform takes the input image and overlays the detections from a given detector configured within the [vision service](https://docs.viam.com/vision/).

```json

```

**Attributes:**  
- `detector_name`: The name of the detector configured in the [vision service](https://docs.viam.com/vision/).  
- `confidence_threshold`: Specify to only display detections above the specified threshold (decimal between 0 and 1).  
- `valid_labels`: _Optional_. An array of labels that you to see detections for on the camera stream. If not specified, all labels from the classifier are used.

### Resize

The Resize transform resizes the image to the specified height and width.

```json

```

**Attributes:**  
- `width_px`: Specify the expected width for the aligned image. Value must be >= 0.  
- `height_px`: Specify the expected width for the aligned image. Value must be >= 0.

### Rotate

The Rotate transformation rotates the image by the angle specified in `angle_deg`. Default: 180 degrees.  
This feature is useful for when the camera is installed upside down or sideways on your machine.

```json

```

**Attributes:**  
- `angle_deg`: Rotate the image by a specific angle in degrees.
