单目相机标定(转载)

来源:https://au.mathworks.com/help/vision/ug/single-camera-calibrator-app.html?s_tid=srchtitle

其他参看:https://au.mathworks.com/help/vision/ug/camera-calibration.html

                https://zhuanlan.zhihu.com/p/37465942

                 https://www.zhihu.com/question/26199861/answer/154228960

                 https://www.zhihu.com/question/313810634

                https://www.cnblogs.com/star91/p/6012425.html

         https://en.wikipedia.org/wiki/Camera_resectioning#Intrinsic_parameters

         http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html

         https://zhuanlan.zhihu.com/p/35223115
您可以使用相机校准器应用程序来估计相机的内部性、外部和镜头失真参数。您可以将这些相机参数用于各种计算机视觉应用。这些应用包括消除图像中的镜头失真的影响、测量平面物体或从多个摄像机重建三维场景。

相机校准器应用程序使用的校准功能套件提供了相机校准的工作流程。您可以直接在 Matlab 中使用这些函数®工作。有关功能的列表, 请参阅单相机和立体声相机校准.

单台摄像机校准

按照此工作流程使用应用程序校准相机:

  1. 准备图像、相机和校准模式。

  2. 添加图像并选择标准或鱼眼相机型号。

  3. 校准相机。

  4. 评估校准精度。

  5. 调整参数以提高精度 (如有必要)。

  6. 导出参数对象。

在某些情况下, 默认值工作良好, 并且在导出参数之前不需要进行任何改进。您还可以直接在 MATLAB 工作区中使用相机校准功能进行改进。有关功能的列表, 请参阅单相机和立体声相机校准.

打开相机校准器

  • MATLAB 工具条: 在 "应用" 选项卡上的"图像处理和计算机视觉" 部分, 单击 "相机校准器"图标。

  • 命令提示符: 输入cameraCalibrator

准备图案、相机和图像

为了获得更好的结果, 请使用10到20张图像的校准模式。校准器至少需要三个图像。使用未压缩的图像或无损压缩格式, 如 PNG。校准模式和摄像机设置必须满足一组使用校准器的要求。为了提高校准精度, 请按照以下说明准备图案、设置相机和捕获图像。

注意

相机校准器应用仅支持棋盘模式。如果您使用的是不同类型的校准模式, 您仍然可以使用estimateCameraParameters功能校准相机。使用不同类型的模式需要提供自己的代码来检测图像中的模式点。

准备棋盘模式

相机校准器应用使用棋盘模式。棋盘图案是一种方便的校准目标。如果要使用不同的模式提取关键点, 可以直接使用相机校准 MATLAB 功能。有关功能列表, 请参阅单相机和立体相机校准。您可以打印 (从 MATLAB) 并使用提供的棋盘图案。您使用的棋盘图案不能是正方形的。一方必须包含偶数的正方形, 另一侧必须包含奇数的正方形。因此, 图案包含两个沿一侧的黑色角和两个白色的角在另一侧。此条件使应用能够确定模式的方向。校准器将较长的侧分配为x方向。

单目相机标定(转载)_第1张图片

要准备棋盘模式:

  1. 将棋盘打印输出贴在平面上。表面的缺陷会影响校准的准确性。

  2. 测量棋盘正方形的一侧。您需要此测量进行校准。正方形的大小可能因打印机设置而异。

    单目相机标定(转载)_第2张图片

     

  3. 为了提高检测速度, 设置具有尽可能小背景杂波的模式。

 相机设置

要校准相机, 请遵循以下规则:

  • 保持模式的焦点, 但不要使用自动对焦。

  • 如果更改图像之间的缩放设置, 焦距将更改。

捕获图像

