# imwarp

Apply geometric transformation to image

## Syntax

``B = imwarp(A,tform)``
``B = imwarp(A,D)``
``````[B,RB] = imwarp(A,RA,tform)``````
``[___] = imwarp(___,interp)``
``````[___] = imwarp(___,Name,Value)``````

## Description

example

````B = imwarp(A,tform)` transforms the numeric, logical, or categorical image `A` according to the geometric transformation `tform`. The function returns the transformed image in `B`.```
````B = imwarp(A,D)` transforms image `A` according to the displacement field `D`.```
``````[B,RB] = imwarp(A,RA,tform)``` transforms a spatially referenced image specified by the image data `A` and its associated spatial referencing object `RA`. The outputs are a spatially referenced image specified by the image data `B` and its associated spatial referencing object `RB`.```
````[___] = imwarp(___,interp)` specifies the type of interpolation to use.```

example

``````[___] = imwarp(___,Name,Value)``` specifies name-value arguments to control various aspects of the geometric transformation. TipIf the input transformation `tform` does not define a forward transform, then use the `OutputView` name-value argument to accelerate the transformation. ```

## Examples

collapse all

Read and display a grayscale image.

```I = imread('cameraman.tif'); imshow(I)``` Create a 2-D affine transformation.

```A = [1 0.5 0; 0 1 0; 0 0 1]; tform = affinetform2d(A);```

Apply the transformation to the image.

```J = imwarp(I,tform); imshow(J)``` Load and display a 3-D MRI volumetric image.

```load("mri"); mriVolume = squeeze(D); volshow(mriVolume);``` Create a 3-D rigid transformation object that rotates the image around the y-axis.

```theta = [0 22.5 0]; transl = [0 0 0]; tform = rigidtform3d(theta,transl);```

Apply the transformation to the image and display the result.

```mriVolumeRotated = imwarp(mriVolume,tform); volshow(mriVolumeRotated);``` Read and display an image. To see the spatial extents of the image, make the axes visible.

```A = imread("kobi.png"); A = imresize(A,0.25); iptsetpref("ImshowAxesVisible","on") imshow(A)``` Create a 2-D affine transformation. This example creates a randomized transformation that consists of scale by a factor in the range [1.2, 2.4], rotation by an angle in the range [-45, 45] degrees, and horizontal translation by a distance in the range [100, 200] pixels.

`tform = randomAffine2d("Scale",[1.2,2.4],"XTranslation",[100 200],"Rotation",[-45,45]);`

Create three different output views for the image and transformation.

```centerOutput = affineOutputView(size(A),tform,"BoundsStyle","CenterOutput"); followOutput = affineOutputView(size(A),tform,"BoundsStyle","FollowOutput"); sameAsInput = affineOutputView(size(A),tform,"BoundsStyle","SameAsInput");```

Apply the transformation to the input image using each of the different output view styles.

```BCenterOutput = imwarp(A,tform,"OutputView",centerOutput); BFollowOutput = imwarp(A,tform,"OutputView",followOutput); BSameAsInput = imwarp(A,tform,"OutputView",sameAsInput);```

Display the resulting images.

```imshow(BCenterOutput) title("CenterOutput Bounds Style");``` ```imshow(BFollowOutput) title("FollowOutput Bounds Style");``` ```imshow(BSameAsInput) title("SameAsInput Bounds Style");``` `iptsetpref("ImshowAxesVisible","off")`

## Input Arguments

collapse all

