700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 鱼眼相机模型和标定

鱼眼相机模型和标定

时间:2018-04-14 22:51:42

相关推荐

鱼眼相机模型和标定

Hello,欢迎来到我的博客~

今天的内容是鱼眼相机的建模方法和标定工具的使用

主要会介绍鱼眼相机和普通透视相机的联系,以及一种简单的鱼眼相机模型,和标定方法

1 鱼眼相机与普通透视相机的关系

普通透视相机是我们在日常生活最常用的相机,它的成像模型想必大家都很了解。而鱼眼相机拍摄的图像和普通相机拍摄的有着天壤之别,所以我们直观上很难想象它是如何成像的。但是这里有一种很简单的方法,就可以将一个普通相机改造成鱼眼相机:

没错,在普通相机前面加一个反射镜就可以等效成一个鱼眼相机了。

大家注意了,这也是给鱼眼相机建模的一个基本思想,就是把鱼眼相机等效为一面镜子和普通相机的组合!

另外,还需要注意的是,这里我们只是说明鱼眼相机是如何等效为普通相机的。一般的鱼眼相机的实际原理并不是这样的,而是通过一系列透镜来改变光路,实现了鱼眼的效果。

普通相机+镜子构成鱼眼相机的这种系统称为:catadioptric omnidirectional cameras

通过透镜构成鱼眼相机的系统称为:dioptric omnidirectional cameras

2 鱼眼相机的类型

上面说到可以把一面镜子和一个普通相机组合,形成一个鱼眼相机。根据这面镜子的不同,可以把鱼眼相机分为:中心式(central camera)和非中心式(non central camera)两类。

2.1 非中心式(Non central camera)

非中心式相机,也可以叫做non-single effective viewpoint camera,如下图所示:

上图中,黑色粗直线代表成像平面,黑色粗曲线代表反射镜。从图中可以看出来,这实际上就是从外部射向镜子的光线都不相交于同一点

2.2 中心式(Non central camera)

中心式相机,也可以叫做single effective viewpoint camera,如下图所示:

从图中可以看出来,这种相机实际上就是从外部射向镜子的光线都相交于同一点

对于这种相机来说,这个镜子可能的形状有,双曲面(hyperbolic), 抛物面(parabolic),椭圆面(elliptical)。

3 鱼眼相机模型

鱼眼相机模型的作用是建立二维图像坐标到三维矢量间的关系。此外,这一节介绍的相机模型是针对于中心式鱼眼相机系统的,但对于透镜构成的鱼眼还是反射镜构成的鱼眼是没有区分的。下面是一个相机模型的图示:

注意:

相机模型的中心建立在反射面的焦点处ppp所在的平面是成像平面,代表的是图像二维坐标PPP对应了粗的黑色矢量,是一个三维矢量,代表特征点对应的三维方向画面最下方是一个普通相机

3.1 模型假设

实际系统存在很多误差,为了模型的实用性,因此做了如下假设,选择性的忽略了一部分误差:

假设镜面沿着镜面轴是完美对称的,无论旋转多少度,都不会对光路产生变化假设不考虑相机的透镜畸变,因为这部分畸变实际上可以考虑到反射镜对应的投影函数里

3.2 相机模型-1

在这个相机模型中,我们在上边的基础上,额外加入一条假设,即:

假设相机轴和反射镜的中轴完全完全对齐

于是,假设p=(u,v)p=(u,v)p=(u,v)代表了特征点对应的图像坐标,P=(x,y,z)P=(x,y,z)P=(x,y,z)代表了从相机坐标系原点出发,指向特征点的三维矢量。

由于,相机轴和镜面轴完美对齐,所以:

[xy]=α[uv],α>0\left[\begin{matrix}x\\y\end{matrix}\right]= \alpha\left[\begin{matrix}u\\v\end{matrix}\right],\alpha>0 [xy​]=α[uv​],α>0

其中,α\alphaα相当于一个缩放因子,它并不影响矢量的方向。

然后,根据xxx和yyy,还有曲面的形状,可以计算z=h(x,y)=h(αu,αv)=αf(u,v)z=h(x,y)=h(\alpha u,\alpha v)=\alpha f(u,v)z=h(x,y)=h(αu,αv)=αf(u,v)。注意,这里fff和hhh都代表的是曲面的形状函数,它的形式是自己定义,我们可以随意的把α\alphaα提出来。

所以,最后的PPP矢量可以等效为:

P=[xyz]=α[uvf(u,v)]P=\left[\begin{matrix}x\\y\\z\end{matrix}\right]= \alpha\left[\begin{matrix}u\\v\\f(u,v)\end{matrix}\right] P=⎣⎡​xyz​⎦⎤​=α⎣⎡​uvf(u,v)​⎦⎤​

由于PPP是一个方向矢量,所以,α\alphaα没有任何影响,所以:

P=[xyz]=[uvf(u,v)]P=\left[\begin{matrix}x\\y\\z\end{matrix}\right]=\left[\begin{matrix}u\\v\\f(u,v)\end{matrix}\right] P=⎣⎡​xyz​⎦⎤​=⎣⎡​uvf(u,v)​⎦⎤​

