主要内容

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

cameraIntrinsics

用于存储相机内参的对象

说明

存储有关相机内参标定参数的信息,包括镜头畸变。

创建对象

描述

intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize) 返回一个相机内参对象,其中包含焦距和相机的主点。这三个参量分别用于设置 FocalLengthPrincipalPointImageSize 属性。

示例

intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize,PropertyName=Value) 除了上述语法外,还通过一个或多个属性来指定选项。例如,RadialDistortion=[0 10] 将径向透镜畸变属性设置为向量 [0 10]

属性

全部展开

xy 中的焦距,以 2 元素向量 [fx fy] 的形式存储,单位为像素。

fx = F * sx

fy = F * sy

F 是世界单位下的焦距,通常以毫米为单位。sxsy 分别是 xy 方向上每世界单位对应的像素数。因此,fxfy 的单位是像素。

焦距 F 会影响视角,从而影响图像中呈现为清晰的场景区域。对于固定的被摄体距离:

  • 短焦距能提供宽广的视角,从而能够将大片场景纳入对焦范围。它既突出了主体,也突出了场景背景。

  • 长焦距会带来较窄的视角,从而缩小了画面中处于焦点范围内的区域。它更侧重于主体,并限制了背景的拍摄范围。

创建 cameraIntrinsics 对象后,无法设置 FocalLength 的值。

相机的光学中心,以两个元素的向量 [cx cy] 形式以像素为单位存储。该向量包含相机光心的坐标。

创建 cameraIntrinsics 对象后,无法设置 PrincipalPoint 的值。

相机生成的图像尺寸,以两个元素组成的向量 [mrows ncols] 形式存储。

创建 cameraIntrinsics 对象后,无法设置 ImageSize 的值。

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

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

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

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

在机器人操作系统 (ROS) 中,3 元素向量被称为 plumb_bob 模型,而 6 元素向量则被称为 rational_polynomial 模型。

径向畸变是指图像点沿从主点延伸出的径向线发生位移的现象。

  • 随着像点远离主点(正径向位移),成像放大率会减小,且像上会出现枕形畸变。

  • 随着像点向主点移动(负径向位移),像的放大率增加,且像上会出现桶形畸变。

Three grids: one with pincushion distortion (positive radial displacement), one with no distortion, and one with barrel distortion (negative radial displacement)

相机参数对象会计算一个点的径向畸变位置,表示为 (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 仅在广角镜头中才需要。

切向畸变系数,指定为一个包含 2 个元素的向量,[p1 p2]。当镜头与图像平面不平行时,会发生切向畸变。

Comparison of zero tangential distortion and tangential distortion

该相机参数对象用于计算某一点在切向畸变后的位置。您可以将这些畸变的点表示为 (x畸变, y畸变),如下所示:

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

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

xy 是未去畸变的像素位置
p1p2 是该镜头的切向畸变系数
r2 = x2 + y2
去畸变后的像素位置以归一化图像坐标表示,其原点位于光学中心。坐标以世界单位表示。

相机轴的倾斜度,指定为一个数值标量。如果 x 轴和 y 轴完全垂直,那么倾斜方向必须是 0

此 属性 为只读。

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

[fxscx0fycy001]

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

fx = F*sx

fy = F*sy

F 是世界单位中的焦距,通常以毫米为单位表示。
sxsy 分别表示在 xy 方向上每世界单位对应的像素数。
fxfy 以像素为单位表示。

示例

全部折叠

在不考虑镜头畸变或倾斜的情况下定义相机参数。

请以像素为单位指定焦距和主点。

focalLength    = [800 800]; 
principalPoint = [320 240];
imageSize      = [480 640];

创建一个相机内参对象。

intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize)
intrinsics = 
  cameraIntrinsics with properties:

             FocalLength: [800 800]
          PrincipalPoint: [320 240]
               ImageSize: [480 640]
        RadialDistortion: [0 0]
    TangentialDistortion: [0 0]
                    Skew: 0
                       K: [3×3 double]

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2017a 中推出

全部展开