Image to be transformed, specified as a numeric, logical, or categorical array of any dimension.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64` | `logical` | `categorical`

Geometric transformation, specified as a geometric transformation object listed in the table.

Geometric Transformation ObjectDescription
2-D Linear Geometric Transformations
`transltform2d`Translation transformation
`rigidtform2d`Rigid transformation: translation and rotation
`simtform2d`Similarity transformation: translation, rotation, and isotropic scaling
`affinetform2d`Affine transformation: translation, rotation, anisotropic scaling, reflection, and shearing
`projtform2d`Projective transformation
3-D Linear Geometric Transformations
`transltform3d`Translation transformation
`rigidtform3d`Rigid transformation: translation and rotation
`simtform3d`Similarity transformation: translation, rotation, and isotropic scaling
`affinetform3d`Affine transformation: translation, rotation, anisotropic scaling, reflection, and shearing
Nonlinear Geometric Transformations
`geometricTransform2d`2-D geometric transformation
`geometricTransform3d`3-D geometric transformation
`PolynomialTransformation2D`Local weighted mean transformation
`PiecewiseLinearTransformation2D`Piecewise linear transformation
`LocalWeightedMeanTransformation2D`Local weighted mean transformation
• If `tform` is 2-D and `A` has more than two dimensions, such as for an RGB image, then `imwarp` applies the same 2-D transformation to all 2-D planes along the higher dimensions.

• If `tform` is 3-D, then `A` must be a 3-D image volume.

Note

You can also specify `tform` as an object of type `rigid2d`, `rigid3d`, `affine2d`, `affine3d`, or `projective2d`. However, these objects are not recommended. For more information, see Compatibility Considerations.

Displacement field, specified as numeric array. The displacement field defines the grid size and location of the output image. Displacement values are in units of pixels. `imwarp` assumes that `D` is referenced to the default intrinsic coordinate system. To estimate the displacement field, use `imregdemons`.

• If `A` is a 2-D grayscale image of size m-by-n, then specify the displacement field as an m-by-n-by-2 array. `D(:,:,1)` contains displacements along the x-axis. `imwarp` adds these values to column and row locations in `D` to produce remapped locations in `A`. Similarly, `D(:,:,2)` contains displacements along the y-axis.

• If `A` is a 2-D RGB or multispectral image of size m-by-n-by-c and you specify `D` as an m-by-n-by-2 array, then `imwarp` operates on each 2-D color channel independently. `D(:,:,1)` contains displacements along the x-axis for all of the color channels. Similarly, `D(:,:,2)` contains displacements along the y-axis.

• If `A` is a 3-D grayscale image of size m-by-n-by-p, then specify the displacement field array as an m-by-n-by-p-by-3 array. `D(:,:,:,1)` contains displacements along the x-axis. `imwarp` adds these values to column, row, and depth locations in `D` to produce remapped locations in `A`. Similarly, `D(:,:,:,2)` and `D(:,:,:,3)` contain displacements along the y- and z-axis.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

Spatial referencing information of the image to be transformed, specified as an `imref2d` object for a 2-D transformation or an `imref3d` object for a 3-D transformation.

Type of interpolation used, specified as one of these values.

Interpolation MethodDescription
`"nearest"`

Nearest-neighbor interpolation. The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered.

Nearest-neighbor interpolation is the only method supported for categorical images and it is the default method for images of this type.

`"linear"`Linear interpolation. This is the default interpolation method for numeric and logical images.
`"cubic"`Cubic interpolation

Data Types: `char` | `string`

### Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: `B = imwarp(A,tform,FillValues=255)` uses a fill value of `255`

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: `B = imwarp(A,tform,"FillValues",255)` uses a fill value of `255`

Size and location of output image in the world coordinate system, specified as an `imref2d` or `imref3d` spatial referencing object. The object has properties that define the size of the output image and the location of the output image in the world coordinate system.

You can create an output view by using the `affineOutputView` function. To replicate the default output view calculated by `imwarp`, use the default bounds style (`"CenterOutput"`) of `affineOutputView`.

You cannot specify `OutputView` when you specify an input displacement field `D`.

Fill values used for output pixels outside the input image, specified as one of the values in the table. `imwarp` uses fill values for output pixels when the corresponding inverse transformed location in the input image is completely outside the input image boundaries.

The default fill value of numeric and logical images is `0`. The default fill value of categorical images is `missing`, which corresponds to the `<undefined>` category.

Image Type

Transformation Dimensionality

Format of Fill Values

2-D grayscale or logical image2-D
• Numeric scalar

2-D color image or 2-D multispectral image2-D
• Numeric scalar

• c-element numeric vector specifying a fill value for each of the c channels. The number of channels, c, is 3 for color images.

Series of p 2-D images2-D

• Numeric scalar

• c-by-p numeric matrix. The number of channels, c, is 1 for grayscale images and 3 for color images.

N-D image2-D
• Numeric scalar

• Numeric array whose size matches dimensions 3-to-N of the input image `A`. For example, if `A` is 200-by-200-by-10-by-3, then `FillValues` can be a 10-by-3 array.

3-D grayscale or logical image3-D
• Numeric scalar

Categorical image2-D or 3-D
• Valid category in the image, specified as a string scalar or character vector.

• `missing`, which corresponds to the `<undefined>` category. For more information, see `missing`.

Example: `255` fills a `uint8` image with white pixels

Example: `1` fills a `double` image with white pixels

Example: `[0 1 0]` fills a `double` color image with green pixels

Example: `[0 1 0; 0 1 1]'`, for a series of two `double` color images, fills the first image with green pixels and the second image with cyan pixels

Example: `"vehicle"` fills a categorical image with the "vehicle" category

Pad image to create smooth edges, specified as `true` or `false`. When set to `true`, `imwarp` create a smoother edge in the output image by padding the input image with values specified by `FillValues`. When set to `false`, `imwarp` does not pad the image. Choosing `false` (not padding) the input image can result in a sharper edge in the output image. This sharper edge can be useful to minimize seam distortions when registering two images side by side.

## Output Arguments

collapse all

Transformed image, returned as a numeric, logical, or categorical array of the same data type as the input image `A`.

Spatial referencing information of the transformed image, returned as an `imref2d` or `imref3d` spatial referencing object.

## Algorithms

`imwarp` determines the value of pixels in the output image by mapping locations in the output image to the corresponding locations in the input image (an inverse mapping). When the center of a pixel in the output image does not map to the center of a pixel in the input image, `imwarp` interpolates within the input image to calculate the output pixel value.

The figure illustrates a translation transformation of a checkerboard image, in which each square is 10-by-10 pixels. By convention, the axes in input space are labeled u and v and the axes in output space are labeled x and y. Using the inverse transformation, the pixel with (x,y) coordinates (25,35) in the output coordinate space is mapped to the (u,v) coordinates (5,5) in the input coordinate space. `imwarp` performs the mapping using world coordinates. For more information, see Image Coordinate Systems.

## Version History

Introduced in R2013a

expand all