计算机视觉——棋盘格标定法获取相机内参外参

  • 一、原理
    • 相机标定目的
    • 相机标定的输入
    • 相机标定的输出
    • 相机标定策略
    • 相机拍摄图像变换过程
    • 相机内参
    • 相机外参
  • 二、环境
  • 三、数据集
  • 四、运行结果与分析
    • 角点提取
    • 校准
    • 重新投影错误
    • 内参矩阵
  • 五、总结

一、原理

相机标定目的

为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。 畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能由于摄像机镜头的原因。

相机标定的输入

标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般情况下假定图像位于Z=0平面上)。

相机标定的输出

摄像机的内参、外参系数。

相机标定策略

  1. 光学标定:利用已知的几何信息(如定长棋盘格)实现参数求解。
  2. 自标定:在静态场景中利用structure from motion估算参数。
    本次实验中使用光学标定法

相机拍摄图像变换过程

设P=(X,Y,Z)为场景中的一点,在针孔相机模型中,其要经过以下几个变换,最终变为二维图像上的像点p=(μ,ν):

  1. 将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位姿,也就是相机的外参数。
  2. 从相机坐标系,通过透视投影变换到相机的成像平面上的像点p=(x,y)。
  3. 将像点p从成像坐标系,通过缩放和平移变换到像素坐标系上点p=(μ,ν)。

相机内参

相机内部参数/内方位元素:焦距、像主点坐标、畸变参数
从相机坐标系,通过透视投影变换到相机的成像平面上的像点,将该变换过程整理为矩阵相乘的形式:

将矩阵K称为相机的内参数,

为了不失一般性,可以在相机的内参矩阵上添加一个扭曲参数s,该参数用来表示像素坐标系两个坐标轴的扭曲。则内参数K变为

对于大多数标准相机来说,可将扭曲参数s设为0

相机外参

将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位姿,也就是相机的外参数。
相机外部参数/外方位元素: 旋转、平移
用矩阵表示:

t表示平移的量,R表示x,y,z方向的旋转参数,矩阵与平移量相加就可得出变换后的矩阵,与旋转参数相乘后可得旋转后的矩阵

旋转参数R:

二、环境

win10,64位,MATLAB2018b,手机型号:小米8,计算手机内参:python3.7

三、数据集

拍摄15张不同角度的黑白棋盘格作为数据集

四、运行结果与分析

角点提取

选取所有图像的角点,以其中一张图像选取过程展示如下:
单击矩形棋盘图案上的四个极端角:

自动计算两个方向上的平方数,并在不失真的情况下显示预测的网格角:

预测的角点与真实的图像角点足够接近。因此,不必通过输入对径向畸变系数的猜测来“帮助”程序检测图像拐角。使用这些位置作为初始猜测自动提取角。
自动提取图像的角,并显示如下(角点周围的蓝色方框显示了角点查找器窗口的界限):

本次实验拍摄图像都比较清晰,没有出现失真的情况,因此网格中的某些预测角距离实际网格角不远,没有错误的提取。如果图像失真,网格中的一些预测角与实际网格角距离较远,为了帮助系统更好地猜测拐角位置,要手动输入对畸变系数的猜测,然后再进行预测,如果接下来预测点与真实点距离比较近则预测成功,否则需要再次输入畸变系数进行尝试。

校准

校准分为两个步骤:首先进行初始化,然后进行非线性优化。
初始化步骤基于不包含任何镜头畸变的校准参数计算封闭式解
非线性优化步骤将所有校准参数上的总重投影误差(最小二乘)最小化。
初始化步骤得出的参数结果:

非线性优化后得出的参数结果:

其中:fc是横纵方向的焦距,cc表示主光点的偏移,kc是畸变参数,这几个参数是相机内参中的重要参数。
外部参数:
“以相机为中心”

“以世界为中心”

重新投影错误


以彩色编码的叉号形式显示:

在大量图形上,重投影误差非常大。原因是,我们在提取某些失真的图像上的角点时并没有做非常仔细的工作。

内参矩阵

小米8手机的内参矩阵为

五、总结

通过结合matlab与python的求解,很顺利的得出了手机相机的内参矩阵以及棋盘格标定的重要参数和外部参数,同时也计算了重投影错误。可以看出第一次计算重投影错误发现了很多错误,这是因为在一个或多个图像上错误提取了拐角,这也是检查重投影错误的重要意义。在这种情况下,可以使用不同的窗口大小(更大或更小)重新计算特定图像的角,然后特定角的重投影误差就会变小。

