主要内容

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

cameraParameters

用于存储相机参数的对象

说明

cameraParameters 对象存储了相机的内参、外在和镜头畸变参数。

创建对象

您可以使用此处介绍的 cameraParameters 函数来创建一个 cameraParameters 对象。您还可以通过将 estimateCameraParameters 与一个由 M×2×numImages 组成的输入图像点数组结合使用,来创建一个 cameraParameters 对象。M 表示每个图案中关键点坐标的数量。

描述

cameraParams = cameraParameters 会创建一个 cameraParameters 对象,其中包含相机的内参、外参和透镜畸变参数。

cameraParams = cameraParameters(Name=Value) 通过一个或多个名称-值参量来设置 cameraParameters 对象的属性。未指定的属性将使用默认值。例如,WorldUnits='m' 将世界单位设置为 'm'

例如,cameraParams = cameraParameters("RadialDistortion",[0 10]) 将径向透镜畸变属性 RadialDistortion 设置为向量 [0 10]

示例

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

输入参量

全部展开

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

属性

全部展开

相机内参:

相机内参矩阵,指定为一个 3×3 矩阵。该矩阵的格式为:

[fxscx0fycy001]

坐标 [cx cy] 表示光学中心(主点),单位为像素。当 x-轴和 y-轴完全垂直时,倾斜参数 s 等于 0.

fx = F*sx

fy = F*sy

  • F 是世界单位中的焦距,通常以毫米为单位表示。

  • sxsy 分别表示在 xy 方向上每世界单位对应的像素数。

  • fxfy 以像素为单位表示。

此 属性 为只读。

相机内参对象,定义为 cameraIntrinsics 对象。该对象包含有关相机内参标定参数的信息,包括镜头畸变。

依赖关系

您必须使用 ImageSize 属性为 Intrinsics 属性指定图像尺寸,使其不为空。相机参数的内参取决于图像尺寸。

图像大小,指定为一个包含两个元素的向量 [mrows ncols]。

相机镜头畸变:

径向透镜畸变系数,指定为 2 元素、3 元素或 6 元素向量。

  • 2 元素向量 - [k1 k2]。

  • 3 元素向量 - [k1 k2 k3]。

  • 6 元素向量 - [k1 k2 k3 k4 k5 k6]。

相机参数对象会计算一个点的径向畸变位置,表示为 (x畸变, y畸变):

xdistorted=x(1+k1*r2+k2*r4+k3*r61+k4*r2+k5*r4+k6*r6)

ydistorted=y(1+k1*r2+k2*r4+k3*r61+k4*r2+k5*r4+k6*r6)

x, y 是世界坐标系中归一化图像坐标系下未去畸变的图像点,其原点位于光学中心。
r2 = x2 + y2
k1k2、……、k6 是该镜头的径向畸变系数。通常情况下,两个系数就足够了,而 k3、……、k6 仅在广角镜头中才需要。

切向畸变系数,指定为一个包含两个元素的向量。当镜头与图像平面不平行时,会发生切向畸变。该相机参数对象用于计算某一点在切向畸变后的位置。您可以将这些畸变点表示为 (x畸变, y畸变)。去畸变后的像素位置以归一化图像坐标表示,其原点位于光学中心。坐标以世界单位表示。

当镜头与图像平面不平行时,会发生切向畸变。切向畸变系数用于对此类畸变进行建模。

Comparison of zero tangential distortion and tangential distortion

畸变点表示为 (xdistorted, ydistorted):

xdistorted = x + [2 * p1 * x * y + p2 * (r2 + 2 * x2)]

ydistorted = y + [p1 * (r2 + 2 *y2) + 2 * p2 * x * y]

  • xy - 未发生畸变的像素位置。xy 采用归一化图像坐标。归一化图像坐标通过平移至光心并除以焦距(以像素为单位)从像素坐标计算得出。因此,xy 为无量纲。

  • p1p2 - 镜头的切向畸变系数。

  • r2 = x2 + y2

相机外参:

此 属性 为只读。

标定图案的外参,指定为一个包含 N 个元素的向量,或一个 NP 列、包含 Nrigidtform3d 对象的数组。每个 rigidtform3d 对象表示相机图像平面相对于相应标定图案的位姿。

  • 每个 rigidtform3d 对象的 R 属性描述了相机图像平面相对于相应标定图案的三维旋转。

  • 每个 rigidtform3d 对象的 Translation 属性描述了相机相对于相应标定图案的平移 t,以世界坐标系单位表示。

对于单图案标定,请将 PatternExtrinsics 指定为一个包含 N 个元素的向量。如果包含多个图案,请使用 N×P 矩阵。

该方程给出了将棋盘格坐标系 [X Y Z] 中的世界坐标与相应的图像点 [x y] 联系起来的变换关系:

w[xy1]=K[Rt][XYZ1]

  • w:任意缩放因子

  • K:相机内参矩阵

  • R:表示相机三维旋转的矩阵

  • t:相机相对于世界坐标系的平移

