专栏名称: 小白学视觉
本公众号主要介绍机器视觉基础知识和新闻,以及在学习机器视觉时遇到的各种纠结和坑的心路历程。
目录
相关文章推荐
生态梦网  ·  警惕!生态城4小区居民被骗100余万元 ·  2 天前  
51好读  ›  专栏  ›  小白学视觉

相机标定究竟在标定什么?

小白学视觉  · 公众号  ·  · 2023-04-03 10:05

正文

点击上方 小白学视觉 ”,选择加" 星标 "或“ 置顶

重磅干货,第一时间送达


相机标定可以说是计算机视觉/机器视觉的基础,但是初学者不易上手,本文将给读者整理一遍相机标定的逻辑,并在文末回答评论区提出的问题。分为以下内容:

  • 相机标定的目的和意义

  • 相机成像过程的简化与建模

  • 针孔相机模型的数学描述

  • 标定针孔相机模型的参数

相机标定的目的和意义

我们所处的世界是三维的,而照片是二维的,这样我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。 相机标定的目标是我们找一个合适的数学模型,求出这个模型的参数,这样我们能够近似这个三维到二维的过程,使这个三维到二维的过程的函数找到反函数。 这个逼近的过程就是「相机标定」,我们用简单的数学模型来表达复杂的成像过程,并且求出成像的反过程。标定之后的相机,可以进行三维场景的重建,即深度的感知,这是计算机视觉的一大分支。

相机成像过程的简化与建模

提到相机的成像,从根本上来说,就是在讨论相机的镜头。固定结构的相机镜头决定了一对固定的物像共轭关系,所谓「共轭」,意思是镜头前某个位置的物,它的像一定在镜头后的某个位置,这个关系是固定的。举个最简单的例子,无穷远处的物必然会在镜头的焦点处成像。这里说的固定结构,指的是镜头的焦距固定,光圈固定。 上图是Canon EF 85mm/F1.2L II USM,我们可以找一个与这个镜头具有相同的物像共轭关系的凸透镜来等效这个镜头,我们把这个凸透镜称作等效透镜,用朝外的双箭头表示,如下图。 这里说的等效,只是针对物像共轭关系的等效,也就是光路的等效,镜头中之所以用了形态各异的透镜主要是为了消除各种各样的像差,提高清晰度。换句话说,等效透镜的目的绝不是为了在实际应用中取代镜头(毕竟一个镜头都好贵),只是为了帮助我们理解。这样我们就可以画出相机拍摄到清晰的蜡烛燃烧场景的草图,如下图。 其中, 是火苗尖的物点, 是火苗尖的像点 , 是蜡烛根的物点, 是蜡烛根的像点, 是等效透镜的中心(也称为光心),红色虚线表达了物点 到 像点 成像光路中的两条,绿色虚线表达了物点 到像点 成像光路中的两条,红色是CCD面。 注意,刚刚说到我们画的是「相机拍摄到清晰的蜡烛燃烧场景的草图」,这表明像点 和像点 刚好落在CCD面上,那么假如像点没有落在CCD面上,也就是CCD拍摄的图像不清晰,我们如何确定像点的位置? 根据几何光学的作图法,由过等效透镜的焦点 的光线和过光心 的光线,我们可以作出像点 的位置,现在我们对「相机拍摄到清晰的蜡烛燃烧场景的草图」同样用作图法,只考虑 点的物像关系。 这样我们就能够得到成像光路中的4条:①是过透镜上边沿的光路,④是过透镜下边沿的光路,②是过等效透镜焦点的光路,③是过光心的光路。它们都表达了物点 与像点 的物像共轭关系,显然③过光心的光路是最容易建立物像共轭关系数学模型,因此我们用③来代表成像光路,对相机成像过程进行简化。 到这里我们发现,简化后的相机模型和针孔相机的成像原理很相似,因此我们把简化后的相机模型称为针孔相机模型。上图中的 是针孔相机模型的焦距,但请注意,此针孔相机「焦距」非彼等效透镜「焦距」,只是借用了「焦距」汇聚光线的概念,表达的是CCD面到光心的距离。 但是我们说的是简化后的相机模型和针孔相机的成像原理仅仅是相似,绝不能等同,由于针孔相机的原理是光沿直线传播,所以真实的针孔相机是没有「焦距」的概念的,也不存在像差,其物像关系不具有一一对应性,如下图。 所以准确的讲把相机的成像过程简化成针孔相机模型,只是借用了针孔相机中简单的数学关系来表达一些本来难以表达的数学关系,使得数学上大大降低了复杂性,但是这个简化的代价同样很大,它本身不考虑像差(虽然针孔相机模型补充了消畸变模型)、不考虑景深(针孔相机模型物像关系不具有一一对应性,认为凡是物总能成清晰像),并且假定等效透镜是薄透镜。所以说针孔相机模型仅仅是一种真实相机的成像过程的近似,甚至于我们可以说这是一种非常粗糙的近似,这使得这个模型对越符合针孔相机模型的真实相机近似程度越高,如网络摄像头、手机镜头、监控探头等等。