这里,我们给出fff的形式:

f(ρ)=a0+a1ρ+a2ρ2+a3ρ3+a4ρ4+...f(\rho)=a_0+a_1\rho+a_2\rho^2+a_3\rho^3+a_4\rho^4+... f(ρ)=a0​+a1​ρ+a2​ρ2+a3​ρ3+a4​ρ4+...

其中,ρ=u2+v2\rho=\sqrt{u^2+v^2}ρ=u2+v2​。

这里a1∼ana_1\sim a_na1​∼an​就是鱼眼镜头的参数,也是要标定的系数。

一般来说,这个多项式的阶数是4阶时,效果是最优的。

3.3 相机模型-2

在这个模型中,我们不再假设相机轴和反射镜的中轴完全完全对齐。此外,我们还考虑了像素点发生线性变形(仿射变换)带来的误差。因此,我们将原始的像素坐标投影到一个新的平面:

[u′v′]=[cde1][uv]+[ucvc]\left[\begin{matrix}u'\\v'\end{matrix}\right]=\left[\begin{matrix}c & d\\e & 1\end{matrix}\right]\left[\begin{matrix}u\\v\end{matrix}\right]+\left[\begin{matrix}u_c\\v_c\end{matrix}\right] [u′v′​]=[ce​d1​][uv​]+[uc​vc​​]

其中,ucu_cuc​和vcv_cvc​是反射镜轴和相机轴的偏移,c,d,ec,d,ec,d,e参数代表了像素线性形变。u′u'u′和v′v'v′就是修正过后的像素坐标。

之后,再根据修正后的像素坐标和相机模型-1,仍然可以恢复特征点的三维矢量。

4 鱼眼相机标定

本文所提鱼眼相机模型有对应的开源工具:OCamCalib

它有一个Matlab的工具箱,大家下载解压以后,进入该文件夹,用Matlab运行ocam_calib就可以打开该工具了,它的界面是这样的:

具体的标定步骤:

采集包含棋盘格标定板的图片(6~10张),尽可能覆盖相机的所有视野范围,尽可能靠近相机一点,保证棋盘格所有角点清晰可见。最后,照片存入该工具箱的文件夹下,并且名字命名为:[image name][image num].[image type]。例如:fisheye0.jpg, fisheye1.jpg, fisheye2.jpg,…打开ocam_calib工具箱点击Read names按钮。会要求你输入图片名,例如:fisheye。还会要求你输入图片格式,例如:jpg。点击Extract grid corners按钮。会要求你输入你想处理的图片编号,会让你输入棋盘格的数量,棋盘格的宽度,还有图像中心(这个参数可以不用设置,直接回车,后面会自动计算)。最后,还会让你选择自动提取角点还是手动提取,一般就直接回车,选择自动提取。点击Calibration按钮。会要求你输入模型阶数,一般直接回车,就选择默认的4阶模型,也可以自己输入。等待一段时间后,可以得到标定的结果,也就是f(ρ)f(\rho)f(ρ)函数的曲线和参数。点击Find center按钮。这一步是要找到图像的中心,点击完之后,需要计算很长一段时间,大家耐心等待就好。点击Calibration Refinement按钮。这一步是进一步优化标定结果,这一步会问你最大的迭代步数,直接回车就好。这一步需要等待的时间也比较长。标定已经完成了,通过calib_data.ocam_model数据就可以查看模型参数了。另外,Reproject on images,Show Extrinsic,Analyse error等按钮也可以用来直观的显示标定结果的好坏。

参数说明

ocam_model:储存相机参数的结构体

ocam_model.ss:f(ρ)f(\rho)f(ρ)的系数

ocam_model.xc,ocam_model.yc:图像中心

ocam_model.c,ocam_model.d,ocam_model.e:仿射变换参数

ocam_model.width,ocam_model.height:图像尺寸

5 参考文献

[1] OCamCalib

[2] Scaramuzza, D., Martinelli, A. and Siegwart, R., (). “A Flexible Technique for Accurate Omnidirectional Camera Calibration and Structure from Motion”, Proceedings of IEEE International Conference of Vision Systems (ICVS’06), New York, January 5-7, .

[3] Scaramuzza, D., Martinelli, A. and Siegwart, R., (). “A Toolbox for Easy Calibrating Omnidirectional Cameras”, Proceedings to IEEE International Conference on Intelligent Robots and Systems (IROS ), Beijing China, October 7-15, .

[4] Scaramuzza, D. (). Omnidirectional Vision: from Calibration to Robot Motion Estimation, ETH Zurich, PhD Thesis no. 17635. PhD Thesis advisor: Prof. Roland Siegwart. Committee members: Prof. Patrick Rives (INRIA Sophia Antipolis), Prof. Luc Van Gool (ETH Zurich). Chair: Prof. Lino Guzzella (ETH Zurich), Zurich, February 22, .

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。