0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

相机标定的逻辑和学习资料详细概述

电子工程师 来源:未知 2019-06-01 09:54 次阅读

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

相机标定的目的和意义

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

针孔相机模型的数学描述

标定针孔相机模型的参数

相机标定的目的和意义

我们所处的世界是三维的,而照片是二维的,这样我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。

相机标定的目标是我们找一个合适的数学模型,求出这个模型的参数,这样我们能够近似这个三维到二维的过程,使这个三维到二维的过程的函数找到反函数。

这个逼近的过程就是「相机标定」,我们用简单的数学模型来表达复杂的成像过程,并且求出成像的反过程。标定之后的相机,可以进行三维场景的重建,即深度的感知,这是计算机视觉的一大分支。

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

提到相机的成像,从根本上来说,就是在讨论相机的镜头。固定结构的相机镜头决定了一对固定的物像共轭关系,所谓「共轭」,意思是镜头前某个位置的物,它的像一定在镜头后的某个位置,这个关系是固定的。举个最简单的例子,无穷远处的物必然会在镜头的焦点处成像。这里说的固定结构,指的是镜头的焦距固定,光圈固定。

上图是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个参数 。那么这里就引发了两个问题:(1) 这么多像点和物点到底谁和谁是一对儿?(2) 即便我知道物点在哪里,可是我怎么样用相机坐标系来表达物点的位置 ?为了解决上述的两个问题,标定板应运而生。标定板的第一大作用,确定物点和像点的对应性。这里用到的原理主要是「透视不变性」,打个比方,你近看一个人和远看一个人,虽然他的鼻子大小变了,你看鼻子的视角也变了,但是拓扑结构肯定是不变的,你也不可能把鼻子看成是嘴巴。

所以在标定板中,印刷了拓扑结构,广泛应用的是棋盘格和圆点格,这两种之所以成为主流,不仅是因为它们的拓扑结构明确且均匀,更重要的是检测其拓扑结构的算法简单且有效。棋盘格检测的是角点,只要对拍摄到的棋盘格图像横纵两个方向计算梯度就可获得;而圆点格的检测只需要对拍摄到的圆点格图样计算质心即可。假如你开发了一套非常完美的检测人脸全部特征的算法,你完全可以用你的照片当作标定板。按照我的经验,圆点格的效果应该是好于棋盘格,因为圆点质心的「透视不变性」要比棋盘格的角点稳定的多。下图是同样尺寸、同样比例棋盘格和圆点在最大重投影误差处的误差对比,红色十字是提取的角点/质心,绿色圆圈是针孔相机模型计算出来认为的角点/质心位置。

下图是棋盘格与圆点格的重投影误差图,显然圆点格的重投影误差的误差空间要小。

但是圆点格的检测似乎是Halcon的专利(存疑),因此OpenCV和Matlab标定工具箱用的是棋盘格,要用圆点格得要自己写算法。下文中提到的标定板说的都是棋盘格。标定板的第二大作用是把标定板中的角点变换到相机坐标系下的坐标 。对于标定的初学者来说,很容易忽略的一点是标定板是具有标定板坐标系的。换句话说,标定板中的每个角点,在标定板坐标系下的位置是确定并且是已知的。

而标定板坐标系变换到相机坐标系的变换矩阵,我们称它的元素为外参数,所以在我眼中,相机标定的外参根本就是标定内参的副产品,它会随着标定板的摆放不同而不同,由标定板坐标系变换到相机坐标系的变换矩阵可以由下式表达:

其中, 称为旋转矩阵, 称为平移矩阵,下表 代表board to camera。注意这个坐标系的变换是一个线形变换,反应到物理上讲,这意味者标定板必须尽可能的平,如果标定板不平,这个变换就不是线形的了。我们把这个变换带到原本要拟合的方程中去:

如此一来,我们就把能够把CCD上拍摄的到角点的像素标号 和每一个角点已知的在标定板坐标系下的坐标 对应起来,通过各种各样的姿态作为样本,训练出全部参数

至于参数训练的方法,最小二乘,极大似然估计等等,很容易找到相关的资料,在此不再赘述。如果用OpenCV或Matlab标定工具箱进行标定,需要给出棋盘格的物理尺寸,这其实就是在建立标定板坐标系,从测量的角度讲,标定板的精度是相机标定精度的基准,是误差传递链上的第一个环节。所以为了使针孔相机模型更逼近真实相机,对标定板的质量有以下要求(按重要性顺序):

标定板的平面度高,棋盘格是直角;

标定板每个格子尺寸的高一致性;

真实尺寸与标称尺寸的差异小。

向祖师爷张正友致敬。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相机
    +关注

    关注

    4

    文章

    1343

    浏览量

    53492
  • 机器视觉
    +关注

    关注

    161

    文章

    4340

    浏览量

    120082
  • 计算机视觉
    +关注

    关注

    8

    文章

    1696

    浏览量

    45923

