2 针孔相机模型

常见的相机标定中,使用的相机多为针孔相机(Pinhole camera),也就是大家熟知的小孔成像理论。将其中涉及的坐标系之间的相互转换抽离出来,即为针孔相机模型的核心。

上图所示的模型即为针孔相机模型,当然现在有很多资料对其进行阐述,我这里挑选另一种便于理解的表达方法。这里为了方便阐述,将像平面和物方点置于光学中心的一侧(实际中光学中心位于像平面和物方点之间)。首先,让我们看一下其中的符号:

符号 含义
C 相机的光学中心(optical center)或者称为摄影中心
o 像主点(principal point),是指相机主光轴与像平面之间的交点,位于相片中心附近位置,用像素坐标表示为[u0,v0]T,用毫米单位表示时为[x0,y0]T
f 相机主距(focal length),或称相片主距
M 物方点,即被观测的三维点
m 物方点M在像平面上的像点,是光学中心C与物方点M连线与像平面的交点
o−uv 像平面坐标系,二维笛卡尔坐标系
C−xyz 像空间坐标系,三维笛卡尔坐标系,坐标轴x,y分别与像平面坐标系的u,v平行且具有相同的正方向,右手系
O−XYZ 物方空间坐标系,三维笛卡尔坐标系,定义具有随意性,右手系
(xi,yi,f) 像点m在像空间坐标系C−xyz中的坐标
(xs,ys,zs) 物方点M在像空间坐标系C−xyz中的坐标
(Xs,Ys,Zs) 物方点M在物方空间坐标系O−XYZ中的坐标

从上述符号的含义中,可以看出光学中心C,像点m和物方点M是在一条直线上,具有共线性(collinear),由此引出摄影测量中,赫赫有名的共线方程( Collinearity equation),横贯整个摄影测量学与平差理论:

x−x0=−f R11(X−X0)+R21(Y−Y0)+R31(Z−Z0)R13(X−X0)+R23(Y−Y0)+R33(Z−Z0)y−y0=−f R12(X−X0)+R22(Y−Y0)+R32(Z−Z0)R13(X−X0)+R23(Y−Y0)+R33(Z−Z0)(1)

其矩阵形式为:

⎡⎣⎢X−X0Y−Y0Z−Z0⎤⎦⎥=λR⎡⎣⎢xy−f⎤⎦⎥(2)

其中λ为尺度系数,同一单位制,且两个坐标系之间不存在缩放的时,λ=1.0。

计算机视觉中,使用增广向量的方式表示点,即m~=[u,v,1]T同样表示点m,M~=[X,Y,Z,1]同样表示点M。(至于为什么增加的一维用1,可参见Richard Hartley et all. Multiple View Geometry in Computer Vision,当增加的一维为0时,通常认为是无穷远处平面Π∞,在像平面上的成像)物方三维点M和相片上投影点m之间的关系被描述为:

sm~=A[R  t]M~≡PM~(3)

A=⎡⎣⎢α00γβ0u0v01⎤⎦⎥(4)

P=A[R  t](5)

其中,s是任意的尺度系数,(R,t)被称为外参(Extrinsic parameters)分别表示由物方坐标系经过旋转和平移变换到像空间坐标系中。A被称为相机内参矩阵( Intrinsic matrix),矩阵中(u0,v0)表示像主点坐标,α,β分别表示像平面中沿u,v轴方向像素的比例,也就是像素宽高比。γ参数描述的是像平面坐标轴的偏斜程度,假设图像坐标轴之间的夹角为θ,则γ=αcotθ,如果θ=90°,则γ=0。P是一个3×4的矩阵,被称为为投影矩阵,混合了内参和外参而成。

由上陈述就显而易见,整个相机标定的任务就是要获得物方三维物体与对应的二维图像之间的转换模型参数,转换参数也被分为两类:

  • 外参(Extrinsic 或 external parameters):包括相机的定向(orientation或称旋转(rotation))和定位(location或称平移(translation))信息,也就是上文提及的(R,t),其中R是3×3的矩阵,由3个不相关的角元素组成(关于角元素的定义,并不唯一,主要有分别以x,y,z为主轴的转角系统,角元素的表示方法也不唯一,常用的有欧拉角,旋转向量等),t是3×1的向量,含有3个参数。

  • 内参(Intrinsic 或 internal parameters):也就是描述相机特性的参数,(α,β,γ,u0,v0)。

