主要内容

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

stereoParameters

用于存储立体相机系统参数的对象

说明

stereoParameters 对象存储了两台相机的内参和外参及其几何关系。

创建对象

您可以使用此处介绍的 stereoParameters 函数来创建一个 stereoParameters 对象。您还可以通过调用 estimateCameraParameters,并提供一个大小为 M×2×numImages×2 的输入图像点数组来创建一个 stereoParameters 对象,其中 M 表示每个图案中的关键点坐标数量。

描述

stereoParams = stereoParameters(cameraParameters1,cameraParameters2,poseCamera2) 根据两台相机的参数以及相机 2 的位姿,返回一个立体相机系统参数对象。cameraParameters1cameraParameters2 分别是 cameraParameterscameraIntrinsics 对象,其中分别包含相机 1 和相机 2 的内参。这三个参量分别用于设置 CameraParameters1CameraParameters2PoseCamera2 属性。

示例

stereoParams = stereoParameters(paramStruct) 根据现有 stereoParameters 对象,并使用存储在 paramStruct 中的参数,创建一个与之完全相同的 stereoParameters 对象。

输入参量

全部展开

立体参数,指定为一个立体参数结构体。若要从现有的 stereoParameters 对象中获取 paramStruct,请使用 toStruct 函数。

属性

全部展开

两台相机的内参和外参

相机 1 的参数,指定为一个 cameraParameters 对象。该对象包含相机的内参、外参和镜头畸变参数。

相机 2 的参数,指定为一个 cameraParameters 对象。该对象包含相机的内参、外参和镜头畸变参数。

两台相机之间的几何关系

第二台相机的相对位姿,指定为一个 rigidtform3d 对象。该对象的 RTranslation 属性分别表示相机 1 与相机 2 之间的相对旋转和平移。它们使用以下方法将相机 2 的坐标转换回相机 1 的坐标:

orientation1 = orientation2 * R
location1 = orientation2 * Translation + location2
orientation1location1 分别表示相机 1 的绝对位姿,orientation2location2 分别表示相机 2 的绝对位姿。

Camera 2 displayed in camera 1 coordinate system, with the axis origin at the optical center of camera 1.

创建 stereoParameters 对象后,无法设置 PoseCamera2 的值。

基础矩阵,以 3×3 矩阵的形式存储。基础矩阵建立了两台立体相机之间的对应关系,因此必须满足以下方程:

[P11]*FundamentalMatrix*[P21]=0

P1(图像 1 中的点)对应于图像 2 中的点 P2。这两个点都是以像素坐标表示的。

本质矩阵,以 3×3 矩阵的形式存储。本质矩阵建立了两台立体相机之间的对应关系,因此必须满足以下方程:

[P11]*EssentialMatrix*[P21]=0

P1(图像 1 中的点)对应于 P2(图像 2 中的点)。这两个点均以归一化图像坐标表示,其原点位于相机光学中心。像素坐标 xy 通过焦距 fxfy 进行归一化。

估计参数的精度

所有图像对中,重新投影点与检测点之间的平均欧几里得距离,单位为像素。

相机参数估计的设置

用于估算两台相机外参的标定图案数量,以整数形式存储。

标定图案中关键点的世界坐标,指定为一个 M×2 数组。M 表示图案中的关键点数量。

世界坐标系单位,以字符向量的形式指定。该字符向量描述了计量单位。

对象函数

toStructConvert a stereo parameters object into a struct

示例

全部折叠

指定标定图像。

leftImages = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
    "calibration","stereo","left"));
rightImages = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
    "calibration","stereo","right"));

检测棋盘格。

[imagePoints,patternDims] = ...
  detectCheckerboardPoints(leftImages.Files,rightImages.Files);

请指定棋盘格关键点的世界坐标。正方形的尺寸以毫米为单位。

squareSize = 108; % millimeters
worldPoints = patternWorldPoints("checkerboard",patternDims,squareSize);

对立体相机系统进行标定。这两台相机的分辨率相同。

I = readimage(leftImages,1); 
imageSize = size(I,1:2);
params = estimateCameraParameters(imagePoints,worldPoints,ImageSize=imageSize);

直观展示标定精度。

showReprojectionErrors(params)

Figure contains an axes object. The axes object with title Mean Reprojection Error per Image, xlabel Image Pairs, ylabel Mean Error in Pixels contains 5 objects of type bar, line. These objects represent Camera 1, Camera 2, Overall Mean Error: 0.06 pixels.

可视化相机外参。

figure
showExtrinsics(params)

Figure contains an axes object. The axes object with title Extrinsic Parameters Visualization, xlabel X (mm), ylabel Z (mm) contains 28 objects of type patch, text, line.

转换为结构体。

paramsStruct = toStruct(params)
paramsStruct = struct with fields:
       CameraParameters1: [1×1 struct]
       CameraParameters2: [1×1 struct]
       RotationOfCamera2: [3×3 double]
    TranslationOfCamera2: [-119.8720 -0.4005 -0.0258]
                 Version: [1×1 struct]
     RectificationParams: [1×1 struct]

参考

[1] Zhang, Z. "A Flexible New Technique for Camera Calibration." IEEE Transactions on Pattern Analysis and Machine Intelligence 22, no. 11 (November 2000): 1330–34. https://doi.org/10.1109/34.888718..

[2] Heikkila, J., and O. Silven. “A Four-Step Camera Calibration Procedure with Implicit Image Correction.” In Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 1106–12. San Juan, Puerto Rico: IEEE Comput. Soc, 1997. https://doi.org/10.1109/CVPR.1997.609468.

扩展功能

全部展开

版本历史记录

在 R2014a 中推出

全部展开