计算机视觉——棋盘格标定法获取相机内参外参相关推荐

  1. 相机的内参会改变吗_相机内参外参及成像过程

    前段时间有人问我怎么由点的世界坐标计算计算对应的像素坐标,我详细的推导了下,现在把整个过程写篇博客.虽然网上有很多相关的文章,但是我可能会写的更详细些. 一.小孔成像模型 1.基本概念及公式 如图所示 ...

  2. 用matlab对相机进行标定获取相机内参

    常见的相机标定方式是张正友的棋盘格标定法,即用相机拍摄打印好的棋盘格图图像,将图像传入函数计算出相机的内参数据. 本文讲解的是将相机直接连接电脑,用matlab的相机标定工具箱通过相机实时采集一定数量 ...

  3. matlab棋盘格标定角点,相机标定(Camera calibration)Matlab——棋盘格标定原理,流程...

    计算机视觉----相机标定 相机标定概念:图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数.求解 ...

  4. JointCalib-雷达与相机的外参标定

    0. 简介 作为自动驾驶行业最头疼的问题之一,外参标定一直以来受到广泛的关注,尤其是最常使用的激光雷达与相机的外参标定.之前在文章:3D雷达与相机的标定方法详细教程与多传感器融合感知 --传感器外参标 ...

  5. 相机标定(1)内\外参矩阵和畸变矩阵

    相机标定可以说是计算机视觉/机器视觉的基础.分为以下内容: 相机标定的目的和意义 相机成像过程的简化与建模 针孔相机模型的数学描述 标定针孔相机模型的参数 相机标定的目的和意义 我们所处的世界是三维的 ...

  6. 针对高分辨率雷达和相机的无标定板的像素级外参自标定方法

    介绍:固态激光雷达和相机的外参标定系统 摘要 这是今年的一篇针对高分辨率的固态激光雷达(非重复性扫描型)或者多线的激光雷达和相机在无标定板的环境中自动化外参标定的一篇文章.本文的方法不需要基于巧克力板 ...

  7. Ubuntu18系统下采集点云数据(速腾16线激光雷达)与ZED 2 相机进行外参标定(Matlab的LCC工具箱)

    这篇是最近的实验记录:在Ubuntu系统下读取点云数据并在rviz中显示,录制自己的rosbag数据包并离线播放,将rosbag文件转化为pcd格式导入MATLAB中,和双目相机进行外参标定. 目录 ...

  8. 安卓手机标定相机IMU外参过程

    本文阐述安卓手机标定相机IMU外参过程,包括以下主要流程: 1. 制作标定板 2. 单独标定单目相机的外参 3. 单独标定IMU的外参 4. 相机IMU的联合标定 1.为什么要进行相机标定? 在图像测 ...

  9. 多激光雷达与相机的外参快速精准标定(arxiv 2021)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:Fast and Accurate Ex ...

最新文章

  1. java对象头_浅谈java对象结构 对象头 Markword
  2. python流程控制-Python 流程控制
  3. VS Code Remote,在服务器上开发程序,开启全新开发模式
  4. K8S 基于NFS实现文件集群间共享
  5. 不要被泛型和向后兼容性所愚弄。 使用泛型类型
  6. Android IPC系列(一):AIDL使用详解
  7. Linux 字符集 en_us,Linux语言环境:en_US.UTF-8 vs en_US
  8. 本田思域自动挡的使用技巧
  9. HTML5 meta最全使用手册
  10. 鸿蒙os 实测,鸿蒙体验怎么样_鸿蒙OS实测体验
  11. 基于c语言的学生成绩管理系统论文,C语言学生成绩管理系统论文
  12. VISIO2016的安装报错
  13. python android开发视频教程_程序员学习视频教程汇总
  14. OBLOG4.5 商业SQL版 漏洞解析
  15. c# 获取数字的小数位数
  16. APP运行时Crash自动修复系统
  17. 服务器cpu虚拟化已禁用怎样解禁,虚拟化已禁用,有办法吗
  18. 企业证书更新与说明/羊毛口子:美团实体跑腿拍照撸1~20元
  19. 推荐10款简单好用的免费内网穿透工具
  20. Python全栈编程

热门文章

  1. Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据)
  2. 1231231312
  3. java 验证码突然不显示
  4. pkpm弹性时程分析计算书怎么出_弹性时程分析——PKPM软件操作篇.pdf
  5. Android 性能优化(62)---存检测、卡顿优化、耗电优化、APK瘦身——详解篇
  6. Iphone自带的邮箱 每次发完邮件在已发送里会显示重复发送了两封
  7. JeecgBoot 低代码平台 2.4.5 版本发布,钉钉与企业微信集成版本
  8. 【STM32篇】驱动MXL90614红外测温模块
  9. vue中 @scroll的使用
  10. Filter、FilterChain、FilterConfig