刚性几何变换并未考虑畸变因素。使用 undistortImage 函数来消除畸变。

此 属性 为只读。

三维相机的旋转向量,指定为一个 R 行 3 列的矩阵或一个 R 行 3 列、P 列的数组,其中包含 R 个旋转向量,其中 P 是标定图案的数量。每个向量描述了相机成像平面相对于相应标定图案的三维旋转。

每个向量都指定了三维空间中的旋转轴,其大小表示旋转角度(单位为弧度)。相应的 三维 旋转矩阵由 PatternExtrinsics 属性指定,具体形式为 tform.R,其中 tform 是一个 rigidtform3d 目标。PatternExtrinsics 属性用于指定带有相应三维旋转矩阵的几何变换对象。

对于单图案标定,请将 RotationVectors 指定为一个 R×3 的矩阵。若涉及多个图案,请使用 R×3×P 数组。

相机参数估计精度:

此 属性 为只读。

重新投影点与检测点之间的平均欧几里得距离,以像素为单位的值。

相机参数估计的精度,指定为一个 K×2×VK×2×V×P 数组,包含 [x y] 对数据。这些配对代表了 xy 中,重新投影后的图案关键点 K 与检测到的图案关键点之间的变换关系。该属性的值代表了估计的相机参数的精度。V 表示用于估计相机参数的图案视图数量,P 表示标定图案的数量,K 表示每个图像中的关键点数量。

对于单图案标定,请将 ReprojectionErrors 指定为一个 K×2×V 的数组。若涉及多个图案,请使用 K×2×V×P 数组。

此 属性 为只读。

重新投影到标定图像上的世界坐标点,指定为一个 K×2×VK×2×V×P 格式的 [x y] 坐标数组。这些坐标表示重新投影到标定图像上的世界坐标点。每个图像中的关键点数量由 K 表示。图案视图的数量用 V 表示,而 P 表示标定图案的数量。图案中检测到的关键点中缺失的点用 [NaN,NaN] 表示。

对于单图案标定,请将 ReprojectedPoints 指定为一个 K×2×V 的数组。若涉及多个图案,请使用 K×2×V×P 数组。

在标定图案中检测到的关键点,指定为一个 K 行乘以 V 列 或 K 行乘以 V 列 乘以 P 列 的逻辑数组。每个图像中的关键点数量由 K 表示。图案视图的数量用 V 表示,而 P 表示标定图案的数量。

对于单图案标定,请将 DetectedKeypoints 指定为一个 K×V 的数组。如果包含多个图案,请使用 K×V×P 数组。

相机参数估计的设置:

此 属性 为只读。

用于估计相机外参的图案数量,指定为标量整数。

此 属性 为只读。

用于估计相机外参的图案视图数量,指定为一个标量整数。视点是指相机捕捉场景时的视角。

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

世界坐标单位,指定为字符向量或字符串标量。该值描述了计量单位。

估计偏斜标志,指定为逻辑标量。当将逻辑值设置为 true 时,该对象会估算图像轴的倾斜度。当将逻辑值设置为 false 时,图像轴将完全垂直。

径向畸变系数的数量,指定为 236 的个数。

估计切向畸变标志,指定为逻辑标量 truefalse。当将逻辑值设置为 true 时,该对象会估算切向畸变。当将逻辑值设置为 false 时,切向畸变可以忽略不计。

示例

全部折叠

使用相机标定函数来消除图像中的畸变。此示例手动创建了一个 cameraParameters 对象,但在实际操作中,您通常会使用 estimateCameraParameters相机标定器来生成该对象。

手动创建一个 cameraParameters 对象。

k = [715.2699 0 565.6995; 0 711.5281 355.3466; 0 0 1];
radialDistortion = [-0.3361 0.0921]; 
cameraParams = cameraParameters("K",k,"RadialDistortion",radialDistortion)
cameraParams = 
  cameraParameters with properties:

   Camera Intrinsics
                         Intrinsics: [0×0 cameraIntrinsics]

   Camera Extrinsics
                  PatternExtrinsics: [0×0 rigidtform3d]

   Accuracy of Estimation
              MeanReprojectionError: NaN
                 ReprojectionErrors: [0×2 double]
                  ReprojectedPoints: [0×2×0×0 double]

   Calibration Settings
                           NumViews: 0
                       PatternCount: 0
                  DetectedKeypoints: [0×2 double]
                        WorldPoints: [0×2 double]
                         WorldUnits: 'mm'
                       EstimateSkew: 0
    NumRadialDistortionCoefficients: 2
       EstimateTangentialDistortion: 0

消除图像中的畸变。

I = imread(fullfile(matlabroot,"toolbox","vision","visiondata","calibration","mono","image01.jpg"));
J = undistortImage(I,cameraParams);

显示原始图像和去畸变后的图像。

montage({I,J})
title("Original Image (left) vs. Corrected Image (right)")

Figure contains an axes object. The hidden axes object with title Original Image (left) vs. Corrected Image (right) contains an object of type image.

参考

[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 中推出

全部展开