主要内容

本页采用了机器翻译。点击此处可查看英文原文。

triangulate

立体图像中未去畸变的匹配点的三维位置

说明

worldPoints = triangulate(matchedPoints1,matchedPoints2,stereoParams) 返回两幅立体图像中,未去畸变的图像点匹配对的 三维位置。

示例

worldPoints = triangulate(matchedPoints1,matchedPoints2,camProjection1,camProjection2) 返回匹配对在世界坐标系中的三维位置。这些位置由相机投影矩阵确定。

[worldPoints,reprojectionErrors] = triangulate(___) 还会根据之前语法中的任意参量,返回世界坐标的重新投影错误。

[worldPoints,reprojectionErrors,validIndex] = triangulate(___) 还会返回有效和无效世界坐标的索引。有效点位于相机前方。

示例

全部折叠

通过对立体相机数据应用三角剖分技术,估算图像中某张面部的实际距离。

加载立体参数。

load('webcamsSceneReconstruction.mat');

读取这组立体图像。

I1 = imread('sceneReconstructionLeft.jpg');
I2 = imread('sceneReconstructionRight.jpg');

去畸变图像。

I1 = undistortImage(I1,stereoParams.CameraParameters1);
I2 = undistortImage(I2,stereoParams.CameraParameters2);

在两个图像中均检测出人脸。

faceDetector = vision.CascadeObjectDetector;
face1 = faceDetector(I1);
face2 = faceDetector(I2);

找到脸的中心点。

center1 = face1(1:2) + face1(3:4)/2;
center2 = face2(1:2) + face2(3:4)/2;

计算从相机 1 到人脸的距离。

point3d = triangulate(center1, center2, stereoParams);
distanceInMeters = norm(point3d)/1000;

显示检测到的面部和距离。

distanceAsString = sprintf('%0.2f meters', distanceInMeters);
I1 = insertObjectAnnotation(I1,'rectangle',face1,distanceAsString,'FontSize',18);
I2 = insertObjectAnnotation(I2,'rectangle',face2, distanceAsString,'FontSize',18);
I1 = insertShape(I1,'filled-rectangle',face1);
I2 = insertShape(I2,'filled-rectangle',face2);
 
imshowpair(I1, I2, 'montage');

Figure contains an axes object. The hidden axes object contains an object of type image.

输入参数

全部折叠

图像一中对应点的坐标,指定为一个 M-行-2 列的矩阵,其中包含 M 个 [x y] 坐标,或者指定为 Point Feature Types 中描述的点特征对象之一。

图像一中对应点的坐标,指定为一个 M-行-2 列的矩阵,其中包含 M 个 [x y] 坐标,或者指定为 Point Feature Types 中描述的点特征对象之一。

立体视觉系统的相机参数,指定为一个 stereoParameters 对象。该对象包含立体相机系统的内参、外参和镜头畸变参数。您可以使用 estimateCameraParameters 函数来估计相机参数,并返回一个 stereoParameters 对象。

当您将一个 stereoParameters 对象传递给该函数时,世界坐标系的原点位于相机 1 的光学中心。x 轴指向右侧,y 轴指向下方,z 轴则指向远离相机的方向。

相机 1 的投影矩阵,指定为一个 3×4 的矩阵。该矩阵将齐次坐标系中的三维点映射到相机图像中的对应点。该输入描述了相机 1 在世界坐标系中的位置和方向。camProjection1 必须是一个实数且非稀疏的数值矩阵。您可以使用 cameraProjection 函数获取相机矩阵。

传递给该函数的相机投影矩阵定义了世界坐标系。

相机 2 的投影矩阵,指定为一个 3×4 的矩阵。该矩阵将齐次坐标系中的三维点映射到相机图像中的对应点。该输入描述了相机 2 在世界坐标系中的位置和方向。camProjection2 必须是一个实数且非稀疏的数值矩阵。您可以使用 cameraProjection 函数获取相机矩阵。

传递给该函数的相机投影矩阵定义了世界坐标系。

输出参量

全部折叠

未去畸变图像点匹配对的三维位置,以 M×3 矩阵的形式返回。该矩阵包含 M 个 [x y z] 位置,这些位置对应来自两幅立体图像的未去畸变图像点中的匹配对。

当您使用 stereoParams 指定相机几何参数时,世界坐标系中的点坐标是以相机 1 的光学中心为基准的。

当您使用 camProjection1camProjection2 指定相机几何参数时,世界坐标系中的点坐标由相机矩阵决定。

matchedPoints1matchedPoints2 的数据类型为 double 时,该函数会将数据类型 worldPoints 返回为 double。否则,该函数将 worldPoints 作为数据类型 single 返回。

数据类型: single | double

重投影误差,以 M×1 向量的形式返回。该函数将每个世界坐标点投影回两幅图像中。然后,对于每个图像,该函数将检测到的点与重投影后的点之间的距离计算为重投影误差。向量 reprojectionErrors 包含每个世界坐标的平均重投影误差。

世界坐标的有效性,以 M×1 逻辑向量的形式返回。有效点(用逻辑符号 1 (true) 表示)位于相机前方。无效点(用逻辑符号 0 (false) 表示)位于相机后方。

世界点相对于相机位置的有效性,是通过使用相机矩阵和齐次坐标将世界点投影到图像上来确定的。如果得到的缩放因子为正,则该世界坐标点有效。

提示

triangulate 函数未考虑镜头畸变。在检测点之前,您可以使用 undistortImage 函数去畸变图像。或者,您可以使用 undistortPoints 函数去畸变点本身。

参考

[1] Hartley, Richard, and Andrew Zisserman. Multiple View Geometry in Computer Vision. 2nd ed., 312-313. Cambridge, UK ; New York: Cambridge University Press, 2003.

扩展功能

全部展开

版本历史记录

在 R2014b 中推出

全部展开