# estimateUncalibratedRectification

Uncalibrated stereo rectification

## Syntax

• ```[T1,T2] = estimateUncalibratedRectification(F,inlierPoints1,inlierPoints2,imagesize)``` example

## Description

example

``````[T1,T2] = estimateUncalibratedRectification(F,inlierPoints1,inlierPoints2,imagesize)``` returns projective transformations for rectifying stereo images. This function does not require either intrinsic or extrinsic camera parameters. The input points can be M-by-2 matrices of M number of [x y] coordinates, or `SURFPoints`, `MSERRegions`, or `cornerPoints` object. `F` is a 3-by-3 fundamental matrix for the stereo images.Code Generation Support:Compile-time constant input: No restrictionsSupports MATLAB® Function block: YesOnly accepts input points as M-by-2 matrices for C code generationCode Generation Support, Usage Notes, and Limitations```

## Examples

collapse all

### Find Fundamental Matrix Describing Epipolar Geometry

This example shows how to compute the fundamental matrix from corresponding points in a pair of stereo images.

```I1 = im2double(imread('yellowstone_left.png')); I2 = im2double(imread('yellowstone_right.png')); load yellowstone_inlier_points; ```

Display point correspondences. Notice that the matching points are in different rows, indicating that the stereo pair is not rectified.

```figure; ax1 = axes; showMatchedFeatures(I1, I2,inlier_points1,inlier_points2,'montage', 'Parent', ax1); title(ax1, 'Original images and matching feature points'); ```

Compute the fundamental matrix from the corresponding points.

```f = estimateFundamentalMatrix(inlier_points1,inlier_points2,'Method','Norm8Point'); ```

Compute the rectification transformations.

```[t1, t2] = estimateUncalibratedRectification(f,inlier_points1,inlier_points2,size(I2)); ```

Set the size and location of the rectified images. The [x0,y0] represents the upper-left corner of the rectified image.

```[w, h] = deal(720, 620); [x0, y0] = deal(-120, -30); xLim = [0.5, w+0.5] + x0; yLim = [0.5, h+0.5] + y0; outputView = imref2d([h,w], xLim, yLim); ```

Rectify the stereo images using projective transformations t1 and t2.

```I1Rect = imwarp(I1, projective2d(t1), 'OutputView', outputView); I2Rect = imwarp(I2, projective2d(t2), 'OutputView', outputView); ```

Transform the points to visualize them together with the rectified images

```pts1Rect = transformPointsForward(projective2d(t1), inlier_points1); pts2Rect = transformPointsForward(projective2d(t2), inlier_points2); ```

Compensate for the shift in the coordinate system origin.

```pts1Rect = bsxfun(@minus, pts1Rect, [x0, y0]); pts2Rect = bsxfun(@minus, pts2Rect, [x0, y0]); ```

Notice that the matching points now reside on the same rows. This also means that the epipolar lines are parallel to the x-axis.

```figure; ax2 = axes; showMatchedFeatures(I1Rect, I2Rect, pts1Rect, pts2Rect, 'montage', 'Parent', ax2); title(ax2, 'Rectified images and the corresponding feature points'); ```

## Input Arguments

collapse all

### `F` — Fundamental matrix for the stereo images 3-by-3 matrix

Fundamental matrix for the stereo images, specified as a 3-by-3 fundamental matrix. The fundamental matrix satisfies the following criteria:

 If P1, a point in image `1`, corresponds to P2, a point in image `2`, then: [P2,1] *F * [P1,1]' = 0

`F` must be double or single.

### `inlierPoints1` — Coordinates of corresponding points`SURFPoints` | `cornerPoints` | `MSERRegions` | M-by-2 matrix of [x,y] coordinates

Coordinates of corresponding points in image one, specified as an M-by-2 matrix of M number of [x y] coordinates, or as a `SURFPoints`, `MSERRegions`, or `cornerPoints` object.

### `inlierPoints2` — Coordinates of corresponding points`SURFPoints` | `cornerPoints` | `MSERRegions` | M-by-2 matrix of [x,y] coordinates

Coordinates of corresponding points in image one, specified as an M-by-2 matrix of M number of [x y] coordinates, or as a `SURFPoints`, `MSERRegions`, or `cornerPoints` object.

### `imagesize` — Input image sizesingle | double | integer

Second input image size, specified as a double, single, or integer value and in the format returned by the `size` function. The size of input image `2` corresponds to `inlierPoints2`.

## Output Arguments

collapse all

### `T1` — Projective transformation one3-by-3 matrix

Projective transformation, returned as a 3-by-3 matrix describing the projective transformations for input image `T1`.

### `T2` — Projective transformation two3-by-3 matrix

Projective transformation, returned as a 3-by-3 matrix describing the projective transformations for input image `T2`.

collapse all

### Tips

• An epipole may be located in the first image or the second image. Applying the output uncalibrated rectification of `T1` (or `T2`) to image `1` (or image `2`) may result in an undesired distortion. You can check for an epipole within an image by applying the `isEpipoleInImage` function.

## References

[1] Hartley, R. and A. Zisserman, "Multiple View Geometry in Computer Vision," Cambridge University Press, 2003.