针孔相机模型的描述

我们对相机成像过程进行简化和建模得到了针孔相机模型,如下图示。 首先建立相机坐标系,我们以光心 为坐标系的原点, 方向是CCD像素排列的水平和竖直两个方向, 方向垂直与CCD面,建立右手坐标系,这是一个三维坐标系。其次,我们还需要建立CCD标号坐标系:以CCD左上角像素标号为原点,CCD像素排列的水平和竖直两个方向为 方向,这是一个二维坐标系。为了方便描述,我们之后将把针孔相机模型对称翻转过来,如下图所示,从数学的角度,它们是等价的。

  • 由光心 着光轴出发,像平面在 上, 是相机的物理焦距(单位: )。

  • 在空间中,在相机坐标系下的位置是

  • 在像平面上,有两个等价的位置描述:1. 在相机坐标系下的位置是 ;2. 在CCD标号坐标系下的位置是

  • 在无镜头畸变的条件下,光心 、点 与点 在一条直线上。

  • 是CCD单个像素在水平和竖直两个方向上的尺寸(单位: /像素),因此定义焦距为 (单位:像素)。

  • CCD标号坐标系原点到光轴的偏移量为 (单位:像素)。 根据相似三角形关系,可以得出: (1) 二维CCD标号坐标 二维CCD像素坐标 建立CCD像面上的点标号坐标与物理坐标之间关联,由于像平面在 上,可省略。 (2) 像点的二维像素坐标 物点的三维空间中的坐标 建立CCD像面上像点物理坐标与对应的三维空间中物点坐标之间关联。 (3) 像点的二维CCD标号坐标 物点的三维空间中的坐标 连接(1)和(2)的两个关联,也是实际进行标定得到参数 由以上三个关联可以得到:像点标号 像点坐标 物点坐标 在OpenCV及Matlab标定工具箱直接使用了(3)关联,不需要知道CCD单个像素的尺寸,因此在标定过程是得不到物理焦距 的,只能得到像素焦距 很容易发现,(3)关联是不约束 的,也就是说,针孔相机模型本身是欠定的,通过被点亮的CCD像素 我们只能知道物点 在射线 上,但无法确定具体的点,所以我们讲,针孔相机模型是一个射线方程模型, 点的射线方程: 以上的关系是在无镜头畸变的条件下建立的,但是实际上存在镜头畸变,可以理解成像点和物点之间的光线是弯曲的,要得到射线模型,要进行消除畸变。 (4) 补充消畸变模型 以像面中心像素坐标 为中心,像面上的点到中心的距离为

  • 合成畸变 其中:

  • 径向畸变

  • 切向畸变 把消畸变模型补充进针孔相机模型,因此「像点标号 像点坐标 物点坐标 」被修正为: 像点标号 像点坐标 物点坐标 消畸变后的射线方程 是:

标定针孔相机模型的参数

针孔相机模型中,只要确定这9个参数就可以唯一的确定针孔相机模型, ,这个过程就称为「相机标定」,其中前4个我们称为内参数,后5个称为畸变参数,畸变参数是为了补充内参的。所以一旦相机结构固定,包括镜头结构固定,对焦距离固定,我们就可以用这9个的参数去近似这个相机。这里说的「镜头结构固定」,按我个人的理解,除了焦距固定之外,也应当包含光圈固定,因为改变光圈的大小,除了景深之外,是有可能改变针孔相机模型中的光心位置,但是影响并不是很大。这意味着标定好的相机如果改变光圈大小,会使得标定误差变大但应该不会大到难以接受的地步。 对于针孔相机本身需要拟合的方程如下: 其中 代表了畸变图像和消畸变图像之间的变换。 因此,我们现在的任务就是找出一大堆具有对应关系的像点 和物点 的点对作为样本,来训练出模型的9个参数







请到「今天看啥」查看全文