为了获得更好的结果, 请使用校准模式的至少10到20张图像。校准器至少需要三个图像。使用未压缩的图像或无损压缩格式的图像, 如 PNG。为了获得更高的校准精度:

  • 在大致等于相机到感兴趣对象的距离上捕获图案的图像。例如, 如果您计划从2米处测量对象, 请将图案保持在距离相机约2米的距离。

  • 将棋盘放置在相对于相机平面的角度小于45度。

    单目相机标定(转载)_第3张图片

    不要修改图像 (例如, 不要裁剪图像)。

  • 请勿使用自动对焦或更改图像之间的缩放设置。

  • 捕获相对于相机的不同方向的棋盘图案的图像。

  • 捕获图案的各种图像, 以便尽可能多地考虑图像帧。镜头失真从图像的中心呈径向增加, 有时在图像帧中不均匀。要捕获此镜头失真, 图案必须显示在接近捕获图像边缘的位置。

    单目相机标定(转载)_第4张图片

    校准器适用于一系列棋盘正方形尺寸。作为一般规则, 您的棋盘应填充至少20% 的捕获图像。例如, 前面的图像是以108毫米的棋盘正方形拍摄的, 如下蒙太奇所示:

单目相机标定(转载)_第5张图片

添加图像并选择 "相机模型"

要开始校准, 必须添加图像。您可以从文件夹中添加保存的图像, 也可以直接从相机添加图像。校准器对图像进行分析, 以确保它们满足校准器的要求。然后, 校准器检测棋盘上的点。

从文件中添加图像

在 "校准" 选项卡上的 "文件" 部分中, 单击 "添加图像", 然后选择 "From file通过单击 "为每个文件夹添加图像", 可以从多个文件夹中添加图像

获取实时图像

要开始校准, 必须添加图像。您可以使用 MATLAB 网络摄像头支持从网络摄像头获取实时图像。若要使用此功能, 必须为Usb 网络摄像机安装 Matlab 支持包。有关安装支持包的信息, 请参阅安装 Usb 网络摄像机的 MATLAB 支持包(图像采集工具箱)。若要添加实时图像, 请按照下列步骤操作。

  1. 在 "校准" 选项卡上的 "文件" 部分中, 单击 "添加图像", 然后选择 "From camera.

    此操作将打开 "相机" 选项卡。如果您只有一个网络摄像头连接到您的系统, 它将在默认情况下被选中, 并打开一个实时预览窗口。如果连接了多个摄像机, 并且希望使用与默认值不同的摄像机, 请在"相机"列表中选择该特定摄像机。

  2. 设置相机的属性以控制图像 (可选)。单击 "相机属性"以打开所选相机的属性菜单。此列表因您的设备而异。

    使用滑块或下拉列表更改任何可用的属性设置。更改设置时, "预览" 窗口会动态更新。设置完属性后, 单击菜单框之外的任意位置以关闭属性列表。

  3. 通过键入文件夹的路径或使用"浏览"按钮, 在"保存位置" 框中输入已获取图像文件的位置。您必须具有写入所选文件夹的权限。

  4. 设置捕获参数。

    • 若要设置图像捕获之间的秒数, 请使用 "捕获间隔"框或滑块。默认值为 5秒, 最小值为 1秒, 最大值为60秒。

    • 若要设置图像捕获的数量, 请使用 "图像数" 来捕获框或滑块。默认值为20张图像, 最小为2张图像, 最大值为100张图像。

    在默认配置中, 总共捕获20个图像, 每5秒捕获一个。

  5. "预览" 窗口显示以 RGB 数据的身份流式传输的实时图像。调整任何设备属性和捕获设置后, 使用 "预览" 窗口作为指南, 对相机进行排队, 以获取要捕获的棋盘图案图像。

  6. 单击 "捕获" 按钮。将捕获您设置的图像数, 并在"数据浏览器" 窗格中显示快照的缩略图。它们以增量方式自动命名, 并被捕获为.png文件。

    通过单击 "停止捕获",您可以选择在捕获指定的图像数量之前停止图像捕获.

    在捕获棋盘的图像时, 在捕获指定的图像数量后, 将显示 "棋盘方大小" 对话框。指定棋盘正方形的大小, 然后单击 "确定".

    单目相机标定(转载)_第6张图片

    然后计算并显示检测结果。例如:

    单目相机标定(转载)_第7张图片

  7. 单击"确定"关闭 "检测结果" 对话框。

  8. 获取完实时图像后, 单击 "关闭图像捕捉"关闭"相机" 选项卡。

分析图像

添加图像后, 将出现 "棋盘平方大小" 对话框。通过从棋盘图案中输入正方形一侧的长度, 指定棋盘正方形的大小。

