鱼眼相机成像模型

一、鱼眼镜头模型

  鱼眼镜头一般是由十几个不同的透镜组合而成的,在成像的过程中,入射光线经过不同程度的折射,投影到尺寸有限的成像平面上,使得鱼眼镜头与普通镜头相比起来拥有了更大的视野范围。下图表示出了鱼眼相机的一般组成结构。最前面的两个镜头发生折射,使入射角减小,其余的镜头相当于一个成像镜头,这种多元件的构造结构使对鱼眼相机的折射关系的分析变得相当复杂。
这里写图片描述
  研究表明鱼眼相机成像时遵循的模型可以近似为单位球面投影模型。可以将鱼眼相机的成像过程分解成两步:第一步,三维空间点线性地投影到一个球面上,它是一个虚拟的单位球面,它的球心与相机坐标系的原点重合;第二步,单位球面上的点投影到图像平面上,这个过程是非线性的。下图表示出了鱼眼相机的成像过程。


这里写图片描述

  我们知道,普通相机成像遵循的是针孔相机模型,在成像过程中实际场景中的直线仍被投影为图像平面上的直线。但是鱼眼相机如果按照针孔相机模型成像的话,投影图像会变得非常大,当相机视场角达到180°时,图像甚至会变为无穷大。所以,鱼眼相机的投影模型为了将尽可能大的场景投影到有限的图像平面内,允许了相机畸变的存在。并且由于鱼眼相机的径向畸变非常严重,所以鱼眼相机主要的是考虑径向畸变,而忽略其余类型的畸变。

二、投影函数

  为了将尽可能大的场景投影到有限的图像平面内,鱼眼相机会按照一定的投影函数来设计。根据投影函数的不同,鱼眼相机的设计模型大致能被分为四种:等距投影模型、等立体角投影模型、正交投影模型和体视投影模型。下面的四种鱼眼相机的投影模型反映出了空间中的一点P是如何投影到球面上,然后到图像平面上成像的。

1、等距投影模型


这里写图片描述

rd=fθ

上述式子中,rd表示鱼眼图像中的点到畸变中心的距离,是鱼眼相机的焦距,是入射光线与鱼眼相机光轴之间的夹角,即入射角。

2、等立体角投影模型


这里写图片描述

rd=2fsin(θ2)

3、正交投影模型


这里写图片描述

rd=fsin(θ)

4、体视投影模型


这里写图片描述

rd=2ftan(θ2)

三、OpenCV中的鱼眼相机模型

  OpenCV中使用的模型是由Kannala提出的一种鱼眼相机的一般近似模型。在等距投影模型的基础上提出来的。下面来详细分析其鱼眼相机模型的提出过程。我们可以将鱼眼相机模型的形式统一以等距投影模型的形式来表示,即

rd=fθd

对实际的鱼眼镜头来说,它们不可能精确地按照投影模型来设计,所以为了方便鱼眼相机的标定,Kannala提出了一种鱼眼相机的一般多项式近似模型。通过前面的四个模型,可以发现 θd 是θ的奇函数,而且将这些式子按泰勒级数展开,发现 θd 可以用θ 的奇次多项式表示,即
θd=k0θ+k1θ3+k2θ5+k3θ7+

为了实际计算的方便,需要确定式中 θd 取到的次幂数。Kannala提出取式的前五项即取到的九次方,就给出了足够的自由度来很好地近似各种投影模型。 θd 的一次项系数可以为1,于是OpenCV中使用的鱼眼相机模型为:
θd=k0θ+k1θ3+k2θ5+k3θ7+k4θ9

  上式表示的模型是根据四种鱼眼相机投影模型得出的一种通用鱼眼相机多项式模型。这种模型根据θ能够得到 θd ,即通过无畸变图像中的点能够计算出鱼眼图像中的畸变点。这种模型在OpenCV的鱼眼相机标定方法中是适用的,因为OpenCV借助标定板对鱼眼相机进行标定。从空间点到鱼眼图像上的点的变换过程可用式子表示为:
XcYcZc=RX+t

xc=XcZc, yc=YcZcr2=x2c+y2cθ=arctan(r)θd=k0θ+k1θ3+k2θ5+k3θ7+k4θ9xd=θdrxc, yd=θdrycu=fxxd+cx, v=fyyd+cy

上面式子中, X 表示空间点, Xc 表示相机坐标系下对应的空间点, R t 分别是两个坐标系之间的旋转矩阵和平移向量, (u,v)T 表示投影到鱼眼图像上的对应点。OpenCV中对鱼眼相机的标定步骤能够分成四步:(1)初始化内参数;(2)初始化外参数;(3)使用LM算法最小化定位的图像点和投影的图像点之间的投影误差;(4)确定结果。

转自http://blog.youkuaiyun.com/u010128736/article/details/52864024


### 鱼眼相机成像原理 鱼眼相机是一种特殊类型的广角镜头,其设计目的是捕捉尽可能大的视场范围。这种相机通常具有超过180°的视角[^3]。鱼眼相机成像模型不同于普通的针孔相机模型。普通相机假设光线沿直线传播并遵循透视变换原则,而鱼眼相机则采用一种弯曲的光学路径来实现超宽视野的效果[^4]。 具体而言,鱼眼相机成像过程可以用径向畸变模型描述。在这种模型中,物体到图像平面的距离与其真实距离不成线性关系,而是呈现某种非线性的映射函数。常见的映射方式包括等距投影、立体投影和正弦投影等[^1]。 --- ### 图像畸变的原因 由于鱼眼相机采用了特殊的光学结构,它不可避免地引入了大量的径向畸变。这些畸变使得原本平直的线条在成像后变得弯曲,从而影响了图像的质量以及后续的应用效果。例如,在测量、导航或其他需要精确几何信息的任务中,未经校正的鱼眼图像可能无法提供可靠的数据支持[^2]。 --- ### 校正方法概述 针对鱼眼图像中的畸变问题,研究者提出了多种校正算法。其中较为典型的有: #### 基于参数化的校正方法 这类方法依赖于已知的相机内部参数(如焦距、主点位置)和外部参数(如旋转矩阵和平移矢量),并通过建立数学模型来反算原始无畸变的像素坐标。常用的模型包括布朗-康普顿模型和多项式拟合模型。 #### 经纬度映射法 此方法的核心思想是将球面坐标系下的数据重新投射至二维平面。通过对每一点计算对应的经度和纬度值,并利用插值技术填充目标区域内的空白部分,最终得到接近真实的校正结果。 #### 圆分割策略 这是一种创新的技术路线,特别适合处理圆形边界明显的鱼眼光学系统。基本流程涉及先检测输入图片上的最大外接圆轮廓,再以此为基础划分若干子区段分别实施局部调整操作直到整体趋于平坦为止。 ```matlab % MATLAB伪代码示例:简单版鱼眼畸变校正 function correctedImage = correctFisheyeDistortion(inputImage, intrinsicParams) % 输入变量说明: % inputImage - 待校正的鱼眼图像 % intrinsicParams - 内参矩阵 % 初始化输出容器 [height, width] = size(inputImage); correctedImage = zeros(height, width); % 迭代遍历每一个像素点 for v = 1:height for u = 1:width % 计算理想化后的归一化坐标 (x', y') distortedCoord = computeUndistortedCoordinates(u, v, intrinsicParams); % 插值得到对应灰度级数值 correctedPixelValue = bilinearInterpolation(distortedCoord, inputImage); % 存储回目标数组指定索引处 correctedImage(v,u) = correctedPixelValue; end end end ``` 上述MATLAB脚本片段展示了如何通过编程手段完成一次基础级别的去畸变转换工作流的一部分逻辑框架构建思路。 --- ### 应用领域 鱼眼相机因其独特的性能特点广泛应用于多个行业和技术方向上,比如全景摄影、无人机监控、自动驾驶辅助感知模块等领域均可见其身影活跃其间。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值