当前位置: 首页 > article >正文

基于MATLAB的相机内参标定及其原理——附实现教程

1.什么是相机内参标定?

      相机内参标定是为了确定相机的内部参数,包括焦距、光心位置和畸变系数等,以准确描述相机的成像过程。通过标定可以校正图像中的畸变,恢复图像与真实三维场景之间的几何关系,提升目标检测的精度。

2.相机内参标定的原理是什么?

1577c4282eca4b83ac0ebd8e0a6fe8d0.png

371b1091fef347a49cbc2be9d30f0e13.png

1dfda271efc14d6a83bafdd31360789b.png

3.说白了就是求其内参矩阵,呢该怎么操作呢?

3.1首先启动matlab程序点击相应的软件标定程序,点击APP中的图像处理和计算机视觉当中的Camera Clibrator:

3c4fd83fa106437ca4b98d9c6aefd448.png

3.2之后进入的相应的标定程序界面可以选择来自文件夹或者相机,不过相机第一次打开的时候需要安装相应的插件,在线安装可以参考其他博客,这里展示一下如何离线安装:

首先去官网手动下载相应的驱动包,地址为:MATLAB Support Package for USB Webcams - File Exchange - MATLAB Central

51f8b45125f1495985ecb2783ea82a05.png

点击下载download,之后再matlab中将当前文件夹切换为软件包所在的文件夹,如下所示,双击该文件然后进行安装:

e87450af81c14d8f868da3b324d33824.png

d4f5a1674d8840aca9a8e58340f56898.png

3.3之后出现以下页面安装成功,之后连接相机就可以在线捕捉数据,这里我提前整好了,所以以文件夹为例。

04020141744b415c9e7d18efae014f05.png4.之后导入数据后选择标定板的格式以及大小:

924e654ac9664d4499eb4a4b4119cdf5.png

5.确定之后, 会自动加载相应的数据:

c6f136cebebe4d2c8e5fdd56783e0ace.png

 6.然后会显示自动标定之后的相应结果,ec812ed1b75440a1a8f5ef52099e889d.png

 7.然后点击calibrate,进行标定,标定结果如下:

ec222d1c369b49ac84cde3475d238f7d.png

8.呢么结果怎么看呢,右上角第一个是重投影每张图片的误差,一 般来说精度在0.5以下可以使用,当然越低越好。右下角第二个是以相机为中心视角的外参情况,中间为相应的可视化结果。

9.之后我们可以导出相应模型的参数文件或者导入到工作空间:

1e414742d1d84f6bbf13f4d284be4fdc.png

10:怎么看我们此次标定的结果呢?就是我们需要的参数在哪里?点击我们导入的参数,双击后其参数如下所示:

ada04cddba3343078a5155641c048f16.png

