主要内容

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

cameraIntrinsicsKB

基于 Kannala-Brandt 模型的相机内参

自 R2024a 起

说明

cameraIntrinsicsKB 对象存储了关于鱼眼镜头内参标定参数的信息,这些参数是基于 Kannala-Brandt [1] 模型计算得出的。

创建对象

使用 cameraIntrinsicsFromOpenCV 函数创建一个 cameraIntrinsicsKB 对象。

属性

全部展开

此 属性 为只读。

焦距,以形式为 [fx fy] 的两元素向量存储,值在像素中。

fx = Fsx

fy = Fsy

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

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

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

  • 长焦距会带来较窄的视角,从而缩小了画面中处于焦点范围内的区域。这样能更突出主体,并限制相机拍摄到的背景范围。

有关如何在创建对象时设置此属性的更多信息,请参阅 cameraIntrinsicsFromOpenCV 函数的 intrinsicMatrix 参量。

此 属性 为只读。

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

有关如何在创建对象时设置此属性的更多信息,请参阅 cameraIntrinsicsFromOpenCV 函数的 intrinsicMatrix 参量。

此 属性 为只读。

相机生成的图像尺寸,以形式为 [mrows ncols] 的两元素向量形式存储。请在创建对象时,通过 cameraIntrinsicsFromOpenCV 函数的 imageSize 参量指定此值。

此 属性 为只读。

多项式系数,以形式为 [k1 k2 k3 k4] 的四元素向量形式存储。这些值指定了鱼眼畸变函数的多项式系数:

θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)θ=atan(γ)

k1,k2,k3,k4

,其中 k1k2k3k4 分别是该镜头的畸变系数。

有关如何在创建对象时设置此属性的更多信息,请参阅 cameraIntrinsicsFromOpenCV 函数的 distortionCoefficients 参量。

此 属性 为只读。

相机内参矩阵,以 3×3 矩阵的形式存储。该矩阵的格式为:

[fx0cx0fycy001]

,其中 cxcyPrincipalPoint 的对应值,而 fxfyFocalLength 的对应值。

有关如何在创建对象时设置此属性的更多信息,请参阅 cameraIntrinsicsFromOpenCV 函数的 intrinsicMatrix 参量。

示例

全部折叠

在工作区中定义 OpenCV 鱼眼镜头参数。

intrinsicMatrix = [875.88  0.00   1005.62; ...
                   0.00    874.76 741.52; ...
                   0.00,   0.00,  1.00];
distortionCoeffs = [0.08, -0.16, 0.35, -0.26];

定义相机返回的图像尺寸。

imageSize =[1500 2000];

从 OpenCV 导入鱼眼镜头的相机内参。

intrinsicsKB = cameraIntrinsicsFromOpenCV(intrinsicMatrix,distortionCoeffs,imageSize)
intrinsicsKB = 
  cameraIntrinsicsKB with properties:

               FocalLength: [875.8800 874.7600]
            PrincipalPoint: [1.0066e+03 742.5200]
                 ImageSize: [1500 2000]
    DistortionCoefficients: [0.0800 -0.1600 0.3500 -0.2600]
                         K: [3×3 double]

加载一个图像以进行去畸变。

filename = fullfile(toolboxdir("vision"),"visiondata", ...
    "calibration","gopro","gopro01.jpg");
I = imread(filename);

去畸变图像并显示结果。

J = undistortImage(I,intrinsicsKB);
imshowpair(I,J,"montage");
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.

算法

坎纳莱-布兰特模型通过考虑镜头畸变,对理想针孔模型进行了扩展,从而模拟了真实相机。

畸变的点是 (x畸变, y畸变),其中:

xdistorted=θdγ×x

ydistorted=θdγ×y

在归一化图像坐标系中,未去畸变的像素位置为 (x,y),其中:

γ2=x2+y2

θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)θ=atan(γ)

k1,k2,k3,k4

,其中 k1k2k3k4 分别是该镜头的畸变系数。

参考

[1] Kannala, J., and S.S. Brandt. A Generic Camera Model and Calibration Method for Conventional, Wide-Angle, and Fish-Eye Lenses. IEEE Transactions on Pattern Analysis and Machine Intelligence 28, no. 8 (August 2006): 1335–40. https://doi.org/10.1109/TPAMI.2006.153.

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。 (自 R2025a 起)

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

版本历史记录

在 R2024a 中推出

全部展开