针孔模型

坐标系

首先定义名词:

  • 光轴:各坐标系的Z轴方向
  • 光心:光轴的中心点
  • 主点:光轴同图像平面的交点
  • 焦距:光心到图像平面的距离

相机通常存在四个相关的坐标系:世界坐标系、相机坐标系、像素坐标系、图像坐标系。

为方便数学表达,通常以相机光心为原点,构建坐标系:

世界坐标系

世界坐标系(world coordinate),也称测量坐标系,用于描述三维空间中刚体的空间位置及姿态。

世界坐标系的位置可以根据实际情况自由确定,记为Ow−XwYwZwO_w-X_wY_wZ_wOw​−Xw​Yw​Zw​,坐标系单位为米(m)。

相机坐标系

相机坐标系(camera coordinate),以相机光心为原点,相机光轴为Z轴方向,构建的三维直角坐标系。

相机坐标系同像平面垂直,记为Oc−XcYcZcO_c-X_cY_cZ_cOc​−Xc​Yc​Zc​,坐标系单位为米(m)

像素坐标系

像素坐标系(pixel coordinate),以图像左上角为像素原点,构建的二维直角坐标系。坐标系的两轴uuu轴同图像的宽平齐,vvv轴同图像的高平齐。

像素坐标系记为Op−uvO_p-uvOp​−uv,坐标系的单位为像素(pixel)

图像坐标系

图像坐标系(image coordinate),以图像的中心点(相机光轴同图像的交点位置,主点)为原点构建的二维直角坐标系,坐标系的两轴xxx同像素坐标系的uuu平行,yyy同vvv平行。

像素坐标系不利于坐标变换,故而将像素坐标系平移至主点构建图像坐标系,记作Oi−xyO_i-xyOi​−xy,坐标系的单位为毫米(mm)。

小孔成像模型

相机的成像满足小孔成像模型,真实成像平面为倒像。然而在实际的相机中,得到的图像为正像,为使模型符合实际,将成像平面对称放置在相机前方,同世界坐标系、相机坐标系同侧放置:

由此,得到实际的相机模型如下:

坐标变换

世界坐标系到相机坐标系

已知某点在世界坐标系内坐标Wp{}^WpWp坐标为[XwYwZw]T\begin{bmatrix}X_w&Y_w&Z_w\end{bmatrix}^T[Xw​​Yw​​Zw​​]T,其在相机坐标系内坐标为cp=[XcYcZc]T{}^cp=\begin{bmatrix}X_c&Y_c&Z_c\end{bmatrix}^Tcp=[Xc​​Yc​​Zc​​]T:

则可通过变换矩阵得到两者间关系:
[XcYcZc1]=T⋅[XwYwZw1]=[Rt0T1][XwYwZw1]\begin{bmatrix}X_c\\Y_c\\Z_c\\1\end{bmatrix}=T\cdot\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}=\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} ⎣⎢⎢⎡​Xc​Yc​Zc​1​⎦⎥⎥⎤​=T⋅⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​=[R0T​t1​]⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​

相机坐标系到图像坐标系

已知相机坐标系内坐标cp=[XcYcZc]T{}^cp=\begin{bmatrix}X_c&Y_c&Z_c\end{bmatrix}^Tcp=[Xc​​Yc​​Zc​​]T,对应在图像坐标系上的坐标点为ip=[xy]T{}^ip=\begin{bmatrix}x&y\end{bmatrix}^Tip=[x​y​]T:

已知,相机坐标系到图像坐标系的距离为焦距fff,由相似三角形易得:
xXc=fZcyYc=fZc\frac{x}{X_c}=\frac{f}{Z_c}\\ \frac{y}{Y_c}=\frac{f}{Z_c} Xc​x​=Zc​f​Yc​y​=Zc​f​
由此,得x、yx、yx、y的表达:
{x=fXcZcy=fYcZc\begin{cases}x=f\frac{X_c}{Z_c}\\y=f\frac{Y_c}{Z_c}\end{cases} {x=fZc​Xc​​y=fZc​Yc​​​
整理为齐次坐标形式,可得:
Zc⋅[xy1]=[f0000f000010]⋅[XcYcZc1]Z_c\cdot \begin{bmatrix}x\\y\\1\end{bmatrix}=\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}\cdot\begin{bmatrix}X_c\\Y_c\\Z_c\\1\end{bmatrix} Zc​⋅⎣⎡​xy1​⎦⎤​=⎣⎡​f00​0f0​001​000​⎦⎤​⋅⎣⎢⎢⎡​Xc​Yc​Zc​1​⎦⎥⎥⎤​

图像坐标系到像素坐标系

由图像坐标系上一点坐标ip=[xy]T{}^ip=\begin{bmatrix}x&y\end{bmatrix}^Tip=[x​y​]T到像素坐标系上坐标pp=[uv]T{}^pp=\begin{bmatrix}u&v\end{bmatrix}^Tpp=[u​v​]T仅需要一个缩放和一个平移:

设坐标在uuu轴上缩放α\alphaα倍,vvv轴上缩放β\betaβ倍,坐标原点平移[cxcy]T\begin{bmatrix}c_x&c_y\end{bmatrix}^T[cx​​cy​​]T,则可得:
{u=αx+cxv=βy+cy\begin{cases} u=\alpha x+c_x\\ v= \beta y+c_y \end{cases} {u=αx+cx​v=βy+cy​​
将其写为齐次坐标形式:
[uv1]=[α0cx0βcy001]⋅[xy1]\begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\alpha&0&c_x\\0&\beta&c_y\\0&0&1\end{bmatrix}\cdot\begin{bmatrix}x\\y\\1\end{bmatrix} ⎣⎡​uv1​⎦⎤​=⎣⎡​α00​0β0​cx​cy​1​⎦⎤​⋅⎣⎡​xy1​⎦⎤​

综合变换

综合上述变换,可到如下形式:
Zc⋅[uv1]=[α0cx0βcy001][f0000f000010][Rt0T1][XwYwZw1]Z_c\cdot \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\alpha&0&c_x\\0&\beta&c_y\\0&0&1\end{bmatrix}\begin{bmatrix}f&0&0&0\\0&f&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} Zc​⋅⎣⎡​uv1​⎦⎤​=⎣⎡​α00​0β0​cx​cy​1​⎦⎤​⎣⎡​f00​0f0​001​000​⎦⎤​[R0T​t1​]⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​
对等式右侧,合并由相机到图像坐标系、图像到像素坐标系的变换,得到相机到图像坐标系的变换:
Zc⋅[uv1]=[fx0cx00fycy00010][Rt0T1][XwYwZw1]Z_c\cdot \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}f_x&0&c_x&0\\0&f_y&c_y&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}R&t\\0^T&1\end{bmatrix}\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix} Zc​⋅⎣⎡​uv1​⎦⎤​=⎣⎡​fx​00​0fy​0​cx​cy​1​000​⎦⎤​[R0T​t1​]⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​
其中,记αf=fx,βf=fy\alpha f=f_x,\beta f=f_yαf=fx​,βf=fy​。其含义为焦距fff在图像坐标系两轴方向上的像素个数,单位像素。

右侧第一个矩阵为相机内参矩阵K(Camera Intrinsic Matrix),描述物理世界与相片像素之间的对应关系;

右侧第二个矩阵为相机外参矩阵T(Camera Extrinsic Matrix),描述世界坐标系与相机的位置关系。

左侧系数ZcZ_cZc​称为比例因子,可记为s
s[uv1]=KT[XcYcZc1]s\begin{bmatrix}u\\v\\1\end{bmatrix}=KT\begin{bmatrix}X_c\\Y_c\\Z_c\\1\end{bmatrix} s⎣⎡​uv1​⎦⎤​=KT⎣⎢⎢⎡​Xc​Yc​Zc​1​⎦⎥⎥⎤​

归一化坐标

