参考:https://www.jianshu.com/p/7d97fccd79bb

1. 相机标定

  • 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定(或摄像机标定)。
  • 无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性,决定了机器视觉系统能否有效的定位,能否有效的计算目标物。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
  • 相机的标定基本上可以分为两种,第一种是相机的自标定;第二种是依赖于标定参照物的标定方法。前者是相机拍摄周围物体,通过数字图像处理的方法和相关的几何计算得到相机参数,但是这种方法标定的结果误差较大,不适合于高精度应用场合。后者是通过标定参照物,由相机成像,并通过数字图像处理的方法,以及后期的空间算术运算计算相机的内参和外参。这种方法标定的精度高,适用于对精度要求高的应用场合。
  • 要建立相机成像的几何模型,就要理解相机模型中的四个平面坐标系的关系:世界坐标系、相机坐标系、图像坐标系和像素坐标系。
  • 一般来说,标定的过程分为两个部分:
    第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R,t (相机外参)等参数;
    第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数。

2. 世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的关系

  • 刚体变换(regidbody motion):三维空间中, 当物体不发生形变时,对一个几何物体作旋转、平移的运动,称之为刚体变换。
  • 透视投影(perspective projection):用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。有一点像皮影戏。它符合人们心理习惯,即离视点近的物体大,离视点远的物体小,不平行于成像平面的平行线会相交于消隐点(vanish point)。

2.1 像素坐标系

像素坐标就是像素在图像中的位置。一般像素坐标系的左上角的顶点就是原点,水平向右是u轴,垂直向下是v轴。

例如,在上图中,任意一个像素点的坐标可以表示为(ui,vi)。

  • 在像素坐标系中,每个像素的坐标是用像素来表示的,然而,像素的表示方法却不能反应图像中物体的物理尺寸,因此,有必要将像素坐标转换为图像坐标。

2.2 图像坐标系

将像素坐标系的原点平移到图像的中心,就定为图像坐标系的原点,图像坐标系的x轴与像素坐标系的u轴平行,方向相同;图像坐标系的y轴与像素坐标系的v轴平行,方向相同。

在图中,假设图像中心的像素坐标是(u0,v0),相机中感光器件每个像素的物理尺寸是dx * dy,那么,图像坐标系的坐标(x,y)与像素坐标系的坐标(u,v)之间的关系可以表示为:

写成矩阵的形式就为:

改写为齐次坐标的形式:

用另一种矩阵形式表示为:

2.3 相机坐标系

相机坐标系是以相机的光轴作为Z轴,光线在相机光学系统的中心位置就是原点Oc(实际上就是透镜的中心)。相机坐标系的水平轴Xc与垂直轴Yc分别与图像坐标系的X轴和Y轴平行。下图中,相机坐标系的原点与图像坐标系的原点之间的距离OcOi为f(也就是焦距):

上图中,如果有一个物体成像到图像坐标系,则可以用下图来表示(B点是相机坐标系中物体的点坐标,P是图像坐标系中成像的坐标):

可以知道相机坐标系与图像坐标系的关系为:

  • 这里大家可能有一个疑问:为什么OcOi这个距离是焦距呢?为什么像素坐标系会在相机坐标系的前面呢?按道理说,相机坐标系是以相机的透镜中心为原点,那像素坐标系和图像坐标系为什么不在后面呢?(本人当时也有这样的疑惑~)下面做一些推导。
    (1)先看一下小孔成像的原理,如下图所示。像平面就是成像的位置,这个是用户自己设定的,就是CCD传感器的位置,而焦平面就是镜头的焦距所在平面。当像平面刚好和焦平面重合时,此时所成的像是最清晰的。所以,这也就是为什么上面的公式中相机坐标系的原点到图像坐标系的原点的距离就是焦距。(实际上,由于物理条件的限制,像平面和焦平面是不可能完全重合的。)

    (2)在上图中,我们可以看到像平面在光学系统的右面,而在推导相机标定的坐标系关系时,却认为光线先通过成像平面,再在相机坐标系上汇聚到一个点,实际上,如果用下图来说明,可能就更清楚一点。其实就是在推导的时候,我们用虚拟像平面来替代像平面。

2.4 世界坐标系

世界坐标系是图像与真实物体之间的一个映射关系。如果是单目视觉的话,主要就是真实物体尺寸与图像尺寸的映射关系。如果是多目视觉的话,那么就需要知道多个相机之间的关系,这个关系就需要在同一个坐标系下进行换算。在下图中,世界坐标系的原点是Ow,而Xw、Yw、Zw轴并不是与其他坐标系平行的,而是有一定的角度,并且有一定的平移。当对相机坐标系按照一定的参数,分别绕着X、Y、Z轴做平移和旋转后,就得到在世界坐标系中的坐标。

相机坐标系与世界坐标系之间的关系可表示为:

平移表示为:

而对于旋转,可以采用如下方法,给定一个基本旋转矩阵和基本矩阵:


对于三个坐标轴的旋转,当绕着X轴旋转时,保持基本矩阵的第1列不变,有如下的旋转矩阵:

