文档章节

单目相机标定原理

LMcallme
 LMcallme
发布于 2014/09/16 21:37
字数 2191
阅读 3024
收藏 6

一.相机标定主要涉及三个坐标系:图像坐标系、摄像机坐标系和世界坐标系

【图像坐标系】

摄像机采集的图像变换为数字图像后,每副数字图像在计算机内为M x N数组,M行N列的图像中每一个元素(pixel)数值就是图像点的亮度(灰度)。如图,在图像上定义直角坐标系(U,V),每一个像素为单位的图像坐标系坐标,由于(u,v)只能表示像素位于数组中的列数与行数,并没有使用物理单位表示该像素在图像中位置,所以需要再建立以物理单位(mm)表示的图像坐标系,该图像坐标系以图像内某一点O1为原点,X轴和Y轴分别平行于U轴和V轴。

wpsA134.tmp

如图中,(u、v)表示以像素为单位的图像坐标系的坐标,(x、y)表示以mm为单位的图像坐标系的坐标。在X、Y坐标系中,原点O1定义在摄像机光轴与图像平面的交点,该点一般位于图像中心。但是由于制造原因,很多情况下会有偏移。若O1在U、V坐标系中坐标为(u0,v0),每一个像素在X轴与Y轴方向上的无力尺寸为dx、dy,则图像任一像素在两个坐标系下有如下关系:

wpsA135.tmp

【摄像机坐标系】

如图,Oc点为摄像机光心,Xc轴和Yc轴与图像的X轴与Y轴平行,Zc轴为摄像机光轴,它与图像平面垂直。光轴与图像平面的交点,即为图像坐标系的原点。由点Oc与Xc、Yc、Zc轴组成的直角坐标系称为摄像机坐标系,OOc为摄像机焦距:

wpsA136.tmp

由于摄像机可以安放在现实环境中任意位置,所以在环境中任选一个基准坐标系来描述摄像机位置,并用它描述环境中任何物体的位置,该坐标系为世界坐标系。它有Xw、Yw和Zw轴组成,摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵与平移向量t来描述。

wpsA147.tmp

总体来说,世界坐标系到图像坐标系的关系可总结如下:

wpsA157.tmp

摄像头成像几何关系,其中Oc点称为摄像头(透镜)的光心,Xc轴和Yc轴与图像的x轴和Y轴平行,Zc轴为摄像头的光轴,它与图像平面垂直。光轴与图像平面的交点O1,即为图像坐标系的原点。由点Oc与Xc、Yc、Zc轴组成的坐标系称为摄像头坐标系,Oc O1 的距离为摄像头焦距,用f表示。

图像坐标系是一个二维平面,又称为像平面,实际上就是摄像头的CCD传感器的表面。每个CCD传感器都有一定的尺寸,也有一定的分辨率,这个就确定了毫米与像素点之间的转换关系。举个例子,CCD的尺寸是8mm X 6mm,帧画面的分辨率设置为640X480,那么毫米与像素点之间的转换关系就是80pixel/mm。”设CCD传感器每个像素点的物理大小为dx*dy,相应地,就有dx=dy=1/80。

二. 针孔模型

wpsA158.tmp

又称为线性摄像机模型,任何空间点M在图像中的投影位置m,为光心Oc与M的连线OcM与图像平面的交点(各种相似三角形有木有,但是要注意像平面和现在讨论的其实是关于Oc对称的哦,所以计算的时候不要忘记了负号,不然出来的图像就是倒着的啦),这种关系也称为重心摄影或者透视投影。此时有比例关系如下:

wpsA178.tmp

将上面的世界坐标到摄像机坐标的转换代入,最后皆可以得到世界坐标系与摄像机坐标系之间的关系啦:

wpsA179.tmp

其中,很容易可以知道alph=f/dx,beta=f/dy,分别代表了以X轴与Y轴方向上的像素为单位表示的等效焦距。gamma在较高精度的相机模型中引入,表示图像平面中以像素为单位的坐标轴倾斜程度的量度,gamma=alpha*tan(theta),theta是相机CCD阵列v轴的偏斜角度。