投影过程可认为,将世界坐标系下点坐标wp=[XwYwZw]T{}^wp=\begin{bmatrix}X_w&Y_w&Z_w\end{bmatrix}^Twp=[Xw​​Yw​​Zw​​]T转换至相机坐标系下点坐标cp=[XcYcZc]T{}^cp=\begin{bmatrix}X_c&Y_c&Z_c\end{bmatrix}^Tcp=[Xc​​Yc​​Zc​​]T,随后除去最后一维的数值(图形的深度信息),得到归一化坐标:
R[XwYwZw]+t=[XcYcZc]→[XcZcYcZc1]R\begin{bmatrix}X_w\\Y_w\\Z_w\end{bmatrix}+t=\begin{bmatrix}X_c\\Y_c\\Z_c\end{bmatrix}\to\begin{bmatrix}\frac{X_c}{Z_c}\\\frac{Y_c}{Z_c}\\1\end{bmatrix} R⎣⎡​Xw​Yw​Zw​​⎦⎤​+t=⎣⎡​Xc​Yc​Zc​​⎦⎤​→⎣⎡​Zc​Xc​​Zc​Yc​​1​⎦⎤​
归一化坐标可视作为,相机平面前方z=1处平面上的点,称为归一化平面,归一化坐标左乘内参矩阵可得像素坐标。

通常认为归一化平面同图像平面相同,也即图像平面在相机平面前方z=1处

可知,在针孔模型中图像的深度信息被丢弃,无法得到。

畸变模型

透镜

为获得清晰明亮的图形,在相机前方增加透镜。透镜使得光线聚焦或分散,每个透镜由特定的对焦距离,称为景深(Depth of Field)。

透镜可将平行于光轴的光线折射至同一点,称为焦点,焦点与光心间距离为焦距fff。过光心的光线不会偏离原始方向。

透镜的加入,引起新的影响:

  • 透镜形状对传播产生的畸变,称为径向畸变(Radial Distortion)
  • 由机械安装对传播产生的畸变,称为切向畸变(Tangential Distortion)

畸变系数包含[k1k2k3p1p2]\begin{bmatrix}k_1&k_2&k_3&p_1&p_2\end{bmatrix}[k1​​k2​​k3​​p1​​p2​​]

畸变

径向畸变

实际拍摄所得照片中,透镜会使得真实环境中的直线变为曲线。这种畸变越靠近图像边缘,越明显。此类畸变由于透镜形状的中心对称而通常径向对称。

径向畸变包含桶形畸变和枕形畸变两种:

设归一化平面上一点p=[xy]Tp=\begin{bmatrix}x&y\end{bmatrix}^Tp=[x​y​]T可用极坐标表示:[rθ]\begin{bmatrix}r&\theta\end{bmatrix}[r​θ​],其中rrr表示点p同坐标系原点的距离,θ\thetaθ表示同水平轴的夹角。径向畸变可视为坐标沿长度方向的变化产生的畸变,也即距离原点长度的变化引起的畸变。
xcorrected=x(1+k1r2+k2r4+k3r6)ycorrected=y(1+k1r2+k2r4+k3r6)r2=x2+y2x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6)\\ y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6)\\ r^2=x^2+y^2 xcorrected​=x(1+k1​r2+k2​r4+k3​r6)ycorrected​=y(1+k1​r2+k2​r4+k3​r6)r2=x2+y2
坐标pcorrected=[xcorrectedycorrected]Tp_{corrected}=\begin{bmatrix}x_{corrected}&y_{corrected}\end{bmatrix}^Tpcorrected​=[xcorrected​​ycorrected​​]T表示畸变后的归一化坐标,通常桶形畸变k1>0k_1>0k1​>0而枕形畸变k1<0k_1<0k1​<0。

切向畸变

切向畸变产生于相机透镜组装的不精确,由于透镜制造上的缺陷使其本身同像平面不平行而产生:

切向畸变可看成归一化平面上的坐标点沿着切线方向发射的变化产生的畸变,也即水平夹角变化导致的畸变:
xcorrected=x+2p1xy+p2(r2+2x2)ycorrected=y+p1(r2+2y2)+2p2xyr2=x2+y2x_{corrected}=x+2p_1xy+p_2(r^2+2x^2)\\ y_{corrected}=y+p_1(r^2+2y^2)+2p_2xy\\ r^2=x^2+y^2 xcorrected​=x+2p1​xy+p2​(r2+2x2)ycorrected​=y+p1​(r2+2y2)+2p2​xyr2=x2+y2

畸变模型