综上,所有的相机标定方法,本质都是在求取内参和外参中所含的11个参数。

Camera Calibration 相机标定:原理简介(二)的更多相关文章

  1. Camera Calibration 相机标定

    Camera Calibration 相机标定 一.相机标定方法 在opencv中提供了一组函数用于实现相机的标定,标定返回的值包括:相机内参矩阵(fx fy xc yc).相机外参矩阵(R t)以及 ...

  2. Camera Calibration 相机标定:原理简介(五)

    5 基于2D标定物的标定方法 基于2D标定物的标定方法,原理与基于3D标定物相同,只是通过相机对一个平面进行成像,就可得到相机的标定参数,由于标定物为平面,本身所具有的约束条机,相对后者标定更为简单. ...

  3. Camera Calibration 相机标定:原理简介(四)

    4 基于3D标定物的标定方法 使用基于3D标定物进行相机标定,是一种传统且常见的相机标定法.3D标定物在不同应用场景下不尽相同,摄影测量学中,使用的3D标定物种类最为繁杂,如图-1的室内控制场,由多条 ...

  4. Camera Calibration 相机标定:原理简介(一)

    1 相机标定常见方法 广义来说,相机标定不单包括成像过程的几何关系标定,还包括辐射关系的标定,本文只探讨几何关系.相机标定是3D计算机视觉(Computer Vision)里从2D图像中提取量测信息的 ...

  5. Camera Calibration 相机标定:原理简介(三)

    3 绝对圆锥曲线 在进一步了解相机标定前,有必要了解绝对圆锥曲线(Absolute Conic)这一概念. 对于一个3D空间的点x,其投影空间的坐标为:x~=[x1,x2,x3,x4]T.我们定义无穷 ...

  6. Camera Calibration 相机标定:Opencv应用方法

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49427383 Opencv中Camer ...

  7. 【视频开发】【计算机视觉】相机标定(Camera calibration)原理、步骤

    相机标定(Camera calibration)原理.步骤 author@jason_ql(lql0716)  http://blog.csdn.net/lql0716 在图像测量过程以及机器视觉应用 ...

  8. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

  9. 【视频开发】【计算机视觉】相机标定(Camera calibration)《二》

    简介 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Sprin ...

随机推荐

  1. CMDB设计

    CMDB(资产管理数据库) CMDB是所有运维工具的数据基础 CMDB包含的内容 用户管理,记录测试,开发,运维人员的用户表 业务线管理,需要记录业务的详情 项目管理,指定此项目用属于哪条业务线,以及 ...

  2. 小学生都能学会的python(闭包和迭代器)

    小学生都能学会的python(闭包和迭代器) 1. 函数名第一类对象 函数名其实就是变量名 1). 可以像变量一样互相赋值. 2). 可以作为函数的参数,进行传递 3). 可以作为返回值返回 4). ...

  3. RabbitMQ学习总结(6)——消息的路由分发机制详解

    一.Routing(路由) (using the Java client) 在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只 ...

  4. Winserver服务器-AD字段对照简图

    AD字段对照简图

  5. HDU——T 1054 Strategic Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1054 Time Limit: 20000/10000 MS (Java/Others)    Memory Li ...

  6. Android 混淆后的代码调试

    ProGuard的输出文件及用处 混淆之后,会给我们输出一些文件,在gradle方式下是在<project_dir>/build/proguard/目录下,ant是在<project ...

  7. 微信企业号开发:微信用户信息和web网页的session的关系

         微信企业号的用户是须要验证的,因此能关注企业号的用户事实上就是已经通过验证的用户.但企业应用中打开一个网页,在这个网页中怎样依据微信用户的信息创建web应用中最长使用的session呢?微信 ...

  8. 游标和动态SQL

    游标类别:静态游标(指在编译的时候,游标就与一个select语句进行了静态绑定的游标.这样的游标仅仅能作用于一个查询语句)和动态游标(就是希望我们的查询语句在执行的时候才跟游标绑定.为了使用动态游标, ...

  9. cocos2d-x 2.2.2 在lua中更换CCSprite的图片

    废话不多说,直接上代码 --lua --获取场景 local scene= CCDirector:sharedDirector():getRunningScene() --创建精灵 local tes ...

  10. poj_1952最大下降子序列,统计个数

    其实不算难的一道题,但憋了我好久,嗯,很爽. #include<iostream> #include<cstdio> #include<string.h> #inc ...