由针孔模型我们可以知道,如果一直摄像机的内外参数,就知道投影矩阵M,这时候对任何空间点就可以求出其对应图像坐标,但是如果已知空间某点的像点m位置(u,v)即使已经知道摄像机内外参数,Xw也不能唯一确定,因为在投影过程中消去了Zc的信息。

在上面的式子中M是3x4不可逆矩阵,当已知M与(u,v)时,由公式得到的三个方程中消去z,只可以得关于Xw,Yw与Zw的两个线性方程,这个方程组即为射线OP的方程,也就是说,投影点为m的所有点均在该射线上,所以,该空间是不能唯一确定的。

三. 相机畸变

摄像头由于光学透镜的特性使得成像存在着径向畸变,可由三个参数k1,k2,k3确定;由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数p1,p2确定。单个摄像头的定标主要是计算出摄像头的内参(焦距f和成像原点cx,cy、五个畸变参数(一般只需要计算出k1,k2,p1,p2,对于鱼眼镜头等径向畸变特别大的才需要计算k3))以及外参(标定物的世界坐标)。OpenCV中使用的求解焦距和成像原点的算法是基于张正友的方法,而求解畸变参数是基于 Brown 的方法。

1.径向畸变

设(u、v)为理想的图像像素坐标,相对应的,wpsA17A.tmp 为真实获得的像素坐标。则(x,y)就为理想的图像物理坐标,wpsA17B.tmp 为实际获得的图像物理坐标,可以得到如下的关系式:

wpsA18C.tmp

我们知道,(u0,v0)在求摄像机内参的时候可以知道,wpsA18D.tmp 在圆心提取排序后也可以知道,(u,v)可以通过OpenCV中cvProjectpoints函数求得反投影残差。(x,y)可以通过wpsA18E.tmpwpsA19F.tmp求出,于是克得到如下公式:

wpsA1A0.tmp

设Dk=d,所以wpsA1A1.tmp可以求出畸变系数k1,k2.

在求得了径向畸变的系数以后,就可以如下得到成像仪某点理想的径向位置

wpsA1A2.tmp

其中,r就是当前点的所在透镜半径,k3只有在精度很高的时候才用得到(可以看到其实是将径向畸变做了一个泰勒展开并忽略高阶误差得到的)

2.切向畸变(由于透镜表面曲率不总是严格共线产生)

主要包括离心畸变和薄棱镜畸变,其中,离心畸变是由摄像机的镜头中各个透镜的光轴不能完全重合造成的。

离心畸变其数学模型可以表示为:

wpsA1A3.tmp

薄棱镜畸变是由镜头设计和制造缺陷等误差造成(比如镜头与摄像机像面之间有很小的倾角,其不仅会引起径向偏差,而且会引起切向误差)其数学模型为:

wpsA1A4.tmp

可以看到,薄棱镜畸变的结果就是之前内参矩阵求解时候的那个gamma啦wpsA1A5.tmp

综合考虑径向畸变和切向畸变,就需要对小孔成像模型进行修正,理想的图像点归一化坐标为p=(x,y)T,有畸变的图像点的归一化坐标为Pd=(xd,yd)T之间关系为:

wpsA1B5.tmp

特别说明:在opencv中求出了畸变系数和摄像机内参数以后,就可以用cvUndistort2( ImageC1, Show1, &intrinsic_matrix, &distortion_coeffs);来进行图像矫正了(建议使用Matlab工具箱来矫正,Opencv自己的函数误差不是一般大,而且对角点提取的精度要求超高(虽然用了亚像素级别),⊙﹏⊙b汗,之前自己按照书上来结果发现矫正以后图像扭曲的不行还以为自己的问题查错查了好久,结果直接标定传入参数进行矫正以后各种准确…….)。

附录:cvUndistort2的函数说明

wpsA1B6.tmp

wpsA1C7.tmp

本文转载自:

LMcallme
粉丝 9
博文 51
码字总数 16893
作品 0
泰安
私信 提问
加载中

评论(4)

huajun_zhang
huajun_zhang

引用来自“huajun_zhang”的评论

径向畸变那个方程组好像有点问题,和书上写的不同

引用来自“LMcallme”的评论

这是转的,要说镜像畸变,就是透镜造成的一种变形,opencv用线性近似实现了补偿,具体还是看 学习OpenCV 的书比较好,另外我是机械方向的不是图像方向的,sorry啦~~
同机械
LMcallme
LMcallme

引用来自“huajun_zhang”的评论

径向畸变那个方程组好像有点问题,和书上写的不同
这是转的,要说镜像畸变,就是透镜造成的一种变形,opencv用线性近似实现了补偿,具体还是看 学习OpenCV 的书比较好,另外我是机械方向的不是图像方向的,sorry啦~~
huajun_zhang
huajun_zhang
径向畸变那个方程组好像有点问题,和书上写的不同
huajun_zhang
huajun_zhang
写得很详细,就是最后一个图显示不了
MATLAB标定ZED双目摄像头

MATLAB标定ZED双目摄像头步骤 Matlab version:2017b Matlab标定双目摄像头三步走: 图像采集 单目相机标定 双目相机标定 图像采集 利用Matlab对棋盘格进行图像采集,图片数量在15~25之间。采...

caidaoqing
2018/05/17
0
0
视觉SLAM中相机大全

视觉SLAM中相机大全 Ronny 57分钟前暂无评论 阅读 23 次 视觉SLAM中,通常是指使用相机来解决定位和建图问题。 SLAM中使用的相机往往更加简单,不携带昂贵的镜头,以一定的速率拍摄周围的环境...

Ronny
2017/12/21
0
0
深度相机---(3)双目立体视觉

导读 为什么非得用双目相机才能得到深度? 双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理 理想双目相机成像模型 极线约束 图像矫正技术 基于滑动窗口的图像匹配 基于能量...

zhangbijun1230
2018/03/23
0
0
初识视觉SLAM:用相机解决定位和建图问题

引言:视觉SLAM 是指用相机解决定位和建图问题。本文以一个小机器人为例形象地介绍了视觉SLAM的功能及特点。 本文选自《视觉SLAM十四讲:从理论到实践》。   SLAM 是Simultaneous Localiza...

博文视点
2017/05/04
0
0
十、工业相机与SCARA机械臂的坐标系标定

注:感谢固高长江研究院徐工程师的技术讲解,以及matlab程序,机器人系统程序的提供。 在工业现场当中,相机拍摄到的图像有一个相机坐标系,而机器人自身也有一个机器人自身的坐标系,两者互...

qq_36552550
2018/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里...

阿里云云栖社区
27分钟前
2
0
Linux运维常见的硬件及系统问题

一、服务器常见故障和现象 1、有关服务器无法启动的主要原因 : ①市电或电源线故障(断电或接触不良) ②电源或电源模组故障 ③内存故障(一般伴有报警声) ④CPU故障(一般也会有报警声) ⑤主板故...

寰宇01
35分钟前
0
0
Confluence 6 针对 'unmigrated-wiki-markup' 宏重新尝试合并

在签名的章节中,我们主要是针对没有完全合并完成余下的为合并内容的异常处理。最常见的情况是内容以及被合并了,但是页面使用 wiki 标记的内容没有被合并,通常这些 wiki 标记的内容使用了 ...

honeymoose
45分钟前
2
0
ubuntu 18.04桌面版启动错误: Unable to mount root fs on unknown-block(0,0)

问题出现过程 *** 我的环境: visualbox 虚拟机 Ubuntu 18.04 桌面版 IP:192.168.1.186 (最初从 192.168.1.185 克隆过来的) 20190423 晚上准备安装一个 UNlet standalone 和 一个 Eclips...

wwzzhh166
46分钟前
1
0
fescar select for update 读隔离级别实现

/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in complian......

xiaomin0322
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部