其中:

  • ImageSize
    图像的尺寸 [高度, 宽度],单位是像素。例如 [1080, 1920] 表示图像的分辨率为 1920×1080 像素。

  • RadialDistortion
    径向畸变系数,通常表示为 [k1, k2, k3...]。用于修正由于镜头曲率导致的图像失真。例如:

    • k1: 一阶径向畸变系数。
    • k2: 二阶径向畸变系数。
      如果值为负,可能代表桶形畸变(图像边缘向内弯曲);如果为正,可能代表枕形畸变(图像边缘向外弯曲)。
  • TangentialDistortion
    切向畸变系数 [p1, p2]。切向畸变由镜头不对称安装引起,使得图像的某些部分出现拉伸或压缩。在这里值为 [0, 0],表示没有检测到切向畸变。

  • WorldPoints
    标定板上的世界坐标点的二维数组,表示真实场景中的点(通常单位是毫米)。

  • WorldUnits
    世界坐标点的单位,通常是 'millimeters',也可能是米或其他单位。

  • EstimateSkew
    表示是否估计相机像素的非正交性:

    • 值为 0 表示未估计(像素假定为正交的)。
    • 值为 1 表示允许非正交像素(不常见)。
  • NumRadialDistortionCoefficients
    径向畸变的系数数量。例如,这里为 2,表示只考虑 k1k2

  • EstimateTangentialDistortion
    是否估计切向畸变:

    • 值为 0 表示未估计切向畸变。
    • 值为 1 表示估计切向畸变。
  • ReprojectionErrors
    投影误差(重投影误差)的数组,表示每个校准点的实际图像位置与理论计算位置的偏差。

  • DetectedKeypoints
    标定过程中在图像中检测到的特征点(通常是标定板上的角点)的逻辑数组。

  • RotationVectors
    旋转向量,表示相机相对于标定板的旋转信息,长度为 3 的向量。

  • K相机内参矩阵(3x3矩阵),其形式为:

    0af92228cfc24a47bb3e82237c19c395.png
    • fx,fy​: 焦距(像素单位)。
    • cx,cy: 主点(光轴在图像平面上的交点)坐标。
    • Skew: 像素间的非正交性。
  • NumPatterns
    用于标定的标定板图片数量,例如这里为 18

  • Intrinsics
    包括所有相机内参的对象,通常包括焦距、主点坐标、畸变系数等。

  • PatternExtrinsics
    标定板相对于相机的外参信息,包括平移向量和旋转矩阵。

  • FocalLength
    焦距 [f_x, f_y],单位是像素。

  • PrincipalPoint
    主点坐标 [c_x, c_y],单位是像素。

  • Skew
    像素的非正交性,通常为 0 表示像素正交。

  • MeanReprojectionError
    平均重投影误差,衡量相机标定的准确性。值越小,标定结果越好。例如这里为 0.5054,表示误差约为 0.5 像素。

  • ReprojectedPoints
    通过标定参数计算的投影点坐标,与实际图像中的特征点相比,用于计算重投影误差。

11.呢么我们需要的只是K相机内参矩阵,如下所示:

  • ea76aebbff4343389efa171c435076c3.png

 

 

 


http://www.kler.cn/a/403657.html

相关文章:

  • HarmonyOS笔记5:ArkUI框架的Navigation导航组件
  • AbsPlus框架介绍2
  • pdf文档动态插入文字水印,45度角,旋转倾斜,位于文档中央,多行水印可插入中文
  • 【PCIE常见面试问题-1】
  • 【前端】JavaScript中的indexOf()方法详解:基础概念与背后的应用思路
  • 【FPGA开发】ZYNQ中PS与PL交互操作总结、原理浅析、仿真操作
  • 【C++】栈、队列、双端队列与优先级队列
  • Nginx: 实现Websocket代理
  • python基础知识(七)——写入excel
  • Python | Leetcode Python题解之第564题数组嵌套
  • vue3 element el-table实现表格动态增加/删除/编辑表格行,带有校验规则
  • 吉林大学 超星慕课 高级语言程序设计 学习通部分题目极其答案
  • docker学习笔记跟常用命令总结
  • Docker和VMWare有什么不同
  • vue使用List.forEach遍历集合元素
  • Word_小问题解决_1
  • 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成
  • 构建nginx1.26.1轻量级Docker镜像添加第三方模块nginx_upstream_check_module
  • 关于Redis单线程模型以及IO多路复用的理解
  • 【青牛科技】 GC3910:摇头机、舞台灯、Printer 和白色家电的理想驱动芯片是A3909/ALLEGRO 的优质国产替代
  • git自动转换换行符问题
  • python实现了一个基于深度学习的少样本视觉识别任务,并涉及到领域自适应(Domain Adaptation)的相关操作
  • uniapp 选择 省市区 省市 以及 回显
  • 【PPTist】开源PPT编辑器初体验
  • `ls -l ~/.ssh` 命令将列出 `.ssh` 目录中所有文件
  • 【ChatGPT】实现贪吃蛇游戏