主要内容

estimateCameraParameters

校准单个或立体相机

描述

例子

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

例子

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

例子

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

例子

全部折叠

创建一组校准图像。

images = 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);

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

视觉化相机外观。

图;showExtrinsics (params);

图中包含一个axes对象。标题为“外部参数可视化”的axis对象包含补丁、文本、行类型的23个对象。

drawnow;

图检测和重新投射点。

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

图中包含一个axes对象。坐标轴对象包含3个类型为image, line的对象。这些对象表示检测点,重投影点。

指定校准图像。

leftImages = imageDatastore(fullfile(toolboxdir))“愿景”),“visiondata”“校准”“立体”“左”));righttimages = 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)

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

视觉化相机外观。

图showExtrinsics (params)

图中包含一个axes对象。标题为“外部参数可视化”的axis对象包含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”)举行

图中包含一个axes对象。坐标轴对象包含3个类型为image, line的对象。这些对象表示检测点,重投影点。

输入参数

全部折叠

校准模式的要点,指定为[xy固有图像坐标。

校准 输入数组[xy[英语背诵文选
单相机

2 -numImages数组[xy)点。

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

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

部分检测模式只支持单相机校准。万博1manbetx要在估计中包含部分检测到的模式,请使用[南南]x-y丢失关键点的坐标。

立体相机

2 -numPairs-by-2 array of [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矩阵。如果不提供初始值,该函数使用线性最小二乘计算初始本征矩阵。

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

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

输出参数

全部折叠

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

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

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

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

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

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

算法

全部折叠

校准算法

你可以使用相机校准器应用程序相机的视场(FOV)高达95度。

标定算法假设针孔相机模型:

w x y 1 X Y Z 1 R t K

XYZ):点的世界坐标
xy):对应像点的坐标
w:任意比例因子
K:相机内禀矩阵
R:表示相机三维旋转的矩阵
t:摄像机相对于世界坐标系的平移

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

  1. 在假设透镜畸变为零的情况下,用封闭形式求解本征和外征。[1]

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

参考文献

张铮,“一种灵活的摄像机标定新技术”。模式分析与机器智能汇刊.Vol。22,第11期,2000年,第1330-1334页。

[2]海克拉,J和O.西尔文。一种包含隐式图像校正的四步相机标定程序,IEEE计算机视觉与模式识别国际会议, 1997年。

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

[4] G. Bradski和A. Kaehler。学习OpenCV:使用OpenCV库的计算机视觉.塞瓦斯托波尔,加州:奥莱利,2008年。

版本历史

在R2014b中引入