4 基于3D标定物的标定方法

使用基于3D标定物进行相机标定,是一种传统且常见的相机标定法。3D标定物在不同应用场景下不尽相同,摄影测量学中,使用的3D标定物种类最为繁杂,如图-1的室内控制场,由多条悬垂的杆组成,杆与墙壁不同位置上贴着标志点,并通过精密测量的方法,获得标志点的三维坐标,精度较高,但成本极其昂贵,而且需要定期维护,一般个人或实验室请慎入!计算机视觉中,经典的两种3D标定物,如图-2所示,图-2(a)是INRIA(1993)所使用的,由两个正交的平面组成,棋盘方形格图案被绘制在每个面上,并且提供其中角点的精确坐标;类似的还有用立方体(Cube),每个面同样也绘制上相同图案,相机可以对其三个面进行成像;另外还有非常流行的 Tsai(1987)所提出的标定设备和方法,如图-2(b),只使用与图-2(a)中相同的一个平面,但是在使用时,需要至少将标定平面移动一次位置,且移动信息是明确已知的。



图-1 摄影测量室内控制场



图-2 两种3D标定物



图-3 法国INRIA

4.1 主要流程

这一类标定法,主要包括四个步骤:

  1. 检测每张图片中的棋盘图案的角点(Detect the corners of the checker pattern in each image);

  2. 通过使用线性最小二乘法估算相机投影矩阵P(Estimate the camera projection matrix P using linear least squares);

  3. 根据P矩阵求解内参矩阵和外参A,R和t(Recover intrinsic and extrinsic parameters A,R and t from P);

  4. 通过非线性优化,提高A,R和t矩阵的精度(Refine A,R and t through a nonlinear optimization)。

除了上述的流程,还有另外一种做法是先通过非线性优化改善相机投影矩阵P,然后获得相机内参和外参。

4.2 角点检测

一般来说,为了提高角点检测的准确度和精度,标定板图案中会使控制点处的梯度或对比反差最大化。即便如此,使用普通的角点检测方法,例如Harris,提取图像中的角点,往往难以获得较好的精度(超过一个像素)。

较好的解决手段是,事先知道图案结构的情形下,提取出各个矩形框的边,然后通过边所在直线相交的方法获得角点。例如常见的两种方法:第一种,首先进行边缘检测,将各个矩形框边缘拟合成直线;第二种,直接根据梯度最大原则,从矩形框的每一边拟合出直线。如果不考虑镜头畸变( lens distortion)更好的做法是,将共线的矩形框边缘,拟合成为一条直线,然后再求得交点。



图-4 一种基于最大梯度的角点检测结果

4.3 线性估算相机投影矩阵

一旦我们提取出图像中的角点,根据先验知识(图案的结构特点)就可以比较轻易的将这些角点与其对应的物方点相对应。根据原理简介(二)中的投影方程,我们就可以估算相机参数。但是问题是,直接求解A,R和t由于属于非线性问题,因而并不能实现。而通过线性估算投影矩阵P是可以实现的。

给定一组2D-3D对应点对:mi=(ui,vi)↔Mi=(Xi,Yi,Zi),则有:

[Xi0Yi0Zi0100Xi0Yi0Zi01uiXiviXiuiYiviYiuiZiviZiuivi]p=0(1)

其中,p=[p11,p12,…,p34]T,0=[0,0]T,令p矩阵的系数矩阵简记为Gi。对于n个点对,我们将其组成一个方程组:

Gp=0  with  G=[GT1,…,GTn]T(2)

可知,G是一个2n×12的矩阵。于是投影矩阵能够通过公式(3)的约束获得:

minp∥Gp∥2  subject to ∥p∥=1(3)

这一解法目的就是要使特征向量GTG所对应的特征值最小化。同时为了避免平凡解( trivial solution)p=0和考虑到实际情况,p形似一个尺度系数,此处设其模长为1。

上述的线性解法,实质上是一个代数距离最小化的方法,也就是耳熟能详的最小二乘法(Least squares),当数据存在偏差或噪声时,就会导致估算结果偏差,后续将会介绍一种无偏求解的方法。

4.4 根据P获取内参和外参

由前文的分析知,P是3×4的矩阵,如果我们将其分成两块:前三列(3×3)的矩阵B和最后一列(3×1)的矩阵b,因此矩阵P可以表示为:P≡[B  b],又知道P=A[R  t],则有:

B=AR(4)

b=At(5)

由公式(4)可以推出:

K≡BBT=AAT=⎡⎣⎢⎢α2+γ2+u20u0v0+γβu0u0v0+γββ2+v20v0u0v01⎤⎦⎥⎥(6)

由于,令ku=α2+γ2+u20,kc=u0v0+γβ,kv=β2+v20。前文已经提到,P形似一个尺度系数,实际中,K矩阵的最后一个元素K33≠1,因此需要对其进行归一化,之后就可以获得内参:

u0=K13(7)

v0=K23(8)

β=kv−v20−−−−−−√(9)

γ=kc−u0v0β(10)

α=ku−u20−γ2−−−−−−−−−−√(11)

由于α>0,β>0所以上述参数的解是唯一的。而内参获得后,相应的内参矩阵也就获得,外参矩阵自然也就可以解出:

R=A−1B(12)

t=A−1b(13)

4.5 非线性优化标定参数

上面获得相机内参和外参的方法,仅仅是依据代数距离最小约束,并不能完全代表物理含义,也就是说,获得的解是有偏差的。可以通过最大似然法(Maximum likelihood)提高解的精度。