原文标题:相机标定究竟在标定什么?

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    相机标定示例(OpenCV /C++ /matlab工具箱TOOLBOX_calib)精选资料分享

    这里相机标定主要内容包括:图像的采集、相机参数获取、TOOLBOX_calib可视化描述一、相机标定感谢博主的代码分享,这里主要参考了一些(
    发表于 08-18 07:24

    CALIBRATION相机标定模块

    matrox mil开发资料:CALIBRATION相机标定模块
    发表于 12-10 16:32 8次下载

    相机标定介绍

    什么是摄相机标定?摄相机标定方法的分类?感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-22 12:04 0次下载

    opencv相机标定原理与步骤

    我们首先介绍下计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系。以及他们之间的关系。然后介绍如何使用张正友相机标定标定相机。摄像机
    发表于 12-04 16:56 1.8w次阅读
    opencv<b class='flag-5'>相机</b><b class='flag-5'>标定</b>原理与步骤

    TI的逻辑器件详细中文资料概述

    本文档的主要内容详细介绍的是TI的逻辑器件中文资料概述
    发表于 07-02 08:00 10次下载
    TI的<b class='flag-5'>逻辑</b>器件<b class='flag-5'>详细</b>中文<b class='flag-5'>资料</b><b class='flag-5'>概述</b>

    数字电子技术教程之逻辑代数基础的详细资料概述

    本文档的主要内容详细加速度是数字电子技术教程之逻辑代数基础的详细资料概述包括了:概述2 .逻辑
    发表于 10-17 08:00 0次下载
    数字电子技术教程之<b class='flag-5'>逻辑</b>代数基础的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    数字电路基础教程之时序逻辑电路的详细资料概述

    本文档的主要内容详细介绍的是数字电路基础教程之时序逻辑电路的详细资料概述。内容包括了:1.时序逻辑电路分析2.若干常用时序
    发表于 10-17 08:00 0次下载
    数字电路基础教程之时序<b class='flag-5'>逻辑</b>电路的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    STM32Cube学习教程之时钟树配置的详细资料概述

    本文档的主要内容详细介绍的是STM32Cube学习教程之时钟树配置的详细资料概述
    发表于 08-14 08:00 3次下载
    STM32Cube<b class='flag-5'>学习</b>教程之时钟树配置的<b class='flag-5'>详细资料</b><b class='flag-5'>概述</b>

    应该如何学习STM32资料概述

    本文档的主要内容详细介绍的是教你应该如何学习STM32资料概述
    发表于 11-08 14:45 26次下载
    应该如何<b class='flag-5'>学习</b>STM32<b class='flag-5'>资料</b><b class='flag-5'>概述</b>

    HALCON的3D相机标定

    转自:微信公众号AI图像 创建标定数据模型 你可以用算子create_calib_data创建一个标定数据模型,指定相机标定物体的数量。当用一个
    的头像 发表于 10-31 11:31 3964次阅读
    HALCON的3D<b class='flag-5'>相机</b><b class='flag-5'>标定</b>

    相机标定含义(解决什么是相机标定

    在大多数条件下,这些参数必须通过实验与计算才能得到。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性
    的头像 发表于 06-21 11:12 8346次阅读

    基于深度学习相机标定技术挑战

    该数据集包括了不同仿真环境下生成的合成数据,以及不同场景下由各类真实相机采集到的图像和视频序列。每一个数据样本均提供了准确的标定结果、相机参数、或视觉线索。
    发表于 04-10 10:45 383次阅读

    如何学习相机模型与标定

    相机标定是通过输入带有标定patter的标定板来获得相机参数的一个过程。实际的光学成像是一套非常复杂的过程,从三维世界投影到
    的头像 发表于 06-01 14:36 720次阅读
    如何<b class='flag-5'>学习</b><b class='flag-5'>相机</b>模型与<b class='flag-5'>标定</b>?

    双目相机标定的原理和方法

    首先,课程介绍了双目相机标定的基础知识。我了解到双目相机是由两个相机组成的系统,通过同时拍摄目标物体的两个视角来获取三维信息。
    的头像 发表于 07-03 14:25 3067次阅读
    双目<b class='flag-5'>相机</b><b class='flag-5'>标定</b>的原理和方法

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

    这个逼近的过程就是「相机标定」,我们用简单的数学模型来表达复杂的成像过程,并且求出成像的反过程。标定之后的相机,可以进行三维场景的重建,即深度的感知,这是计算机视觉的一大分支。
    的头像 发表于 10-18 17:00 930次阅读
    <b class='flag-5'>相机</b><b class='flag-5'>标定</b>究竟在<b class='flag-5'>标定</b>什么?