主要内容

estimateCameraParameters

校准单个或立体相机

描述

例子

cameraParamsimagesUsedestimationErrors= estimatecamerparameters (imagePointsworldPoints返回cameraParams,一个cameraParameters包含对单个相机的内在和外在参数以及失真系数的估计的对象。该函数还返回用于估计相机参数的图像和单相机校准的标准估计误差。的estimateCameraParameters函数估计外部参数和内在参数。

例子

stereoParamspairsUsedestimationErrors= estimatecamerparameters (imagePointsworldPoints返回stereoParams,一个stereoParameters对象,其中包含立体摄像机的参数。该函数还返回用于估计立体参数的图像和用于立体相机校准的标准估计误差。

例子

cameraParams= estimateCameraParameters (___名称,值配置cameraParams由一个或多个对象指定的对象属性名称,值参数,使用前面的任何语法。未指定的属性有其默认值。

例子

全部折叠

创建一组校准图像。

图片= imageSet(fullfile(toolboxdir(“愿景”),“visiondata”...“校准”“莫诺”));imageFileNames = images.ImageLocation;

检测校准模式。

[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

生成正方形角落的世界坐标。

squareSizeInMM = 29;worldPoints = generateCheckerboardPoints(boardSize,squareSizeInMM);

校准相机。

I = readimage(images,1);imageSize = [size(I, 1),size(I, 2)];params = estimatecamerparameters (imagePoints,worldPoints,...“图象尺寸”、图象尺寸);

可视化校准精度。

showReprojectionErrors (params);

图中包含一个轴对象。标题为Mean Reprojection Error per Image的坐标轴对象包含3个类型为bar, line的对象。该对象表示总体平均误差:0.18像素。

视觉化相机外观。

图;showExtrinsics (params);

图中包含一个轴对象。标题为“外部参数可视化”的坐标轴对象包含23个类型为patch、text、line的对象。

drawnow;

图检测和重投影点。

图;imshow (imageFileNames {1});持有;情节(imagePoints (:, 1, 1), imagePoints (:, 2, 1),“去”);情节(params.ReprojectedPoints (:, 1, 1), params.ReprojectedPoints (:, 2, 1),' r + ');传奇(“发现点”“ReprojectedPoints”);持有

图中包含一个轴对象。axis对象包含image、line类型的3个对象。这些对象表示检测点、重投影点。

指定校准图像。

leftImages = imageDatastore(fullfile(toolboxdir(“愿景”),“visiondata”...“校准”“立体”“左”));右timages = imageDatastore(fullfile(toolboxdir(“愿景”),“visiondata”...“校准”“立体”“正确”));

检测棋盘。

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

指定棋盘键的世界坐标。正方形的大小以毫米为单位。

squareSize = 108;worldPoints = generateCheckerboardPoints(boardSize,squareSize);

校准立体摄像系统。两台相机的分辨率相同。

I = readimage(leftImages,1);imageSize = [size(I,1) size(I,2)];params = estimatecamerparameters (imagePoints,worldPoints,...“图象尺寸”、图象尺寸);

可视化校准精度。

showReprojectionErrors (params)

图中包含一个轴对象。标题为Mean Reprojection Error per Image的axis对象包含5个类型为bar, line的对象。这些对象代表相机1,相机2,总体平均误差:0.06像素。

视觉化相机外观。

图showExtrinsics (params)

图中包含一个轴对象。标题为“外部参数可视化”的坐标轴对象包含28个类型为patch、text、line的对象。

创建一组校准图像。

imds = imageDatastore(fullfile(toolboxdir(“愿景”),“visiondata”...“校准”“circleGrid”“莫诺”));calibrationImages = readall(imds);calibrationImages = cat(4,calibrationImages{:});

定义圆网格图案尺寸。

patternDims = [8 11];

检测校准图像中的模式。

imagePoints = detectCircleGridPoints(calibrationImages, patternDims,...“PatternType”“对称”);

为圆形网格关键点指定世界坐标。中心距离单位为毫米。

centerDistance = 18;worldPoints = generateCircleGridPoints(patternDims,centerDistance,...“PatternType”“对称”);

使用校准图像校准相机。

imageSize = size(calibrationImages,1:2);params = estimatecamerparameters (imagePoints,worldPoints,...“图象尺寸”、图象尺寸);

绘制检测到的模式网格和重投影点。

图imshow(calibrationImages(:,:,:,1))保持情节(imagePoints (:, 1, 1), imagePoints (:, 2, 1),“gx”“MarkerSize”8)情节(params.ReprojectedPoints (:, 1, 1), params.ReprojectedPoints (:, 2, 1),' r + '“MarkerSize”8)传说(“发现点”“ReprojectedPoints”)举行

图中包含一个轴对象。axis对象包含image、line类型的3个对象。这些对象表示检测点、重投影点。

输入参数

全部折叠

校准模式的要点,以[xy]本征像坐标。

校准 [的输入数组xy[商务英语重点
单相机

2 -numImages[数组]xy)点。

  • 图像的数量,numImages,必须大于或等于2。

  • 每个模式中关键点坐标的数量,,必须大于3。

部分检测模式仅支持单摄像机校准。金宝app要在估计中包括部分检测到的模式,请使用[南南]x-y缺失关键点的坐标。

立体相机

2 -numPairs-by-2数组的[xy)点。

  • numPairs包含校准模式的立体图像对的数目。

  • 每个模式中关键点坐标的数量,,必须大于3。

  • imagePoints::,: 1)为来自摄像机1的点。

  • imagePoints::,: 2)为来自摄像机2的点。

数据类型:|

世界坐标中校准模式的要点,以-by-2数组的[数目]xy]世界坐标。图案必须是平面的;因此,z-坐标为零。

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“WorldUnits”、“毫米”将世界点单位设置为毫米。

世界点单位,指定为字符向量或字符串标量。

估计倾斜,指定为逻辑标量。当您将此属性设置为真正的,该函数估计图像轴的倾斜。当设置为,图像轴完全垂直,函数将倾斜设置为零。

要估计的径向畸变系数的数目,指定为数值23.

径向畸变是图像点沿从主点延伸的径向线的位移。

  • 当图像点远离主点(正径向位移)时,图像放大率降低,图像上出现针垫形失真。

  • 随着图像点向主点移动(负径向位移),图像放大倍率增大,图像出现桶形畸变。

三个网格表示图像。一个是针垫变形(径向位移为正),一个是无变形,一个是枪管变形(径向位移为负)

径向畸变系数模拟这种类型的畸变。扭曲点记为(x扭曲的y扭曲的):

x扭曲的x(1 +k1r2+k2r4+k3.r6

y扭曲的y(1 +k1r2+k2r4+k3.r6

  • xy-未扭曲的像素位置。x而且y都在归一化图像坐标中。归一化图像坐标由像素坐标平移到光学中心,再除以焦距(以像素为单位)得到。因此,x而且y是无量纲。

  • k1k2,k3.-透镜的径向畸变系数。

  • r2x2+y2

通常,两个系数就足够校准了。对于严重的失真,例如广角镜头,您可以选择三个系数k3.

切向失真标志,指定为逻辑标量。当您将此属性设置为真正的,该函数估计切向失真。当你把它设置为时,切向畸变可以忽略不计。

当镜头与像面不平行时,就会发生切向畸变。切向失真系数模拟这种类型的失真。

零切向失真与切向失真的比较

扭曲点记为(x扭曲的y扭曲的):

x扭曲的x+ [2 *p1xy+p2* (r2+ 2 *x2)]

y扭曲的y+ (p1* (r2+ 2 *y2) + 2 *p2xy

  • xy-未扭曲的像素位置。x而且y都在归一化图像坐标中。归一化图像坐标由像素坐标平移到光学中心,再除以焦距(以像素为单位)得到。因此,x而且y是无量纲。

  • p1而且p2-镜头的切向畸变系数。

  • r2x2+y2

相机固有特性的初始猜测,指定为3 × 3矩阵。矩阵的格式如下:

f x 年代 c x 0 f y c y 0 0 1

坐标[cxcy]表示光学中心(主点),单位为像素。当x- - -y-轴完全垂直,即skew参数年代=0

fxF年代x

fyF年代y

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

  • 年代x而且年代y每个世界的像素数是单位吗x- - -y分别方向。

  • fx而且fy用像素表示。

如果不提供初始值,则该函数使用线性最小二乘计算初始内禀矩阵。

径向畸变系数的初始猜测,指定为2或3元矢量。如果不提供初始值,则函数使用0作为所有系数的初值。

由相机产生的图像大小,指定为1 × 2 [mrowsncols)向量。

输出参数

全部折叠

摄像机参数,返回为cameraParameters对象。

用于估计相机参数的图像,返回为P-by-1逻辑数组。P对应于图像的数量。数组指示用于估计相机参数的图像。一个逻辑真正的数组中的值指示用于估计相机参数的图像。

该函数计算世界点和每个图像中检测到的点之间的单应性。如果图像的单应性计算失败,则该函数发出警告。该图像的点不用于估计相机参数。函数还设置相应的元素imagesUsed

估计参数的标准误差,作为a返回cameraCalibrationErrors对象或stereoCalibrationErrors对象。

立体声系统的相机参数,返回为stereoParameters对象。该对象包含立体相机系统的内在、外在和镜头畸变参数。

用于估计相机参数的图像对,返回为P-by-1逻辑数组。P对应于图像对的数量。一个逻辑真正的数组中的值指示用于估计相机参数的图像对。

算法

全部折叠

校准算法

你可以使用相机校准器应用程序,相机的视野(FOV)高达95度。标定算法采用针孔摄像机模型。

这个方程提供了一个世界坐标[XYZ]和对应的像点[xy]:

w x y 1 K R t X Y Z 1

  • w:任意比例因子

  • K:相机内禀矩阵

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

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

摄像机校准估计的值的内在参数,外在参数,和失真系数。摄像机标定有两个步骤:

  1. 以封闭形式求解本征和外征,假设透镜畸变为零。[1]

  2. 使用非线性最小二乘最小化(Levenberg-Marquardt算法)同时估计所有参数,包括畸变系数。使用上一步中的封闭形式解作为内在和外在的初始估计。然后将失真系数的初始估计值设为零。[1][2]

参考文献

[1]张,Z。一种灵活的相机定标新技术模式分析与机器智能汇刊22日,没有。11(十一月2000):1330-34。https://doi.org/10.1109/34.888718。

[2]海克拉,J.和O.西尔文。带有隐式图像校正的四步相机校准程序在IEEE计算机学会计算机视觉与模式识别会议论文集, 1106 - 12所示。圣胡安,波多黎各:IEEE计算。Soc, 1997年。https://doi.org/10.1109/CVPR.1997.609468。

[3] Bouguet, J.Y.“Matlab相机校准工具箱”,加州理工学院计算视觉。

[4]布拉德斯基,G.和A.凯勒。学习OpenCV:使用OpenCV库的计算机视觉.加利福尼亚州塞瓦斯托波尔:奥莱利,2008年。

版本历史

在R2014b中引入

全部展开