给定n组2D-3D点对:mi=(ui,vi)↔Mi=(Xi,Yi,Zi),假设像点精度的受一系列不相关且独立分布的噪声影响,最大似然法通过使观测像点与其通过成像模型预测的像点之间的差异最小化,对模型参数进行优化:

minPΣi  ∥mi−ϕ(P,Mi)∥2(14)

其中,ϕ(P,Mi)是通过相机投影模型得到的像点。这个优化问题,属于非线性问题,可以利用著名的LM算法(Levenberg-Marquardt Algorithm)解决。

4.6 镜头畸变

行文至此,我们已经对针孔相机有了些许了解,我们利用成像的过程中三维空间点,相机光学中心和像点之间的共线性,得到成像方程。但是这一线性投影方程并不一定对所有针孔相机都适用,尤其是一些低端相机和广角相机,这些相机的镜头畸变往往较大,对之不能置之不理。

解决镜头畸变同样也需要四步:

  • 刚体变换(Rigid transformation):从物空间坐标系(X,Y,Z)到像空间坐标系(x,y,z):

[x  y  z]T=R[X  Y  Z]T+t(15)

  • 透视投影(Perspective projection):从像空间坐标系到理想的像平面坐标系(x′,y′),也就是说不考虑镜头畸变时的像平面坐标:

x′=fxz,  y′=fyz(16)

  • 镜头畸变(Lens distortion):对于未考虑镜头畸变的像点,对其补偿畸变值后,即可得到畸变纠正后的像点(x^,y^):

x^=x′+δx,  y^=y′+δy(17)

  • 仿射变换(Affine transformation):将以相片中心为坐标系的坐标变换到以像素为单位的图像坐标(u^,v^):

    u^=d−1xx^+u0,  v^=d−1yy^+v0(18)

    其中,(u0,v0)是像主点,(dx,dy)分别是像素水平方向和垂直方向的物理尺寸。

研究表明,镜头畸变主要分为两种:

  • 径向畸变(Radial distortion):使得成像点沿着向径方向(像主点与像点之间的连线方向)偏离其准确理想的位置,根据畸变系数的正负,又可以分为桶形畸变和枕形畸变两种。

  • 偏心畸变(Decentering distortion):常由镜头安装不当导致,偏心畸变差引起径向和切向的像点位移,偏心畸变一般来说只有径向畸变的1/7∼1/8,因此有些简化分析模型会将其忽略。

令r=x′2+y′2−−−−−−−√,则畸变模型为:

δx=x′(k1r2+k2r4+…)+[p1(r2+2x′2)+2p2x′y′](1+p3r2+…)δy=y′(k1r2+k2r4+…)+[2p1x′y′+p2(r2+2y′2)](1+p3r2+…)(19)

其中,ki是径向畸变系数,pi是偏心畸变系数。如果仅仅考虑径向畸变,且令u=x′/dx,  v=y′/dy则,像点坐标(u^,v^)可以表示为:

u^=u+(u−u0)[k1r2+k2r4]v^=v+(v−v0)[k1r2+k2r4](20)

将畸变考虑到非线性优化公式(14)中:

minA,R,t,k1,k2Σi  ∥mi−m^(A,R,t,k1,k2,Mi)∥2(21)

其中,m^(A,R,t,k1,k2,Mi)是物方点Mi在图像上的投影像点。

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

  1. Camera Calibration 相机标定

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

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

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

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

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

  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. 小程序--wepy省市区三级联动选择

    产品老哥对项目再一次进行关爱, 新增页面, 新增需求, 很完美........ 不多说, 记录一下新增东西中的省市区联动选择, (这里全国地区信息是在本地, 但不建议这么做, 因为js文件太大.. 建 ...

  2. cf掉分记——Avito Code Challenge 2018

    再次作死的打了一次cf的修仙比赛感觉有点迷.. 还好掉的分不多(原本就太低没法掉了QAQ) 把会做的前三道水题记录在这.. A: Antipalindrome emmmm...直接暴力枚举 code: ...

  3. 一、frp官方中文文档

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议. 目录 frp 的作用 开发状态 架构 使用示例 通过 ssh 访问公司内网机器 通过自定义 ...

  4. webpack基础知识点

    webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler). 入口(Entry) webpack 将创建所有应用程序的依赖关系图表(dependency ...

  5. dubbo Failed to check the status of the service com.user.service.UserService. No provider available for the service

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'u ...

  6. Methods and systems for sharing common job information

    Apparatus and methods are provided for utilizing a plurality of processing units. A method comprises ...

  7. 创业笔记-Node.js入门之JavaScript与Node.js

    JavaScript与Node.js JavaScript与你 抛开技术,我们先来聊聊你以及你和JavaScript的关系.本章的主要目的是想让你看看,对你而言是否有必要继续阅读后续章节的内容. 如果 ...

  8. C#-逆变 协变 反射 代码

    首先看一段测试代码,自己写的 class Program { static void Main(string[] args) { man OneMan = new man(); var d = One ...

  9. 【动态树问题】LCT学习笔记

    我居然还不会LCT QAQ真是太弱了 必须学LCT QAQ ------------------线割分是我www------------ LinkCut-Tree是基于Splay(由于Splay能够非 ...

  10. Restful技术

    一.概述 Restful技术是一种架构风格(Representational State Transfer)表现层状态转化,而不是一种编程标准. 之前前后端混在一起,前端通过mapping映射找到后端 ...