鱼眼相机原理

小孔模型和鱼眼模型的比较

普通的小孔模型的示意图:

鱼眼相机原理_第1张图片

鱼眼模型的示意图:

鱼眼相机原理_第2张图片

对于小孔模型,在焦距一定的情况下感光片的面积直接决定了视场角。因为在小孔模型中,光都是直线传播的。

因为鱼眼相机中,光通过镜头后,光路发生转向。在焦距和感光片大小都一定的情况下,也可以得到不同的视场角。

鱼眼镜头的去畸变

去畸变是指用小孔模型来等效鱼眼模型。如果限定光线穿过镜头后不能转向。那么只有增大感光面的尺寸。并且有的鱼眼相机的视场角可以大于180度。所以不是所有鱼眼照片里的像素都能在等效的小孔模型照片中有对应。

鱼眼相机原理_第3张图片

下图是一张等效的小孔模型的照片,可以直观看出,如果要显示所有鱼眼照片的内容的话,这张图片的大小会是无限大。

鱼眼相机原理_第4张图片

用Cubemap来等效鱼眼模型

为了解决用一个平面不能容纳所有鱼眼相片的内容的问题,可以使用cubemap来解决这个问题。

我们知道图片上每一个像素对应一个入射光方向。对于小孔模型。所有入射光最终会交于一点。但是鱼眼模型,光线就不会交于一点了。所以也就没有焦距的概念了。但鱼眼模型中每个像素对应一个射线方向的道理还是成立的。

如果我们再确定一个平面,比如地面。这样就能求得每条光线和地面的一个交点。这个交点对应的颜色和这条射线对应的像素的颜色一样。

用这个方法把地面上每个点都在鱼眼照片中找到对应的颜色,就实现了把鱼眼照片投影到地面上的过程。但可以看出和地面平行的射线是没有交点的。

鱼眼相机原理_第5张图片

如果我们把射线投影到多个平面,比如一个立方体的不同面上面。就能把鱼眼相片上每个像素都在投影面上找到一个对应的点。

鱼眼相机原理_第6张图片

鱼眼相机原理_第7张图片

鱼眼相机原理_第8张图片

这相当于把一个鱼眼相机用环视相机来等效了。

鱼眼模型的参数

鱼眼模型的参数有多种形式:

  1. 一个函数,可以把鱼眼相片上每个像素和等效小孔模型照片上的像素对应起来。matlab和opencv原配的算法就用的这种模型。一般这个函数有4个参数。
  2. 一个函数,可以把鱼眼相片上每个像素和一个方向对应起来。ocam代码就使用的这种模型。函数有10个待定参数。
  3. 一个表格,把-90到+90之间离散的角度和不同的射线对应起来。为什么直接建立每个像素和射线的联系呢?因为对于鱼眼镜头厂家来说,并不知道使用的感光片的像素和尺寸。如果用角度来索引的话,就可以涵盖任意分辨率的感光片了。

你可能感兴趣的:(建图和定位)