单目相机标定(转载)_第8张图片

校准器尝试检测每个添加的图像中的棋盘, 显示 "分析图像进度栏" 窗口, 指示检测进度。如果任何图像被拒绝, 将出现 "检测结果" 对话框, 其中包含诊断信息。结果显示了处理的总映像数, 以及处理的图像总数、被接受、拒绝或跳过的图像总数。校准器跳过重复的图像。

单目相机标定(转载)_第9张图片

若要查看被拒绝的图像, 请单击 "查看图像"。校准器拒绝重复的图像。它还会拒绝无法检测到整个棋盘的图像。未检测的可能原因是图像模糊或图案的极端角度。使用较大的图像和包含大量正方形的模式, 检测所需的时间更长。

 查看图像和检测到的点

"数据浏览器" 窗格显示具有 id 的图像列表。这些图像包含检测到的模式。若要查看图像, 请从 "数据浏览器" 窗格中选择该图像。

单目相机标定(转载)_第10张图片

"图像" 窗口使用绿色圆圈显示选定的棋盘图像, 以指示检测到的点。您可以使用缩放控件验证是否正确检测到了边角。黄色的正方形表示 (0, 0) 的原点。X 和 Y 箭头指示棋盘轴方向。

校准

一旦您对接受的图像感到满意, 请单击 "校准" 选项卡上的"校准" 按钮。默认校准设置假定摄像机参数的最小集。首先使用默认设置运行校准。评估结果后, 您可以尝试通过调整设置和添加或删除图像, 然后再次校准来提高校准精度。如果您在标准和鱼眼相机型号之间切换, 则必须重新校准。

选择相机型号

您可以在"校准"选项卡上的 "相机模型" 部分中选择标准或鱼眼相机型号, 选择"标准" 或"鱼眼".

您可以在会话中的任何时间点切换相机模型。在对应用的设置进行任何更改后, 必须再次校准。单击"选项"可访问任何一种相机型号的设置和优化。

 标准型号选项

当相机具有严重的镜头失真时, 应用程序可能无法计算相机内部的初始值。如果您了解相机的制造商规格, 并了解像素大小、焦距或镜头特征, 则可以手动设置相机内部和径向失真的初始猜测。若要设置初始猜测, 请单击 "选项" > 优化选项.

  • 选中顶部复选框, 然后输入一个3乘3的矩阵来指定初始本质。如果不指定初始猜测, 则该函数使用线性最小二乘法计算初始内部矩阵。

  • 选中底部复选框, 然后输入2或3元素矢量以指定初始径向失真。如果不提供值, 则该函数使用0作为所有系数的初始值。

鱼眼模型选项

在 "相机模型" 部分中, 选中"鱼眼", 单击 "选项"。选择 "估计对齐",以便在鱼眼透镜的光轴与图像平面不垂直时, 能够估计轴对齐。

校准算法

有关鱼眼相机模型校准算法, 请参阅鱼眼校准基础知识。

标准相机模型校准算法采用针孔相机模型:

w[XY1]=[XYZ1][Rt]K

      (xyz): 点的世界坐标。

  • (x,y): 相应图像点的图像坐标 (以像素为单位)。

  • w: 任意齐次坐标比例因子。

  • k:相机内部矩阵, 定义为。

    ··FXsCX0FYCY001提出

    坐标 (CX CY) 表示光学中心 (主点), 以像素为单位。当x轴和y轴完全垂直时, 倾斜参数 s 等于0. 矩阵元素的定义是:

    FX = f*sX
    FY = f*sY
    f是世界单位的焦距, 通常以毫米表示。
    [sX, sY] 分别是xy方向上每个世界单位的像素数。
    FX和fY以像素表示。

    r: 表示相机三维旋转的矩阵。

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

  • 摄像机标定算法估计内在参数、外部参数和失真系数的值。相机校准包括以下步骤:

  1. 在假设镜头失真为零的情况下, 以闭合形式求解本质和外在。[6]

  2. 使用非线性最小二乘最小化 (利文贝格-马夸特算法) 同时估计所有参数, 包括失真系数。使用上一步中的闭式解作为本质和外在的初始估计。将失真系数的初始估计设置为零。[6][3]

 

