九、鱼眼相机模型

1. 传统相机模型及缺陷

传统相机模型主要是基于小孔模型,物空间到像空间近似呈现相似三角关系。但是传统相机存在一些缺陷:

  • 光始终沿着直线传播,难以捕捉到边沿物体;
  • 同样长度的红色箭头,边沿的经过镜头成像后会变得越长,但是sensor的像面尺寸是有限的,接近边沿的物体就无法成像了。

因此小孔模型就无法适用于大广角或鱼眼相机了。因此鱼眼相机需要有专门的鱼眼相机模型。

2. 鱼眼相机模型

可以用下图所示的单位球面投影模型来近似鱼眼相机的成像过程。

  • 三维世界中的空间点线性投影到球面上,虚拟的球面球心和相机坐标系的远点重合
  • 单位球面上的点投影到图像平面上,这是一个非线性的过程
  • 这里就包含了不同的非线性投影模型

3.四种鱼眼相机的投影(畸变)模型

3.1 等距投影模型

  • 成像点的位置和入射角成正比,即r_{d}=f\Theta
  • 成像为随着入射角不断变化的同心圆
  • 最大视场角可达360°

3.2 等角投影模型

  • r_{d}=2fsin(\Theta /2))
  • 图像不失真
  • 映射关系比较复杂

3.3 正交投影模型

  • r_{d}=fsin(\Theta )
  • 从0度到90度等差的视场角成像越来越密
  • 180度以内的场景都可以模拟

3.4 体视投影模型

  • r_{d}=2ftan(\Theta /2)
  • 图像不失真
  • 映射关系比较复杂

 3.5 四种投影模型的对比

四种投影模型畸变程度由大到小:

正交投影>等角投影>等距投影>体视投影

 等距投影模型便于计算,被各大工程广泛应用。

 4.  鱼眼相机的KB(Kannala-Brandt)模型

基于上述四种模型,我们可以统一用如下模型表示:

r_{d}= f\Theta _{d}

上面讲的四种模型可以看出,\Theta _{d}\Theta的奇函数,如果将其按照泰勒级数展开:

\Theta _{d}=k_{0}\Theta+k_{1}\Theta^3+k_{2}\Theta^5+k_{3}\Theta^7+......

一般取前5项,即到9次方

\Theta _{d}=k_{0}\Theta+k_{1}\Theta^3+k_{2}\Theta^5+k_{3}\Theta^7+k_{4}\Theta^9

这就是所谓的KB模型,也是opencv鱼眼标定中用的到模型。

根据该模型的成像过程如下:

首先定义:

X: 空间中的三维坐标点

Xc,Yc,Zc 相机坐标系下的空间点

R,t :旋转平移矩阵

xc,yc:图像坐标系的坐标

u,v:像素坐标系坐标

step1: 世界坐标系到相机坐标系的转换

 \begin{bmatrix} X_{c}\\ Y_{c} \\ Z_{c} \end{bmatrix} = RX+t

step2: 相机坐标系到球面图像坐标系

x_{c}=\frac{X_{c}}{Z_{c}}

y_{c}=\frac{Y_{c}}{Z_{c}}

step3: 计算\Theta

 \left\{\begin{matrix} r= \sqrt{x_{c}^2+y_{c}^2}\\ \Theta =atan2(r/\left | z_{c} \right |)=atan2(r/1)=atan(r) \end{matrix}\right.

 step4: KB畸变模型进行畸变处理

 \Theta _{d}=k_{0}\Theta+k_{1}\Theta^3+k_{2}\Theta^5+k_{3}\Theta^7+k_{4}\Theta^9

 step5:计算点在像素坐标系中的坐标

 x_{d}=\frac{\Theta _{d}}{ r_{c}}x_{c} ,y_{d}=\frac{\Theta _{d}}{ r_{c}}y_{c}

u = f_{x}x_{d}+c_{x}, v = f_{y}y_{d}+c_{y}

猜你喜欢

转载自blog.csdn.net/csucmee502/article/details/130248034