1 相机标定常见方法

广义来说,相机标定不单包括成像过程的几何关系标定,还包括辐射关系的标定,本文只探讨几何关系。相机标定是3D计算机视觉(Computer Vision)里从2D图像中提取量测信息的必要步骤。最初发展于摄影测量学(Photogrammetry),后逐渐被大量应用于计算机视觉中。

相机标定一般来说需要参照物或标定物,按照标定物的维数,来分可以分为:

  • 基于三维参照物标定法(3D reference object based calibration):通过相机观测具有较高精度的已知三维信息进行标定解算的方法。标定物一般由两个或者三个正交的平面组成,该方法需要较为昂贵的标定设备和精心设计的标定步骤。在摄影测量学里,最经典的就是利用已知控制点通过共线方程(Collinearity Equation),使用后方交会法(Resection Method)或光束法(Bundle Method )求解。计算机视觉中最流行的标定方法是Roger Y. Tsai(1987). A versatile camera calibration technique for high-accuracy 3D machine vision metrology using off-the-shelf tv cameras and lenses.

  • 基于二维平面标定法(2D plane based calibration):这该类方法中,使用相机对具有某种图案的平面(planar pattern)在不同的方位进行观测。(以张正友标定法(2000)为经典,参见论文:A Flexible New Technique for Camera Calibration

  • 基于一维线标定法(1D line based calibration):使用一组共线的点进行标定解算,通常的使用相机观测绕某一固定点移动的直线,例如悬挂在天花板上的一行小球等。(参见论文:Z. Zhang(2002). Camera calibration with one-dimensional objects

  • 自检校法(Self-calibration):顾名思义,不使用任何标定物,仅仅利用像点间的对应关系进行标定解算,因此也可称之为:基于0维标定物的方法。通常做法是移动相机,对一静态的场景进行成像,通过核线变换后,满足两个代数约束条件,继而可以进行相机标定。虽然不需要标定物,但是却需要大量的参数需要估算,由此也导致较多很难的数学问题。(参见论文:O. D. Faugeras at all(1992). Camera self-calibration: Theory and experiments

  • 除了上述的方法,还有利用灭点( Vanishing points)解算正交方向的方法和只存在旋转情形的标定方法等。

除了上述分类方法外,还有将标定算法分为:传统相机标定法、主动视觉相机标定方法、相机自标定法,感兴趣的话可以进行相关了解。必须要指出的是,上述的方法,不能一概而论地认为某一种方法优于其他方法,具体选择哪种标定方法,完全取决具体的情形,如下简单对比一下几种主要的标定方法:

  • 有标定物法 vs. 自检校法:无论何时,如果我们能够事先进行相机标定,就应该利用标定设备进行相机标定。一般来说,自检校方法很难达到这种事先标定所取得的精度,因为前文已经介绍过,自检校需要对很多参数进行估算,涉及很复杂的数学问题。但是在事先标定不可能实现的情况下,例如用旧电影进行场景重建,这个时候就只能利用自检校的方法。

  • 部分(Partial) vs. 全(full)自检校:部分自检校指的是,针对相机的一部分内参( Intrinsic parameters)进行标定。往往在只能选自检校方法时,情况允许的时候,人们更倾向于使用部分自检校的方法,原因很简单,需要估算的参数会更少,算法相对全参自检校要简单。以使用变焦镜头的相机进行三维重建( 3D reconstruction)为例,合理的做法是解算出部分参数如像素宽高比和像素偏斜度。

  • 3D vs. 2D 标定物:3D标定物通常可以获得很高的精度,因此如果对于标定的精度要求很高而且又负担得起(标定设备相对昂贵得多),就可以选择3D标定物。从全世界计算机视觉的研究者和开发者们的反馈来看,使用2D标定物往往是最佳的选择,使用方便,造价便宜,而且也能获得不错的精度。

  • 1D标定物:通常应用于标定多摄像机之间的相对几何关系以及各个摄像机的内参,做法上是让不同安装位置的多个摄像机对同一组点同时成像观测,通常来讲3D或者2D的标定物很难实现这一点。

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 相机标定:原理简介(二)

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

  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. 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)

    相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...

随机推荐

  1. Vue学习之路第六篇:v-on

    v-on指令用来触发页面事件的指令. <body> <div id="app"> <button v-on:click="show()&qu ...

  2. nysql数据库优化

    硬件优化 软件优化 my.cnf参数优化,命令监控show global status\G 调优工具mysqlreport sql语句优化 索引的优化 白名单机制--百度,就是让一些不规范的语句执行查 ...

  3. 使用tf.ConfigProto()配置Session运行参数和GPU设备指定

    参考链接:https://blog.csdn.net/dcrmg/article/details/79091941 tf.ConfigProto()函数用在创建session的时候,用来对sessio ...

  4. js解决跨域问题

    JavaScript中的常见解决跨域的方法 1. 通过jsonp跨域 1.)原生实现: 2. document.domain + iframe跨域 此方案仅限主域相同,子域不同的跨域应用场景. 1.) ...

  5. 使用PoolingHttpClientConnectionManager解决httpclient的多线程请求问题

    直接上代码 1.主程序 public class TestMain { public static void main(String[] args) throws NSQException, Time ...

  6. $.ajax() 获取不到return 返回值

    /*常见错误示例 直接在 ajax 里面return 结果 */ function demo(){ $.ajax({ url : 'test.do', type : "post", ...

  7. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新

    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行. 以下是使用原生的lua解释器编译字节码: 1 ...

  8. [Javascirpt] Developer-friendly Flow Charts with flowchart.js

    Flowchart.js is a great tool for creating quick, simple flowcharts in a way that keeps you out of a ...

  9. java语言中的多态概述

    多态:一个对象相应着不同类型 多态在代码中的体现:父类或接口的引用指向其子类对象. 多态的优点: 提高了代码的扩展性,前期定义的代码能够使用后期的内容. 多态的弊端: 前期定义的内容不能使用后期子类中 ...

  10. php给图片加入文字水印

    PHP对图片的操作用到GD库.这里我们介绍怎样给图片加入文字水印. 大致分为四步: 1.打开图片 2.操作图片 3.输出图片 4.销毁图片 以下我们上代码来详细解说每步的实现过程: <? php ...