评估校准结果

您可以通过检查重投影错误、检查相机外部信息或查看未扭曲的图像来评估校准精度。为了获得最佳校准结果, 请使用所有三种评估方法。

单目相机标定(转载)_第11张图片

 

检查重新投影错误

重投影误差是检测到的点和重新投影点之间的距离 (以像素为单位)。相机校准器应用通过将棋盘点从棋盘定义的世界坐标投影到图像坐标来计算重投影误差。然后, 应用程序将重新投影的点与相应的检测点进行比较。一般来说, 小于一个像素的平均重投影误差是可以接受的。

单目相机标定(转载)_第12张图片

 

"相机校准器" 应用以像素为单位, 以条形图的形式显示重投影错误。该图可帮助您识别哪些图像对校准有不利影响。选择条形图条目, 并从"数据浏览器" 窗格中的图像列表中删除图像。

反投影误差条形图
条形图显示每个图像的平均重投影误差, 以及整体平均误差。条形图标签与图像 Id 相对应。突出显示的条形图对应于所选图像。

单目相机标定(转载)_第13张图片

通过以下方式之一选择图像:

  • 单击图表中的相应栏。

  • "数据浏览器" 窗格中的图像列表中选择图像。

  • 调整总体平均值错误。单击并向上或向下滑动红线以选择异常图像。

检查外部参数可视化

三维外在参数图提供了以相机为中心的模式视图和以模式为中心的相机视图。如果拍摄图像时相机是静止的, 则以相机为中心的视图很有帮助。如果模式是静止的, 以模式为中心的视图是很有帮助的。您可以单击光标并按住鼠标按钮, 使用旋转图标旋转图形。单击棋盘 (或相机) 将其选中。可视化效果中突出显示的数据与列表中选定的图像相对应。检查图案和相机的相对位置, 以确定它们是否与您所期望的匹配。例如, 相机后面出现的图案指示校准错误。

单目相机标定(转载)_第14张图片

查看未扭曲的图像

若要查看消除镜头失真的效果, 请单击 "校准" 选项卡的"查看" 部分中的"显示未变形" 。如果校准准确, 图像中的扭曲线就会变得直。

单目相机标定(转载)_第15张图片

即使重绘误差较低, 检查未扭曲的图像也很重要。例如, 如果模式只包含图像的一小部分, 则失真估计可能不正确, 即使校准导致的重投影错误很少。下图显示了这种类型的不正确估计的一个示例, 用于单个摄像机校准。

单目相机标定(转载)_第16张图片

在查看未变形的图像时, 您可以通过在"校准" 选项卡的"视图" 部分中选择"鱼眼比例" 来更仔细地检查鱼眼图像. 使用 "比例因子" 窗口中的滑块调整图像的比例.

单目相机标定(转载)_第17张图片

改进校准

若要改进校准, 可以删除高错误图像、添加更多图像或修改校准器设置。

添加或删除图像

在以下情况下, 请考虑添加更多图像:

  • 您的图像少于10张。

  • 这些图案没有覆盖足够的图像帧。

  • 与相机相比, 这些图案的方向变化不够。

如果图像:

  • 图像具有较高的均值重投影误差。

  • 图像模糊。

  • 这些图像包含一个与相机平面的角度大于45度的棋盘。

    单目相机标定(转载)_第18张图片

    图像包含检测不正确的棋盘点。

 标准模型: 更改径向畸变系数的数量

可以指定两个或三个径向失真系数。在 "校准"选项卡上的 "相机模型" 部分中, 选中了 "标准", 单击 "选项"。选择"径向畸变" 作为2个系数3个系数。当光线比在镜头的光学中心更靠近镜头边缘时, 就会发生径向畸变。镜头越小, 失真越大。

 

单目相机标定(转载)_第19张图片

径向畸变系数模拟这种类型的畸变。扭曲的点表示为 (x扭曲, Y扭曲):

X扭曲 = x 个(1 + k1*R2 + K2*R4个 + K3个*R6)

Y扭曲= y(1 + k1*R2 + K2*R4个 + K3个*R6)