当绕着Y轴旋转时,保持基本矩阵的第2列不变,有如下的旋转矩阵:

当绕着Z轴旋转时,保持基本矩阵的第3列不变,有如下的旋转矩阵:

那么,整个相机坐标系到世界坐标系的变换公式为:

3. 相机的内参和外参

通过前面的几个步骤,我们已经得到了各个坐标系之间的相互转换关系,进一步就可以得到从像素坐标系到世界坐标系的变换关系:

其中,红色的框框就表示相机的外参,可以看到,外参就是相机相对于世界坐标系的旋转和平移变换关系。蓝色的框框表示相机的内参,内参是相机固有的属性,实际上就是焦距、像元尺寸。同时还可以看到,公式中有一个Zc,它表示物体离光学中心的距离。这也就说明,在标定的时候,如果物体在距离相机的不同位置,那么我们就必须在不同的位置对相机做标定。简单点来理解就是,当物体离相机远的时候,在图像上就很小,那么一个像素代表的实际尺寸就大;当物体离相机近的时候,那么成像效果就大,一个像素代表的实际物体尺寸就小。因此,对于每一个位置都需要去标定。

4. 图像畸变及畸变矫正

  • 畸变的英文单词是distortion。从英文的意思来看就是物体看起来是不正常的,比如说形状改变了,扭曲了或者其他的变化。造成图像畸变的原因有很多,总结起来可以分为两类:径向畸变和切向畸变。径向畸变来自于透镜形状。切向畸变来自于整个摄像机的组装过程。
    (畸变还有其他类型的畸变,但是没有径向畸变、切向畸变显著,所以忽略不计。)

4.1 径向畸变

  • 实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“桶形”或“鱼眼”的影响。光线在远离透镜中心的地方比靠近中心的地方更加弯曲。对于常用的普通透镜来说,这种现象更加严重。“桶形”畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。
  • 可以这样来理解,对于透镜而言,以透镜的中心作为原点,往外是透镜的半径的方向,当光线越靠近中心的位置,畸变越小,沿着半径方向远离中心的时候,畸变越大。典型的径向畸变有“桶形畸变”和“枕形畸变”。如下图所示。


    径向畸变的矫正公式如下:(这里不给出推导过程,直接使用)

    式中,(x,y)是理想的无畸变的坐标(图像坐标系),(xdr,ydr)是畸变后图像像素点的坐标,而且:

4.2 切向畸变

  • 切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。可以这样理解,当透镜与成像平面不行时,就产生了畸变,类似于透视变换。举个例子:
    切向畸变的矫正公式如下:(这里不给出推导过程,直接使用)

4.3 畸变矫正

通过上面介绍的径向畸变和切向畸变模型,可以得到两个模型最终作用于真实图像后的矫正模型:

由公式可得畸变有k1、k2、k3、p1、p2五个参数,对于质量比较好的相机来说,切向畸变很小,可忽略,径向畸变系数k3也可忽略,只计算k1、k2两个参数。张正友标定中就默认p1、p2为0。

5.小结

总结一下公式大致如下:

拓展:齐次坐标

  • 在介绍坐标系变换理论的时候,为什么要用齐次坐标呢?有的人说,不就是为了使得表达的方便吗?那我只能说,太片面了啊,因为我之前在这里也有很多的困惑。所以在这里,我就按照自己的理解做一些推导。
  • 先说一说什么叫齐次坐标系:能够明显的区分点与- 向量,并且便于计算机做图形处理时进行仿射变换的坐标系。
  1. 在欧式空间,两条平行线是不会相交的(可以想象成两条平行的光线)。但是,再想象一下或者我们经常看到的例子,比如平行的火车轨道,如果我们站在火车轨道的正中间,向很远处观察两条轨道,是不是感觉两条轨道在很远处相交了,这就是透视空间。透视的英文单词是perspective,英文单词的解释是:the art of creating an effect of depth and distance in a picture by representing people and things that are far away as being smaller than those that are nearer the front。仔细的揣摩一下就类似于坐在那个地方画画,怎么表达轨道是无限往前走的呢,这就是一种透视的原理。
  2. 例如,在欧式空间,表示一个三维的点和一个三维的向量可以采用如下的方法:

    由于向量只有方向和大小,如何只给出(x,y,z),根本不知道这到底是向量还是点。好了,如何来做呢?

    通过矩阵的变换:

    可以看到,点和向量区分的方式是最后一个数值是否为1
  • 从普通坐标系变换到齐次坐标系:
    如果是点(x,y,z)则变换为(x,y,z,1);
    如果是向量(x,y,z)则变换为(x,y,z,0)
  • 从齐次坐标系变换到普通坐标系:
    如果是点(x,y,z,1)则变换为(x,y,z);
    如果是向量(x,y,z,0)则变换为(x,y,z)
  1. 有了这些准备之后,我们知道,相机成像的过程就类似于上面我们说的透视变换的过程(这个过程不详细说,大致理解就行,可以参考专业的书籍),也就类似于画画。因此,普通坐标系上的点,就可以通过在后面加上一个1的方式来实现。又由于标定过程中的各个坐标系的变换,实际上就是坐标系中各个点的变换关系,因此,采用齐次坐标系不仅便于区分,而且有利于后面的计算。下面大致画了一下相机成像的透视变换图:

相机标定的原理及四个坐标系之间的关系相关推荐

  1. 相机标定01原理步骤(一)坐标系变换

    本人刚刚入手学习机器视觉,在CSDN记录自己的学习历程,欢迎各位朋友们批评指正! 此文是观看哔哩哔哩的学习笔记. 相机标定 计算机视觉的基本任务之一是从相机获取的图像信息出发计算三维空间中物体的几何信 ...

  2. 【相机标定】四个坐标系之间的变换关系

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 世界坐标系,相机坐标系,图像物理坐标系,像素坐 ...

  3. xy轴坐标图数字表示_【相机标定】四个坐标系之间的变换关系

    点击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 世界坐标系,相机坐标系,图像物理坐标系,像素坐标系之间的关系: 首 ...

  4. matlab相机标定畸变参数,相机标定的原理与意义及OpenCVMatlab实现差异小结.doc

    2011-01-30 相机标定的原理与意义及OpenCV.Matlab实现差异小结 分类:?OpenCV点滴2011-01-30 20:35?2292人阅读?评论(3)?收藏?举报 ??? 本文是一篇 ...

  5. AVM环视:一.相机标定及原理

    文章目录 前言 为何进行相机标定? 相机标定本质 坐标系 一.针孔模型 前言 环视AVM的第一步即对鱼眼相机进行标定,得到相机的内参.畸变系数.本文主要介绍了相机标定及其原理.相机标定本质上为坐标系之 ...

  6. 相机标定的原理及实现

    本文参考文档: 原理部分:https://blog.csdn.net/honyniu/article/details/51004397 代码部分:https://www.cnblogs.com/wil ...

  7. 摄像机标定中四大坐标系之间的关系

    一.四个坐标系简介和转换 相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的标定算法才能有更好的理解.本人研究了好长时间,几乎每天都重复看几遍,最终才会明白其推导过程.      我 ...

  8. ROS:坐标系之间的关系 (map \ odom \ base_link)

    ROS:坐标系之间的关系 (map \ odom \ base_link) 在使用ROS进行定位与导航操作时,会伴随着各种坐标系,并且每种坐标系都有明确的含义,ros中定义了常见的坐标系,并且所有的坐 ...

  9. 地理坐标系和投影坐标系之间的关系 基本概念

    地理坐标系和投影坐标系之间的关系 基本概念 地理坐标系:为球面坐标. 参考平面地是椭球面,坐标单位:经纬度: 投影坐标系:为平面坐标.参考平面地是水平面,坐标单位:米.千米等: 地理坐标转换到投影坐标 ...

最新文章

  1. python函数的参数类型,Python函数的主要参数类型
  2. KubeEdge temperature 部署
  3. java 选择图片 显示不出来的_JAVA 窗体选择图片显示在窗体中
  4. dubbo接口统一异常处理的两种方式
  5. dependencies.dependency.version' for org.hibernate:hibernate-validator:jar is missing.
  6. 联想r720游戏音效增强功能消失的解决
  7. Handler native层实现原理
  8. 在HBuilderX的git上导入github项目/把项目传到github
  9. 一个非常naive的分数阶微积分介绍
  10. CODEVS 2491 玉蟾宫
  11. if (Build.VERSION.SDK_INT = Build.VERSION_CODES.KITKAT)设置后的效果
  12. wordpress入门主题_设置和运行WordPress网站的终极入门指南
  13. linux 脚本 input,Linux 下通过命令行和脚本开关笔记本触控板和其他输入外设
  14. A Survey of Zero-Shot Learning: Settings, Methods, and Applications [reading notes]
  15. 华为云位居IDC中国大数据平台市场研究报告第一
  16. 软考科目那么多,该报哪个?
  17. 大数据揭秘诺奖评选“潜规则”
  18. linux录制声卡声音_在deepin上进行声音录制就是这么简单,娱乐工作两不误
  19. Spring Boot+微信小程序_保存微信登录者的个人信息
  20. 联想笔记本安装PHP环境,联想笔记本装系统步骤 教你如何正确安装笔记本系统...

热门文章

  1. python 圣诞_使用Python制作缩放自如的圣诞老人(圣诞树)
  2. Android---拍照
  3. Apollo控制模块:Apollo控制模块基础及控制算法介绍。
  4. EL(Expression Language)语言介绍
  5. 同济大学计算机夏令营2021,同济大学2021年接收推荐免试研究生(含直接攻博)名单公示...
  6. 生命力强悍的VB.net
  7. 皮皮书屋注册》被这道题难住了...http://www.ppurl.com/
  8. 欧拉操作系统即将发布,概念股闻声而动,华为在下什么大棋?
  9. C# Double 按有效数字 ToString
  10. 如何通过股票api接口l2获取股票数据?