Compute epipolar lines for stereo images
lines = epipolarLine(F,points)
lines = epipolarLine(F',points)
lines = epipolarLine(F,points) returns an M-by-3 matrix, lines. The matrix represents the computed epipolar lines in the second image corresponding to the points, points, in the first image. The input F represents the fundamental matrix that maps points in the first image to the epipolar lines in the second image.
Code Generation Support:
Compile-time constant input: No restrictions
Supports MATLAB Function block: Yes
Code Generation Support, Usage Notes, and Limitations
A 3-by-3 fundamental matrix. F must be double or single. If P1 represents a point in the first image I1 that corresponds to P2, a point in the second image I2, then:
In computer vision, the fundamental matrix is a 3-by-3 matrix which relates corresponding points in stereo images. When two cameras view a 3-D scene from two distinct positions, there are a number of geometric relations between the 3-D points and their projections onto the 2-D images that lead to constraints between the image points. Two images of the same scene are related by epipolar geometry.
An M-by-2 matrix, where each row contains the x and y coordinates of a point in the image. M represents the number of points.
points must be a double, single, or integer value.
An M-by-3 matrix, where each row must be in the format, [A,B,C]. This corresponds to the definition of the line:
M represents the number of lines.
load stereoPointPairs [fLMedS, inliers] = estimateFundamentalMatrix(matchedPoints1, matchedPoints2, 'NumTrials', 4000);
I1 = imread('viprectification_deskLeft.png'); figure; subplot(121); imshow(I1); title('Inliers and Epipolar Lines in First Image'); hold on; plot(matchedPoints1(inliers,1), matchedPoints1(inliers,2), 'go')
epiLines = epipolarLine(fLMedS', matchedPoints2(inliers, :));
points = lineToBorderPoints(epiLines, size(I1));
line(points(:, [1,3])', points(:, [2,4])');
I2 = imread('viprectification_deskRight.png'); subplot(122); imshow(I2); title('Inliers and Epipolar Lines in Second Image'); hold on; plot(matchedPoints2(inliers,1), matchedPoints2(inliers,2), 'go')
epiLines = epipolarLine(fLMedS, matchedPoints1(inliers, :)); points = lineToBorderPoints(epiLines, size(I2)); line(points(:, [1,3])', points(:, [2,4])'); truesize;