xY-不扭曲的像素位置。xy在归一化的图像坐标中。通过平移到光学中心并除以以像素为单位的焦距, 从像素坐标计算出归一化图像坐标。因此, xy是无量纲的。

  • K1, K2, 和k3个-透镜的径向畸变系数。

  • R2: X2 + Y2

通常情况下, 两个系数足以进行校准。对于严重的失真, 例如在广角镜中, 您可以选择3个系数来包括k3个.

未扭曲的像素位置位于规范化的图像坐标中, 原点位于光学中心。坐标以世界单位表示。

标准型号: 计算滑板

当您选中 "计算 Skew"复选框时, 校准器将估计图像轴倾斜。一些相机传感器包含的缺陷导致图像的x轴和y轴不垂直。您可以使用倾斜参数对此缺陷进行建模。如果不选中该复选框, 则假定图像轴是垂直的, 这是大多数现代相机的情况。

标准模型: 计算切向失真

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

单目相机标定(转载)_第20张图片

扭曲的点表示为 (x扭曲, Y扭曲):

X扭曲 = x + [2 * p1 * x * y + p2 * (R2+ 2 * x2)]

Y扭曲 = y + [p1 * (R2+ 2 *y2) + 2 * p2 * x * y]

xY-不扭曲的像素位置。xy在归一化的图像坐标中。通过平移到光学中心并除以以像素为单位的焦距, 从像素坐标计算出归一化图像坐标。因此, xy是无量纲的。

  • P1和p2-透镜的切向畸变系数。

  • R2: X2 + Y2

当您选择"计算切向失真"复选框时, 校准器将估计切向失真系数。否则, 校准器将切线失真系数设置为零。

鱼眼模型: 估计对齐

在 "相机模型" 部分中, 选中"鱼眼", 单击 "选项"。选择 "估计对齐",以便在鱼眼透镜的光轴与图像平面不垂直时, 能够估计轴对齐。

导出相机参数

当您对校准精度感到满意时, 请单击 "导出相机参数"。通过选择"导出相机参数" , 可以将相机参数保存并导出到对象, 也可以将相机参数生成为 matlab 脚本。

 导出相机参数

选择"将相机参数 > 将参数导出到工作区" 以在工作区中创建cameraParameters对象。该对象包含摄像机的内在和外在参数以及失真系数。您可以将此对象用于各种计算机视觉任务, 如图像不失真、测量平面对象和三维重建。请参阅使用校准摄像机测量平面物体。通过选中"导出估计错误"复选框, 可以选择导出 "相机校准错误" 对象, 该对象包含估计相机参数的标准错误. cameraCalibrationErrors

生成matlab脚本

选择"导出相机参数 > 生成 matlab 脚本",将相机参数保存到 matlab 脚本中, 使您能够重现校准会话中的步骤。

引用

[1] 张, Z. "一种灵活的相机校准新技术。基于模式分析和机器智能的 Ieee 交易。第22卷, 数字。11, 2000, 1330-1334 页。

[2] Heikkila, J. 和 O. Silven。"带有隐式图像校正的四步摄像机校准程序。Ieee 计算机视觉和模式识别国际会议。1997年。

[3] Scaramuzza, D., A. Martinelli 和 R. Siegwart。"用于轻松校准定向相机的工具箱。IEEE 智能机器人和系统国际会议论文集 (IROS 2006)。中国北京, 2006年10月7日至15日。

[4] Urban、S.、J. Leitloff 和 S. Hinz。"改进的宽角、鱼眼和全方位相机校准。摄影测量和去除传感杂志。第108卷, 2015年, pp.72–79。

另请参见

相机校准器 立体声相机校准器 cameraParameters detectCheckerboardPoints estimateCameraParameters generateCheckerboardPoints showExtrinsics showReprojectionErrors stereoParametersundistortImage

相关示例

  • 单摄像机标定精度的评价
  • 使用校准摄像机测量平面物体
  • 从两种视角看结构
  • 从多个视图的运动结构
  • 立体声视频的深度估计
  • 三维点云注册和拼接
  • 未校准的立体图像校正
  • 棋盘模式

更多关于

  • 立体声相机校准应用程序
  • 坐标系

外部网站

  • 相机校准与 MATLAB

你可能感兴趣的:(单目相机标定(转载))