综合上述两种畸变类型,得到畸变模型:

理想点(Ideal Point)为通过坐标变换得到的坐标,真实点(Real Point)为理想点(xu,yu)(x_u,y_u)(xu​,yu​)经过径向畸变drdrdr和切向畸变dtdtdt后真实得到图像的上的点:
{xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy\begin{cases} x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy\\ \end{cases} {xdistorted​=x(1+k1​r2+k2​r4+k3​r6)+2p1​xy+p2​(r2+2x2)ydistorted​=y(1+k1​r2+k2​r4+k3​r6)+p1​(r2+2y2)+2p2​xy​
其中,径向畸变由参数[k1、k2、k3]\begin{bmatrix}k_1、k_2、k_3\end{bmatrix}[k1​、k2​、k3​​]确定;切向畸变由参数[p1、p2]\begin{bmatrix}p_1、p_2\end{bmatrix}[p1​、p2​​]决定;参数rrr满足条件:r2=x2+y2r^2=x^2+y^2r2=x2+y2。

由畸变后的点通过内参矩阵可得到像素平面上的实际坐标:
{u=fxxdistorted+cxv=fyydistorted+cy\begin{cases} u=f_x\:x_{distorted}+c_x\\ v= f_y\:y_{distorted}+c_y \end{cases} {u=fx​xdistorted​+cx​v=fy​ydistorted​+cy​​

双目相机模型

双目相机通过同步采集左右相机的图像,计算图像间视差,估计每个像素的视差。

双目相机通常由两个水平放置的相机组成,两相机的光圈中心分别记为OL、ORO_L、O_ROL​、OR​,两者之间的距离称为双目相机的基线bbb,相机焦距为fff

若对于三维空间内一点PPP进行捕捉,此时两相机将各自成像,记为PL、PRP_L、P_RPL​、PR​。理想情况下,相机尽在X轴进行位移,对应像素仅在uuu轴上存在差异,则记物体在两图像上的坐标为uLu_LuL​及−uR-u_R−uR​:

则可由相似三角形得到:
z−fz=b−uL+uRb\frac{z-f}{z}=\frac{b-u_L+u_R}{b} zz−f​=bb−uL​+uR​​
从而得到深度信息:
z=fbdz=f\frac{b}{d} z=fdb​
其中,参数ddd称为视差 (disparity),用于描述物体在两相机上形成像素的横坐标之差:
d≜uL−uRd\triangleq u_L-u_R d≜uL​−uR​
由视差可估计得到物体的深度信息,视差越大,距离越近。由于视差最小为一个像素,则双目测量具有最大值:
∀d=1s.t.zmax=fb\forall d=1\quad s.t.\quad z_{max}=fb ∀d=1s.t.zmax​=fb
也即双目相机的基线越大,测量范围就越大。

深度相机模型

RGB-D相机按原理可分为两大类:

  • 红外结构光类(Structured Light)
  • 飞行时间类(Time-of-Flight,ToF)

RGB-D相机通过向探测目标发射光束(通常为红外光)进行测距。其中结构光相机返回结构光图案以计算距离,而飞行时间则计算发射与接收时间差值计算距离。

根据测量结果,相机将生成3D点云信息。

图像信息

相机成像后,生成图像。图像在计算机中以矩阵形式存储(二维数组)。

相机模型:单目、双目、深度相机模型及相机畸变相关推荐

  1. DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM

    作者丨Clark@知乎 来源丨https://zhuanlan.zhihu.com/p/479534098 编辑丨3D视觉工坊 论文信息 @article{teed2021droid,title={D ...

  2. ORB-SLAM2 特征点法SLAM 单目 双目 rgbd相机SLAM 单应/本质矩阵恢复运动 小图大图地图优化

    ORB-SLAM2 ORB特征点法SLAM 支持单目.双目.rgbd相机 安装测试 本文github链接 orbslam2 + imu ORB-SLAM是一个基于特征点的实时单目SLAM系统,在大规模 ...

  3. 论文笔记-ORB-SLAM2-双目与rgbd相机跟单目情况的区别

    ORB-SLAM2的最大贡献就是把原来的系统扩展到了双目,rgbd上,这一篇也主要讲的是怎么使用双目或者深度相机的信息,以及他们和单目的区别. I.INTRODUCTION Place Recogni ...

  4. 单目图像深度估计——Monodepth2

    深度估计方法及网络架构 深度估计方法 网络架构 深度网络 位姿网络 损失函数构建 深度估计方法 Monodepth2使用基于单目图像的无监督学习法完成深度估计的任务.根据SFM模型原理在卷积神经网络中 ...

  5. 单目图像深度估计 - 应用篇:Learning to be a Depth Camera

    目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...

  6. 基于深度学习的单目图像深度估计总结

    图像深度估计,是目前计算机视觉研究中的经典问题.深度图(Depth Map)表示每个像素在空间中的位置,是一种普遍的三维场景信息表达方式,广泛应用于自动驾驶.三维重建等方面. 基于深度学习的单目图像深 ...

  7. 单目图像深度估计 - 入门篇

    由于公司网站设置,基于git的Blog越来越难打开,所以把部分内容搬运到这里. 一转眼都是两年前的内容了,且大部分都是我的个人理解,现在看来也难免有些Bug.虽然后来由于项目安排的关系没有继续单目图像 ...

  8. 单目图像深度估计 - 泛化篇:S2R-DepthNet

    单目图像深度估计 - 泛化篇:S2R-DepthNet 偶然看到微软亚研的单目图像深度估计发表在了CVPR2021上,决定更新一下这个系列. 官方已经有了十分详细的论文解读,我认为这篇文章比较有意思的 ...

  9. 单目图像深度估计 - 迁移篇:Depth Extraction from Video Using Non-parametric Sampling

    目录 入门篇:图像深度估计相关总结 应用篇:Learning to be a Depth Camera 尺度篇:Make3D 迁移篇:Depth Extraction from Video Using ...

  10. 【论文精读】基于网络立体数据监督的单目相对深度感知

    基于网络立体数据监督的单目相对深度感知 Paper Information Abstract 1 Introduction 2 Related Work 3 Proposed method 3.1 O ...

最新文章

  1. Facebook的实时Hadoop系统
  2. 车道检测--VPGNet: Vanishing Point Guided Network for Lane and Road Marking Detection and Recognition
  3. 面部识别技术走到十字路口?
  4. 计算机的网络通信软件的作用,网络协议软件的作用是什么
  5. MemCache在Windows环境下的搭建及启动
  6. [原创]正则表达式在c#中的学习和应用
  7. 使用强大的 Mockito 测试框架来测试你的代码
  8. LeetCode - Search a 2D Matrix
  9. 【机器学习】全面归纳距离和相似度方法(7种)
  10. 从零开始学安全(三)●黑客常用的windows端口
  11. 火狐标签在中间_在Firefox中保留未使用的标签
  12. java零碎要点001--深入理解JVM_Java的堆内存_栈内存_以及运行时数据区的作用
  13. 如何使用定时器产生两路频率可调、占空比可调的PWM波
  14. 2021年中国宠物牙膏市场趋势报告、技术动态创新及2027年市场预测
  15. 如果一切需要重学,2014年应该学哪些技术?
  16. Android心电图动画效果,手把手教你打造一个心电图效果View Android自定义View
  17. 赵小楼《天道》《遥远的救世主》深度解析(87)股市不是超市,慎入
  18. 前端CSS学习(第3、4天)
  19. 解决assets目录下的图片在布署到公网后不显示问题
  20. 2022-03-26-Subline3的常用快捷键

热门文章

  1. Onion Browser
  2. alians mysql_转:PHP 配置全攻略之Windows篇
  3. HTMl中内容离页面底部距离,CSS 实现内容高度不够的时候底部(footer)自动贴底
  4. MySql报错:You can‘t specify target table ‘t‘ for update in FROM clause
  5. HTTP返回码中301与302的区别
  6. visio 2010里面形状的剪切、联合、组合、拆分、相交、剪除功能在这里
  7. Vue3与Vue2的区别(组合式API)
  8. android 动态控件对齐,android控件的对齐方式
  9. gearman c语言,Gearman使用介绍 c语言0.2版本
  10. 教你炒股票1:不会赢钱的经济人,只是废人!