相机相关:相机模型与畸变模型

1. 写在前面

最近在研究相机模型、标定参数相关的内容,因此针对多种相机模型和畸变模型,以及相机坐标系、世界坐标系等等做了一个系统的归纳总结。网上已经有蛮多相关的介绍,这里是基于一个小白的视角进行的归纳梳理,一来是可以帮助自己以后回顾,二来是希望通过自己的笔记能有机会帮助其他小伙伴~,与网络学习搭子们相互成长与进步(如有问题欢迎评论留言😀)

1.1. 面镜(mirror)与透镜(lens)

面镜用的是镜面反射;

透镜用的是镜面折射

广角相机为了获得更大得FOV(Fields of View),有3中镜头聚光方式:

(1)Dioptric(折射光学的) camera:通过透镜来实现,主要是折射;仅通过折射,比如鱼眼镜头

(2)Catadioptric(反射折射的) camera:使用一个标准相机和一个面镜 shaped mirror --- such as a parabolic, hyperbolic, or elliptical mirror,后面介绍的mirror都是如此,其在水平面可以提供360度视野,仰角方向大于100度;

(3)Poly-dioptric camera:通过组合多个相机来重叠相机视野

1.2. 缩略语

|------------------|-----------------------------------------------------------------------|
| Term | Description |
| COD | 畸变中心(Center of Distortion) - 在传感器上的 ( x , y )表示拟合的最佳对称中心 (unit:pixel) |
| DM | 畸变模型(Distortion Model) |
| EFL | 有效焦距(Effective Focal Length) |
| Pinhole Model FL | 针孔模型焦距(Pinhole Model Focal Length)-图像去畸变后的模型焦距(unit:pixel) |
| FOV | 视野(Field of View) |
| PP | 主点(Principle Point) - 透镜光轴与传感器表面的交点 |
| LPP | 透镜主平面(Lens Primary Plane |

2. 相机模型

相机将三维世界中的坐标点(单位:米)映射到二维平面(单位:像素)的过程可以用一个几何模型来描述,这个几何模型即相机模型。

3. Pinhole针孔相机模型/透视相机

最简单有效的是针孔相机模型(pinhole camera model),这是最基本且最常用的相机模型,提供了一个简单的方法来描述相机如何将三维世界转化为二维图像。

该模型假定光线通过相机的一个小孔穿过并投影到影像平面(这个平面就是感光元件,如CCD或CMOS)上。

该模型基于几何光学理论,忽视了透镜的畸变效应。针孔相机模型是理想状态下的相机模型,一个重要参数是:焦距,决定了相机的视场角。

大多数商用相机都可以描述为针孔相机,通过透视投影进行建模。

两个三角形(OBP'和OAP相似)的 等比关系!

3.1.1. 相机坐标系:

选取O点作为坐标系的原点,以光轴作为Z轴,X,Y轴与成像平面平行,构建一个坐标系

3.1.2. 世界坐标系----->像素坐标系

3.1.3. 世界坐标系到相机坐标系

R,t\]为相机外参矩阵 #### 3.1.4. 相机坐标系到像素坐标系 根据三角形相似关系: ![](https://file.jishuzhan.net/article/1760546033504358402/dadb36af133d05fe8ab78725d120dee2.webp) 整理得到: ![](https://file.jishuzhan.net/article/1760546033504358402/419d251a859c6f970f91bcb07a9a13cc.webp) ![](https://file.jishuzhan.net/article/1760546033504358402/adfc6a96e809eacabc12cd69c4cd2433.webp) ## 4. Fisheye鱼眼相机模型 同义词: Fisheye/omni-directional/spherical/panoramic/catadioptric/wide-angle 包括常用的3种模型:Kannala-brandt, Mei和Scaramuzza/OCam ### 4.1. 多项式投影模型/Kannala-Brandt模型/KB 这是一种非参数模型,**使用多项式系数来描述径向畸变**。 优点:能够适应各种不同类型的鱼眼镜头,但需要较多的参数来获得精确的矫正。 介绍:仍遵照小孔成像过程来建模图像生成过程。区别在于,光线不再是直线传播,而是经过透镜后有一定的折射,根据不同镜头类型,该折射模型可以建模为不同的函数,如下: | 投影模型 | 函数 | |----------------------------------|---------------------------------------------------------------------------------------------------| | perspective projection透视投影 | ![](https://file.jishuzhan.net/article/1760546033504358402/e010223e0a08beb8599827e18476d8d5.webp) | | stereographic projection立体投影 | ![](https://file.jishuzhan.net/article/1760546033504358402/293edd39c25d719c011677ffd43b66a4.webp) | | equidistance projection等距投影 | ![](https://file.jishuzhan.net/article/1760546033504358402/c4e586e02c463518f4e9f4e105d634d9.webp) | | equisolid angle projection等立体角投影 | ![](https://file.jishuzhan.net/article/1760546033504358402/5a922e8601011a447a928d38ab535c89.webp) | | orthogonal projection正交投影 | ![](https://file.jishuzhan.net/article/1760546033504358402/90329746a263f168f72396da6a634d4e.webp) | 其中r为像点距离相片中心的距离,θ 为入射光线与主光轴的夹角, f为镜头焦距。 为了方便鱼眼相机的标定,Kannala 提出了一种鱼眼相机的一般多项式近似模型。r是θ的奇函数,将上述几种投影模型的函数经过泰勒展开后具有相似的结构,发现径向畸变**r可以用极角θ的奇次多项式**表示,即: ![](https://file.jishuzhan.net/article/1760546033504358402/6f870d04d67ad0f6435a9f6822c1055b.webp) 在计算时,Kannala 提出**取式的前五项**即取到的九次方,r的一次项系数可以为1。 通过θ可以得到r,即通过无畸变图像中的点能够计算出鱼眼图像中的畸变点。 **总结,KB模型的公式可以表示为:** ![](https://file.jishuzhan.net/article/1760546033504358402/96b888b0ee31a7e9ce3239ff42ffb7b9.webp) 其中 rd是畸变后半径, θ是畸变前半径,而 k1,k2,k3,...是径向畸变系数。 #### 4.1.1. KB模型的去畸变流程 去畸变的步骤大致如下: 1. 获取相机的标定参数,包括内参和径向畸变的系数 k1,k2,k3,... 2. 对于图像中的每个像素,计算其在无畸变图像中的位置,并将像素值复制过去。 ### 4.2. Scaramuzza模型/Ocam模型 OCam模型是由Jean-Yves Bouguet和Scaramuzza提出的一种用于鱼眼镜头和广角镜头的畸变矫正模型。 OCam模型使用一种称为**多项式投影模型** 的方法,**用多项式系数来描述鱼眼相机的畸变**。可以处理高度畸变的镜头,如鱼眼镜头。 OCam模型的主要优点是其精度和范围:它可以处理180度以上的视场,并且在实践中被证明是非常准确的。 #### 4.2.1. Ocam模型 模型基于以下假设: * 面镜相机系统是 central 系统,因此,在面镜上存在一个点,每条反射光线都在这个点上相交。这个点被认为是摄像机坐标系 XYZ 的轴原点。 * 假设相机和面镜的轴被很好的对齐,也就是说,只有很小的旋转偏差被考虑到模型中。(不考虑切向畸变的意思?) * 面镜相对于它的轴是旋转对称的。 * 模型中没有考虑相机的透镜畸变,因为广角相机使用的面镜通常需要大的焦距在面镜上聚焦图像。因此,透镜的失真可以被忽略。如果你使用鱼眼镜头,相机镜头畸变已经被集成在了投影函数f 里面 假设以上假设完全符合,即相机和面镜轴完全对齐。 条件假设: 设p 为图像的像素点,(u,v)是它相对于全向图像中心的像素坐标。设P是它对应的从单有效视点发出的三维向量,(x,y,z)是它相对于坐标轴原点的坐标。 因为相机和面镜轴假设完美对齐,所以x,y分别与u,v成比例: ![](https://file.jishuzhan.net/article/1760546033504358402/63efcaa0d75bd238fe019a8bcf4bbdba.webp) 将图像点p映射到其对应的3D向量P的函数。 ![](https://file.jishuzhan.net/article/1760546033504358402/b49881273a649919bb01eded86f261da.webp) 将α包含进函数f,等价写成: ![](https://file.jishuzhan.net/article/1760546033504358402/3292b8aff6e394150a1ee234b18763db.webp) 且面镜是旋转对称,函数f(u,v)只取决于点到图像中心的距离**ρ=√ u2+v2**。因此可简化: ![](https://file.jishuzhan.net/article/1760546033504358402/b0c070ac45ea811ef8039f4ca33affb2.webp) 函数 f ( ρ ) 形式是多项式: ![](https://file.jishuzhan.net/article/1760546033504358402/17e1c96d3d5cce004fa572d09ca09fb8.webp) 需要估计的参数:a1,a2,a3,... 其中a1=0。 World2cam时,θ=arctan(( x2+y2)/ z2),求出入射光的夹角,通过夹角求出在成像平面上,点到图像中心的距离(之前cam2world的反向).即: ![](https://file.jishuzhan.net/article/1760546033504358402/534fcf4e157de464bfb44c940f11734f.webp) (ρ为畸变后的极径,θ表示无畸变图像中的极径,a_0,a_1,...为多项式的系数,该公式描述了每个像素点从无畸变图像到畸变图像的映射关系) 反向求得在成像平面上的位置: ![](https://file.jishuzhan.net/article/1760546033504358402/1d232c86fb6edf43aa3748c151f0470c.webp) 在之前假设(相机和面镜轴完美对齐)中,实际上仍会存在小误差。对 对准误差 进行建模,并通过仿射变换对artefact进行数字化。 ![](https://file.jishuzhan.net/article/1760546033504358402/e2a6b3b0504eba708ecce9abf2fe45d6.webp) **上面式子将真实扭曲的坐标(u',v')与理想的未失真的坐标(u,v)联系起来。** **总结,Ocam模型的公式可以表示为:** ![](https://file.jishuzhan.net/article/1760546033504358402/9a0c7380157aa9b8d0212cda54fd0b27.webp) **(ρ为畸变后的极径,θ表示无畸变图像中的极径,a_0,a_1,...为多项式的系数,该公式描述了每个像素点从无畸变图像到畸变图像的映射关系)** #### 4.2.2. Ocam模型的去畸变流程 去畸变的步骤大致如下: 1. 获取相机的标定参数(包括内参和多项式系数)。 2. 根据多项式系数,为每个像素点建立从图像坐标到单有效视点的射线映射。 3. 使用这个映射去除图像的畸变。 #### 4.2.3. Unified Omnidirectional Camera Model和Central Omnidirectional Camera Model "Unified Omnidirectional Camera Model"和"Central Omnidirectional Camera Model"都是全向相机模型,用于描述全向相机的成像过程。这两个模型的主要区别在于它们的建模方式和适用范围。 (1)Unified Omnidirectional Camera Model是一种通用的全向相机模型,可以描述包括中心全向相机在内的各种类型的全向相机的成像过程。 这个模型提出了一个统一的框架,可以处理各种镜头畸变,包括径向和切向畸变。它的主要优点是模型简单,但可能无法精确描述某些特定类型的全向相机的成像特性。 (2)Central Omnidirectional Camera Model特指那些有单个投影中心的全向相机,这些相机通常使用特殊的镜头(如鱼眼镜头)来获得360度的视场。 这个模型的主要优点是对于这类相机,它可以提供更精确的描述。然而,它可能不适用于那些没有明确投影中心的全向相机,例如使用镜头阵列的全向相机。 ### 4.3. KB模型和Ocam模型对比 * KB模型主要用于普通相机,可以处理鱼眼和非鱼眼镜头,而Ocam模型更专门用于鱼眼相机。 * KB模型包括径向和切向畸变,而Ocam模型只包括径向畸变。 * Ocam模型的公式中使用了极坐标系,更适用于描述鱼眼相机的畸变特性。 ### 4.4. 更多解释: **(1)什么是全向图像?**指通过全向相机获取的图像。全向相机是一种可以获取360度视场的相机,能够捕捉所有方向的景象,而不仅仅是相机面向的那个方向。 在全向图像中,(u,v)常指某个像素想对于图像中心的坐标。图像中心指全向图像的投影中心,即所有光线在投影到图像平面上时相交的点,理想情况下这个点应该位于图像的几何中心。 示例: (u,v)=(100,200)表示从全向图像的中心点开始,水平向右100和垂直向下的像素200距离. **(2)坐标轴原点和全向图像中心?** (x, y, z)是像素点p对应的三维向量P相对于坐标轴原点的坐标。这个坐标轴原点通常被设定为**单有效视点**,也就是说,三维空间中的点P就是从原点出发、沿着向量P的方向、距离原点1个单位长度的点。 (u, v)则是像素点p相对于全向图像中心的像素坐标。这个全向图像中心是图像平面上的一个点,它表示的是全向相机的投影中心。在理想情况下,所有的光线都会在这个点上交汇,并在这个点附近形成图像。 在Ocam模型中,图像的像素点p对应的从但有效视点发出的三维向量P通常会被归一化,即长度会被设为1,这样P的坐标(x,y,z)描述了从单有效视点到像素点p的方向。z常设为正值,表示向量P的方向是从单有效视点朝向场景的。 (**场景是什么?**指的是相机所拍摄的三维环境。它可以包括物体、建筑物、人物等等,总的来说,就是相机所能"看到"的所有内容。) **在OCam模型中,由于全向相机被假定为单有效视点模型,因此坐标轴原点和全向图像中心在物理上通常是同一个点,即相机的镜头中心**。 **(3)对准误差是什么?**"对准误差"通常指的是设备或系统中的两个或多个部分之间的相对位置或方向的误差。 **(4)artefact是什么?**在影像处理中通常指的是图像中的非真实的或误导性的特征或对象。这些特征并非来自于被摄物体本身,而是由于影像获取或处理过程中的一些因素产生的。比如,图像压缩过程中可能会出现的方块效应(blocky effect),或者由于摄像头畸变、噪声等产生的异常像素点,都可以被称为"artefact"。 **(5)什么是射影几何?** 这种投影可以是正交投影(如我们在平面上画出的几何图形),也可以是透视投影(如摄影中的透视效果)。 在射影几何中,点、直线和平面都可以被表示为射影空间中的元素,并且它们之间的交叉、并行和垂直等关系可以被重新定义为射影关系。 ### 4.5. Mei模型 Mei模型是一种全向相机模型,由Mei和Rives在2007年提出。它是基于多项式模型的,但引入了额外的参数来更准确地描述镜头的畸变。Mei模型假设相机有一个明确的投影中心,并且适用于具有广角镜头的相机。这种模型的优点是它可以更准确地描述镜头畸变,尤其是在图像的边缘部分。但是,与其他模型一样,它需要一个标定过程来确定模型的参数。 ## 5. 畸变模型 ### 5.1. 径向畸变 #### 5.1.1. 形成原因: 径向畸变是由于镜头形状引起的畸变,使得图像中的直线在投影到图像平面时呈现出曲线。 径向畸变通常表现为图像中心的物体被放大(称为桶形畸变),或者图像边缘的物体被放大(称为枕形畸变)。 ![](https://file.jishuzhan.net/article/1760546033504358402/6c2edaa45d48e47f2e71d6c6f0c146ef.webp) 径向畸变可以通过多项式模型来修正,其中最常用的模型是以下形式的二次或四次多项式: ![](https://file.jishuzhan.net/article/1760546033504358402/046784574115beb25a8787c406c40eca.webp) 这里,r_u是未经畸变矫正的像素到图像中心的距离,r_d是经过畸变矫正后的距离,k1和k2是畸变系数。 ### 5.2. 切向畸变 #### 5.2.1. 形成原因: 切向畸变是由于镜头和图像传感器之间的不平行(即镜头未与图像平面完全对齐)导致的。这种畸变使得图像看起来像是被拉伸或挤压。切向畸变可以通过以下形式的模型来修正: ![](https://file.jishuzhan.net/article/1760546033504358402/618b5b1f5bfc760be593431a67fcce9e.webp) 这里,(x_u, y_u)是未经畸变矫正的像素坐标,(x_d, y_d)是经过畸变矫正后的坐标,p1和p2是切向畸变系数。 (小白记录:对于相关公式有部分是取自网络,大概了解即可)

相关推荐
喵~来学编程啦42 分钟前
【深度学习的灵魂】图片布局生成模型LayoutPrompt(2)·布局序列化模块
人工智能·深度学习
大模型铲屎官2 小时前
【深度学习-Day 2】图解线性代数:从标量到张量,理解深度学习的数据表示与运算
人工智能·pytorch·python·深度学习·线性代数·机器学习·llm
蹦蹦跳跳真可爱5892 小时前
Python----卷积神经网络(LeNet-5的手写体识别)
人工智能·python·深度学习·神经网络·cnn
Francek Chen3 小时前
【现代深度学习技术】现代循环神经网络04:双向循环神经网络
人工智能·pytorch·rnn·深度学习·神经网络
搏博8 小时前
机器学习之五:基于解释的学习
人工智能·深度学习·学习·算法·机器学习
L107320348215 小时前
深度学习笔记40_中文文本分类-Pytorch实现
笔记·深度学习·分类
闭月之泪舞16 小时前
深度学习-神经网络参数优化的约束与迭代策略
人工智能·深度学习·神经网络
Want59518 小时前
当神经网络突破摩尔定律:探索大模型时代的算力新纪元
人工智能·深度学习·神经网络·aigc
zelonggao121 小时前
机器学习、监督学习、无监督学习、强化学习与深度学习
深度学习·学习·机器学习
悠悠海风1 天前
沥青路面裂缝的目标检测与图像分类任务
论文阅读·人工智能·深度学习·目标检测·计算机视觉·分类算法