湖北什么是网站建设,企业展厅图文设计,空间破解网站,博罗东莞网站建设一个能思考的人#xff0c;才真是一个力量无边的人。——巴尔扎克
本章主要内容#xff1a; 1.针孔相机模型 2.相机成像的几个坐标系图像 3.畸变及相机标定
本节主要介绍在照相机拍摄过程中#xff0c;现实物体如何跟照片上的像素关联起来#xff0c;具体涉及相机成像的物…一个能思考的人才真是一个力量无边的人。——巴尔扎克
本章主要内容 1.针孔相机模型 2.相机成像的几个坐标系图像 3.畸变及相机标定
本节主要介绍在照相机拍摄过程中现实物体如何跟照片上的像素关联起来具体涉及相机成像的物理过程和坐标系转换。
1.1 针孔相机模型
针孔相机模型是目前大多数相机的成像模型其成像原理为小孔成像回顾一下按照光线在同一介质中按直线传播的原理在小孔另一面会形成倒立按比例缩小的实像。
如果不借助其他东西这个成像过程会遵循如下原理小孔越小成像越好但会越暗。如下图小孔直径从2mm变到0.35mm过程图像越来越清晰但也越来越暗。
我们想要的照片是既要清晰又要有足够的亮度即让足够的光线进来捕获到更多的环境细节为了解决这个问题现代相机会使用透镜来聚集光线在保证有较大进光面的同时让光线也能汇聚到较小范围。 关于透镜有两个概念聚焦与失焦 聚焦从物体不同部分射出的光线通过镜头之后聚焦在底片的一个点上使影像具有清晰的轮廓与真实的质感这个过程称为聚焦。 失焦即接收的点的信息未聚焦到一起会导致成像模糊。 注意物体“聚焦”有特定距离景深在景深内可清晰成像景深外成像模糊。 加入透镜之后成像规律会有一点变化此时当物体离透镜不同距离时会形成不同的像。当物体处于凸透镜的 2 倍焦距之外会形成倒立的、缩小的实像。一倍焦距到二倍焦距之间则会形成倒立的、放大的实像。成像物体则在一倍焦距内成正立的、放大的虚像。 一般地相机成像时物体在透镜的二倍焦距之外。而对于投影仪则会把成像物体放在一倍焦距到二倍焦距之间。对于放大镜成像物体则在一倍焦距内。
最后将成像处实像用感光元件接收后就形成了拍摄的照片。在比较早的年代感光元件使用胶片胶片的原理是通过光产生化学反应来记录。而到了数码时代感光元件则使用了CCD或者CMOS其原理是将光转化为模拟电信号来记录。 电子感光元件也叫图像传感器sensor分为两种一种是广泛使用的 CCD(电荷耦合)元件另一种是 CMOS(互补金属氧化物半导体)器件。其产生的模拟信号首先经过模拟信号放大器进行信号放大进而经过数模转换电路DAC变为数字图像数字图像再经过 ISPImage Signal Processor图像处理器进行数字图像处理最后数字图像经过压缩编码算法存储到 SD 卡中成为一个照片文件。
CCD CCD 全称 Charge Coupled Device它使用一种高感光度的半导体材料制成由许多感光单位组成通常以百万像素为单位。当 CCD 表面受到光线照射时每个感光单位会将电荷反映在组件上即把光转换为电荷所有的感光单位所产生的信号加在一起就构成了一幅完整的画面。CMOS CMOS 全称 Complementary Metal-Oxide Semiconductor它主要是利用硅和锗这两种元素所做成的半导体使其在 CMOS 上共存着 N 极和 P 极的半导体这两个互补效应所产生的电流即可被处理芯片记录为影像。 两者最主要的区别在于CCD 传感器的图像质量优于 CMOS 传感器而 CMOS 传感器在成像速度、功耗、价格等方面优于 CCD 传感器。
1.2 相机成像的几个坐标系
要把相机拍摄的照片与实际物体关联起来就要建立三维世界到二维图像平面的映射关系这个过程主要通过几个坐标系之间的转换来实现。
1.2.1成像坐标系之间的关系
相机成像的坐标系主要有四个分别是世界坐标系相机坐标系图像坐标系与像素坐标系。世界坐标系下物体的光线世界坐标系通过透镜相机坐标系投射到感光原件上图像坐标系最后计算机在像素坐标系离散化过程上做处理。
世界坐标系用于表示空间物体的绝对坐标使用Xw,Yw,Zw表示世界坐标系可通过旋转和平移得到相机坐标系。 相机坐标系以相机的光心为坐标系原点Xc.Yc轴平行于图像坐标系的x,y轴相机的光轴为Zc轴坐标系满足右手法则相机的光心可理解为相机透镜的几何中心。 图像物理坐标系坐标原点在CCD图像平面的中心x,y轴分别平行于图像像素坐标系的(u,v)轴坐标用(x,y)表示。 图像像素坐标系表示三维空间物体在图像平面上的投影像素是离散化的其坐标原点在CCD图像平面的左上角u轴平行于CCD平面水平向右v轴垂直于u轴向下坐标使用(u,v)来表示。图像宽度W高度H。
1.2.2 坐标计算 三维坐标投影到成像平面的坐标完成三维到二维点的映射可以通过相似三角形得出对于相机坐标系下的P(X,Y,Z)成像坐标为 f Z − X ′ X − Y ′ Y \frac{f}{Z}-\frac{X^{\prime}}{X}-\frac{Y^{\prime}}{Y} Zf−XX′−YY′ 为了方便运算取对称的镜像进行计算效果等价。 f Z X ′ X Y ′ Y \frac{f}{Z}\frac{X^{\prime}}{X}\frac{Y^{\prime}}{Y} ZfXX′YY′ 可得 X ′ f X Z X^{\prime}f \frac{X}{Z} X′fZX Y ′ f Y Z Y^{\prime}f \frac{Y}{Z} Y′fZY 计算机中的图像是一个个像素构成且其并不是图像中心为坐标原点而是一般把左上角规定为坐标原点要在计算机中处理图像信息需要在得到成像平面上的坐标后把成像坐标转为像素坐标。
其中O1是投影后的坐标系原点位于图像中心而在计算机图像处理库中如OpenCV,则是定义的左上角O0为图像坐标系原点横坐标轴为u轴向右纵坐标轴为v轴向下。 相机内感光原件如cmos是一个一个小格子拼接而成的可以认为是离散的这个小格子可能不是正方形要将投影坐标P’转化为像素坐标需要经历如下过程 计算P’到图像中心的像素距离 u ′ X ′ α x f α x X Z f x X Z u^{\prime}\frac{X^{\prime}}{\alpha_{x}}\frac{f}{\alpha_{x}} \frac{X}{Z}f_{x} \frac{X}{Z} u′αxX′αxfZXfxZX v ′ Y ′ α y f α y Y Z f y Y Z v^{\prime}\frac{Y^{\prime}}{\alpha_{y}}\frac{f}{\alpha_{y}} \frac{Y}{Z}f_{y} \frac{Y}{Z} v′αyY′αyfZYfyZY 其中f为成像焦距αx与αy为u,v方向像素的长度。 最后转为O0下的坐标 实现摄像机下三维世界的点到像素平面二维图像平面的点的映射f为单位米转化为像素的数量非线性变换如下 u u ′ c x f x X Z c x uu^{\prime}c_{x}f_{x} \frac{X}{Z}c_{x} uu′cxfxZXcx v v ′ c y f y Y Z c y vv^{\prime}c_{y}f_{y} \frac{Y}{Z}c_{y} vv′cyfyZYcy 引入齐次坐标改为线性变换以方便运算 $\left(\begin{array}{ccc} u \ v \ 1 \end{array}\right)\frac{1}{Z}\left(\begin{array}{ccc} f_{x} 0 c_{x} \ 0 f_{y} c_{y} \ 0 0 1 \end{array}\right)\left(\begin{array}{c} X \ Y \ Z \end{array}\right)\frac{1}{Z} K P \$ 其中 K ( f x 0 c x 0 f y c y 0 0 1 ) K\left(\begin{array}{ccc} f_{x} 0 c_{x} \\ 0 f_{y} c_{y} \\ 0 0 1 \end{array}\right) K fx000fy0cxcy1 就是通常所说的相机内参矩阵 通过内参矩阵K就可以将相机坐标系的下三维的坐标点转换为图像上的二维像素坐标。而对于世界坐标系上的坐标转换到相机坐标系中则涉及的是不同坐标系中坐标转换这个会在第二章中进行讲解。
1.3 图像畸变
如果相机成像过程没有畸变则一个正方形投影成像后还是一个正方形但实际情况往往不是这样。大家拍照中可能也会发现在拍一个人时可能会把一个脸不大的人脸拍出来却比较大这时候不一定是你拍照技术的问题有可能是因为相机畸变。相机成像过程的图像畸变主要是镜片加工与安装的缺陷造成的。
相机畸变主要由于相机镜头的光学性质造成的。相机镜头中的光线经过折射、反射等多个光学过程导致不同位置的物体在图像中呈现出不同的形变。这种形变被称为畸变。畸变可以分为两种径向畸变和切向畸变。
1.3.1 径向畸变
径向畸变来自透镜形状不规则以及建模的方式导致镜头不同部分焦距不同。光线在远离透镜中心的地方偏折更大向外偏移远离中心为枕型畸变左图或更小向中心靠拢为桶形畸变右图。
下图显示矩形网格因径向畸变而产生的位移。越远离光轴中心的地方矩形网格上的点偏移越大。
对于径向畸变常用如下公式进行修正 x corrected x ( 1 k 1 r 2 k 2 r 4 k 3 r 6 ) y corrected y ( 1 k 1 r 2 k 2 r 4 k 3 r 6 ) 其中: r 2 x 2 y 2 \begin{array}{l} x_{\text {corrected }}x\left(1k_{1} r^{2}k_{2} r^{4}k_{3} r^{6}\right) \\ y_{\text {corrected }}y\left(1k_{1} r^{2}k_{2} r^{4}k_{3} r^{6}\right) \end{array} \\ \text { 其中: } r^{2}x^{2}y^{2} xcorrected x(1k1r2k2r4k3r6)ycorrected y(1k1r2k2r4k3r6) 其中: r2x2y2 k1,k2,k3称为径向畸变校正系数。
1.3.2 切向畸变
切向畸变来自于整个摄像机的组装过程。由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的如下图所示。
切向图像畸变使用如下公式进行修正 x corrected x [ 2 p 1 x y p 2 ( r 2 2 x 2 ) ] y corrected y [ p 1 ( r 2 2 y 2 ) 2 p 2 x y ] 其中 : r 2 x 2 y 2 \begin{aligned} x_{\text {corrected }} x\left[2 p_{1} x yp_{2}\left(r^{2}2 x^{2}\right)\right] \\ y_{\text {corrected }} y\left[p_{1}\left(r^{2}2 y^{2}\right)2 p_{2} x y\right] \end{aligned} \\ 其中: r^{2}x^{2}y^{2} xcorrected ycorrected x[2p1xyp2(r22x2)]y[p1(r22y2)2p2xy]其中:r2x2y2 其中 p1,p2为切向畸变系数。 将径向畸变与切向畸变校正结合在一起便是常用的畸变校正过程。 x corrected x ( 1 k 1 r 2 k 2 r 4 k 3 r 6 ) [ 2 p 1 x y p 2 ( r 2 2 x 2 ) ] y corrected y ( 1 k 1 r 2 k 2 r 4 k 3 r 6 ) [ p 1 ( r 2 2 y 2 ) 2 p 2 x y ] 其中 : r 2 x 2 y 2 \begin{array}{l} x_{\text {corrected }}x\left(1k_{1} r^{2}k_{2} r^{4}k_{3} r^{6}\right)\left[2 p_{1} x yp_{2}\left(r^{2}2 x^{2}\right)\right] \\ y_{\text {corrected }}y\left(1k_{1} r^{2}k_{2} r^{4}k_{3} r^{6}\right)\left[p_{1}\left(r^{2}2 y^{2}\right)2 p_{2} x y\right] \end{array} \\ 其中: r^{2}x^{2}y^{2} xcorrected x(1k1r2k2r4k3r6)[2p1xyp2(r22x2)]ycorrected y(1k1r2k2r4k3r6)[p1(r22y2)2p2xy]其中:r2x2y2 等式右边的(x, y)为得到的图像中的理想点但是存在畸变于是把其带入等式右边经过径向和切向变换后得到左边的畸变校正后的实际点坐标(xcorrected, ycorrected)取出对应颜色值作为(x, y)的颜色值即可。通过去畸变可以完成图像的矫正如下图
1.4* 鱼眼相机模型
鱼眼镜头一般是由十几个不同的透镜组合而成的在成像的过程中入射光线经过不同程度的折射投影到尺寸有限的成像平面上使得鱼眼镜头与普通镜头相比起来拥有了更大的视野范围。下图表示出了鱼眼相机的一般组成结构。最前面的两个镜头发生折射使入射角减小其余的镜头相当于一个成像镜头这种多元件的构造结构使对鱼眼相机的折射关系的分析变得相当复杂。
1.4.1*鱼眼相机成像模型
研究表明鱼眼相机成像时遵循的模型可以近似为单位球面投影模型。可以将鱼眼相机的成像过程分解成两步第一步三维空间点线性地投影到一个球面上它是一个虚拟的单位球面它的球心与相机坐标系的原点重合第二步单位球面上的点投影到图像平面上这个过程是非线性的。下图表示出了鱼眼相机的成像过程。
我们知道普通相机成像遵循的是针孔相机模型在成像过程中实际场景中的直线仍被投影为图像平面上的直线。但是鱼眼相机如果按照针孔相机模型成像的话投影图像会变得非常大当相机视场角达到180°时图像甚至会变为无穷大。所以鱼眼相机的投影模型为了将尽可能大的场景投影到有限的图像平面内允许了相机畸变的存在。并且由于鱼眼相机的径向畸变非常严重所以鱼眼相机主要的是考虑径向畸变而忽略其余类型的畸变。
1.4.2* 鱼眼相机投影函数
为了将尽可能大的场景投影到有限的图像平面内鱼眼相机会按照一定的投影函数来设计。根据投影函数的不同鱼眼相机的设计模型大致能被分为四种等距投影模型、等立体角投影模型、正交投影模型和体视投影模型。下面的四种鱼眼相机的投影模型反映出了空间中的一点P是如何投影到球面上然后到图像平面上成像的。 1、等距投影模型
上述式子中rd表示鱼眼图像中的点到畸变中心的距离是鱼眼相机的焦距是入射光线与鱼眼相机光轴之间的夹角即入射角。 2、等立体角投影模型 3、正交投影模型
4、体视投影模型
本章小结
本节以针孔相机模型作为基本模型简要介绍了相机成像原理相机模型中的几个坐标系及相机的畸变及相机标定的方法。最后鱼眼相机模型作为扩展介绍。 通过相机标定可以获得相机内参及畸变系数这解决了相机坐标系图像坐标系像素坐标系之间的转换过程属于投影过程。而世界坐标系到相机坐标系之间的转换则涉及到不同坐标系之间的空间转换这部分涉及的参数为外参这部分内容在下节进行讲解。
本章思考
1.叙述相机内参的物理意义。如果一部相机的分辨率变为原来的两倍而其他地方不变那么它的内参将如何变化 注分辨率在不同场合意义不尽相同这里取传感器的总的感光单元数量作为分辨率而一些资料中会以某边排列的感光元件数量作为分辨率。在底片面积不变的情况下分辨率变为原来两倍指感光单元数量变为原来两倍。如1200w像素变为2400w像素。 2.调研全局快门(global shutter)相机和卷帘快门(rolling shutter)相机的异同。它们在SLAM中有何优缺点 附录 1.1相机内参标定简介 到目前为止相机成像有两大转换过程相机投影及畸变消除主要由 K ( f x 0 c x 0 f y c y 0 0 1 ) K\left(\begin{array}{ccc} f_{x} 0 c_{x} \\ 0 f_{y} c_{y} \\ 0 0 1 \end{array}\right) K fx000fy0cxcy1 内参矩阵以及畸变参数Distortioncoefficients(k1k2k3, p1p2)这两种参数来决定。而求出这两类参数的过程就是相机标定目前相机常用的方法是借助棋盘格标定板在相机前面拿着标定板上下左右前后移动然后借助标定算法来求出以上参数常用的标定算法有张正友标定法。
1.2 相机内参标定工具
1.2.1 OpenCV
OpenCV是一款广泛使用的计算机视觉库其中包含相机内参标定的相关函数。在OpenCV中使用calibrateCamera函数进行相机内参标定该函数使用棋盘格等标定板通过对标定板拍摄的多幅图像进行处理得出相机的内参参数。OpenCV还提供了相关的可视化工具如drawChessboardCorners函数用于显示标定板的角点以及projectPoints函数用于将3D点投影到2D图像平面上。
循环读取图片使用findChessboardCorners函数检测角点需提前输入角点数使用find4QuadCornerSubpix函数对角点进行亚像素精确化可用drawChessboardCorners将角点显示根据角点数和尺寸创建一个理想的棋盘格用point向量存储所有理论上的角点坐标通过calibrateCamera函数由理想坐标和实际图像坐标进行标定可得到标定结果由projectPoints函数计算反向投影误差
1.2.2 MATLAB
MATLAB也提供了相机内参标定的工具箱包括Camera Calibration Toolbox和Image Processing Toolbox等。Camera Calibration Toolbox使用标定板对相机进行标定并提供了可视化工具如ShowExtrinsics函数用于显示相机的外参参数。Image Processing Toolbox提供了更加高级的算法如多目相机标定以支持更加复杂的应用场景。 简单过程如下
应用程序中找到Camera Calibration添加标定板拍摄图片按Ctrl可一次添加多张输入棋盘格每格的尺寸大小显示已检测出的棋盘格点击Calibration开始标定。得到标定结果平均误差小于0.5即可认为结果可靠可查看标定结果和程序
1.2.3 ROS
ROSRobot Operating System是一种常用的机器人操作系统其中包含相机内参标定的相关包如camera_calibration。该包通过对标定板拍摄的多幅图像进行处理计算出相机的内参参数并自动保存标定结果。此外ROS还提供了一系列可视化工具如image_view用于显示相机的图像和标定结果。