Documentation

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 restrictions
Supports MATLAB® Function block: Yes
Only accepts input points as M-by-2 matrices for C code generation
Code 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.

Load the stereo images and feature points which are already matched.

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');

Related Examples

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 pointsSURFPoints | 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 pointsSURFPoints | 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.

More About

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.

Introduced in R2012b

Was this topic helpful?