视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比
前言
本博客为主要学习《视觉SLAM十四讲》第5讲、《机器人学的状态估计》第6章6.4.1透视相机、《多视图几何》第5章摄像头模型等SLAM内容的总结与整理。
主要包括:
1、针孔相机模型、相机畸变、相机标定
2、双目相机模型、RGBD相机原理
2、双目相机与RGBD相机对比
1、单目相机模型
1.1 针孔相机模型
主要包括四种坐标:世界坐标、相机坐标、归一化相机坐标和像素坐标。
其中O-x-y-z为相机坐标系,O为相机的光心,一般z轴指向相机前方,x轴向右,y轴向下;当z=1时称为归一化平面;像素坐标系定义为:原点O‘位于图像左上角,u轴向右与x轴平行,v轴向下与y轴平行。
内参的推导:
根据针孔相机的前投影模型得到三维点和成像平面上点的关系:
Zf=XX′=YY′⇒X′=fXZ,Y′=fYZ\frac{Z}{f}=\frac{X}{X'}=\frac{Y}{Y'}\Rightarrow X'=f\frac{X}{Z},Y'=f\frac{Y}{Z}fZ=X′X=Y′Y⇒X′=fZX,Y′=fZY
再从成像平面到像素坐标:
u=αX′+cx,v=βY′+cyu=\alpha X'+c_x,v=\beta Y'+c_yu=αX′+cx,v=βY′+cy
整理得到:
[uv1]=1Z[fx0cx0fycy001][XYZ]≜1ZKP\begin{bmatrix}u\\v\\1 \end{bmatrix}=\frac{1}{Z}\begin{bmatrix}fx&0&c_x\\0&fy&c_y\\0&0&1 \end{bmatrix}\begin{bmatrix}X\\Y\\Z \end{bmatrix} \triangleq \frac{1}{Z}KP⎣⎡uv1⎦⎤=Z1⎣⎡fx000fy0cxcy1⎦⎤⎣⎡XYZ⎦⎤≜Z1KP
针孔模型总体流程:
1、世界坐标系下有一个点P,世界坐标为:PwP_wPw
2、相机的运动由R、t描述,将其转移到相机坐标系下为:Pˉc=RPw+t\bar P_c=RP_w+tPˉc=RPw+t
3、将相机坐标投影到归一化平面上,得到归一化相机坐标:Pc=[X/Z,Y/Z,1]P_c = [X/Z,Y/Z,1]Pc=[X/Z,Y/Z,1]
4、归一化坐标经过内参后对应到其像素坐标:Puv=KPcP_{uv}=KP_cPuv=KPc
1.2 相机畸变
为了获得更好的成像效果,会在相机前方安装滤镜。滤镜自身的形状对光纤传播产生影响,引起的畸变称为径向畸变,主要分为桶形畸变和枕型畸变;在机械组装过程中不能保证透镜和成像平面严格平行产生的时切向畸变。
对于归一化平面上一点p=[x,y]Tp=[x,y]^Tp=[x,y]T,也可以写成极坐标的形式[r,θ]T[r,\theta]^T[r,θ]T,假设畸变后点的坐标为[xdistorted,ydistorted][x_{distorted},y_{distorted}][xdistorted,ydistorted]。对于径向畸变有:
xdistorted=x(1+k1r2+k2r4+k3r6)x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)xdistorted=x(1+k1r2+k2r4+k3r6)
ydistorted=y(1+k1r2+k2r4+k3r6)y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6)ydistorted=y(1+k1r2+k2r4+k3r6)
对于切向畸变有:
xdistorted=x+2p1xy+p2(r2+2x2)x_{distorted}=x+2p_1xy+p_2(r^2+2x^2)xdistorted=x+2p1xy+p2(r2+2x2)
ydistorted=y+p1(r2+2y2)+2p2xyy_{distorted}=y+p_1(r^2+2y^2)+2p_2xyydistorted=y+p1(r2+2y2)+2p2xy
去畸变流程:对于每个归一化坐标(x,y)(x,y)(x,y),找到其在原始(畸变)图像上的坐标(xdistorted,ydistorted)(x_{distorted},y_{distorted})(xdistorted,ydistorted),然后将纠正后的点通过内参数投影到像素平面,得到该点在图像上的正确位置。
1.3 相机标定(张正友标定)
相机标定的主要目的是确定相机的内参K与畸变系数,在标定过程中也会求得相机的运动即外参。
这里主要介绍最常用的张氏标定,即棋盘格标定,其是介于传统标定方法和自标定方法之间的一种方法。注意张氏标定仅考虑了径向畸变而没有切向畸变。
1)求单应性矩阵H
设棋盘格中一点的三维世界坐标P=[X,Y,Z,1]TP=[X,Y,Z,1]^TP=[X,Y,Z,1]T,像素坐标为m=[u,v,1]Tm=[u,v,1]^Tm=[u,v,1]T,得棋盘格平面到图像平面的单应性关系为:
sm=K[R,T]Xsm=K[R,T]Xsm=K[R,T]X
令相机内参K为:[αγu00βv0001]\begin{bmatrix}\alpha & \gamma & u_0\\0 & \beta & v_0\\0&0&1 \end{bmatrix}⎣⎡α00γβ0u0v01⎦⎤
令棋盘格所在平面为Z=0平面,可得:
s[uv1]=K[r1r2r3t][XY01]=K[r1r2t][XY1]s\begin{bmatrix}u\\v\\1 \end{bmatrix}=K\begin{bmatrix}r_1 & r_2 & r_3 &t \end{bmatrix}\begin{bmatrix}X\\Y\\0\\1 \end{bmatrix}=K\begin{bmatrix}r_1 & r_2 &t \end{bmatrix}\begin{bmatrix}X\\Y\\1 \end{bmatrix}s⎣⎡uv1⎦⎤=K[r1r2r3t]⎣⎢⎢⎡XY01⎦⎥⎥⎤=K[r1r2t]⎣⎡XY1⎦⎤
[uv1]=1sK[r1r2t][XY1]≜H[XY1]\begin{bmatrix}u\\v\\1 \end{bmatrix}=\frac{1}{s} K\begin{bmatrix}r_1 & r_2 &t \end{bmatrix}\begin{bmatrix}X\\Y\\1 \end{bmatrix} \triangleq H\begin{bmatrix}X\\Y\\1 \end{bmatrix}⎣⎡uv1⎦⎤=s1K[r1r2t]⎣⎡XY1⎦⎤≜H⎣⎡XY1⎦⎤
得到两个平面的单应性矩阵H=[h1,h2,h3]H=[h_1,h_2,h_3]H=[h1,h2,h3],其是一个齐次方程,有8个未知数,每对对应点提供两个方程,所以需要4对对应点可以算出世界平面到图像平面的单应性矩阵H。
2)求内参矩阵
由上述得
r1=sK−1h1,r2=sK−1h2r_1 = sK^{-1}h_1,r_2 = sK^{-1}h_2r1=sK−1h1,r2=sK−1h2
由于旋转矩阵正交性,可得:
r1Tr2=0,∣∣r1∣∣=∣∣r2∣∣=1r_1^Tr_2=0,||r_1||=||r_2||=1r1Tr2=0,∣∣r1∣∣=∣∣r2∣∣=1
代入有:
h1TK−TK−1h2=0,h1TK−TK−1h1=h2TK−TK−1h2h_1^TK^{-T}K^{-1}h_2=0,h_1^TK^{-T}K^{-1}h_1=h_2^TK^{-T}K^{-1}h_2h1TK−TK−1h2=0,h1TK−TK−1h1=h2TK−TK−1h2
每个单应性矩阵提供两个方程,而内参矩阵包含5个参数,至少需要3个单应性矩阵
3)计算外参矩阵
根据1sK[r1r2t]=H=[h1h2h3]\frac{1}{s} K\begin{bmatrix}r_1 & r_2 &t \end{bmatrix}= H = \begin{bmatrix}h_1 &h_2 &h_3\end{bmatrix}s1K[r1r2t]=H=[h1h2h3],我们已经得到了H和K,可得:
s=1∣∣K−1h1∣∣=1∣∣K−1h2∣∣s=\frac{1}{||K^{-1}h_1||}=\frac{1}{||K^{-1}h_2||}s=∣∣K−1h1∣∣1=∣∣K−1h2∣∣1
r1=sK−1h1,r2=sK−1h2r_1 = sK^{-1}h_1,r_2 = sK^{-1}h_2r1=sK−1h1,r2=sK−1h2
r3=r1×r2r_3 = r_1\times r_2r3=r1×r2
t=sK−1h3t = sK^{-1}h_3t=sK−1h3
4)极大似然估计
上述推导了理论值,然而实际测量存在高斯噪声,因此需要使用最大似然估计进行优化,假设采集了n副棋盘格图像,每个棋盘格上检测到角点m个,其中第i副棋盘格上的角点Mj的像素投影点为:
m^(K,Ri,ti,Mij)=K[R∣t]Mij\hat m(K,R_i,t_i,M_{ij})=K[R|t]M_{ij}m^(K,Ri,ti,Mij)=K[R∣t]Mij
构造似然函数并使用LM算法迭代求解非线性最小二乘问题,并采用之前计算的理论值作为初值:
∑i=1n∑j=1m∣∣mij−m^(K,Ri,ti,Mij)∣∣2\sum^n_{i=1}\sum^m_{j=1} ||m_{ij}-\hat m(K,R_i,t_i,M_{ij})||^2i=1∑nj=1∑m∣∣mij−m^(K,Ri,ti,Mij)∣∣2
5)径向畸变估计
张氏标定只关注影响最大的径向畸变。根据之前的径向畸变方程:
udistorted=u+(u−u0)(k1r2+k2r4)u_{distorted}=u+(u-u_0)(k_1r^2+k_2r^4)udistorted=u+(u−u0)(k1r2+k2r4)
vdistorted=v+(v−v0)(k1r2+k2r4)v_{distorted}=v+(v-v_0)(k_1r^2+k_2r^4)vdistorted=v+(v−v0)(k1r2+k2r4)
化成矩阵形式:
[(u−u0)r2(u−u0)r4(v−v0)r2(v−v0)r4][k1k2]=[udistorted−uvdistorted−v]\begin{bmatrix}(u-u_0)r^2 &(u-u_0)r^4\\(v-v_0)r^2&(v-v_0)r^4 \end{bmatrix}\begin{bmatrix}k_1\\k_2 \end{bmatrix}=\begin{bmatrix}u_{distorted}-u\\v_{distorted}-v \end{bmatrix}[(u−u0)r2(v−v0)r2(u−u0)r4(v−v0)r4][k1k2]=[udistorted−uvdistorted−v]
记为:Dk=d⇒k=(DTD)−1DTdDk=d\Rightarrow k=(D^TD)^{-1}D^TdDk=d⇒k=(DTD)−1DTd,然后再对最大似然估计进行优化。
1.4 全局快门(global shutter)和卷帘快门(rolling shutter)
全局快门是在同一时间进行曝光,其曝光时间短,会增加噪点;卷帘快门时通过传感器逐行扫描进行曝光,不同行像元的曝光时间不同,因此当曝光不当或物体移动较快时,会出现部分曝光(partial exposure)、斜坡图形(skew)、晃动(wobble) 等现象(称为果冻效应),但是可以达到更高的帧数和更低的噪声。
2、立体相机模型
2.1 双目相机模型
双目相机一般由两个水平放置的相机组成,可以将其看作针孔相机模型。两者的距离称为刷双目相机的基线。
假设空间点P在左右相机各成的像为PL、PRP_L、P_RPL、PR,理想情况下两者只在图像x轴上有差异,记左侧坐标为uLu_LuL,右侧坐标为uRu_RuR,根据三角形相似关系有:
z−fz=b−uL+uRb\frac{z-f}{z}=\frac{b-u_L+u_R}{b}zz−f=bb−uL+uR
可得:
z=fbd,d=uL−uRz=\frac{fb}{d},d=u_L-u_Rz=dfb,d=uL−uR
这里d为左右两图的横坐标之差,称为视差。由于视差最小为一个像素,双目深度存在一个理论上的最大值,由fbfbfb决定。
2.2 RGBD相机原理
这部分想详细了解推荐看博客 https://blog.csdn.net/electech6/article/details/78707839 和
https://blog.csdn.net/electech6/article/details/78349107
RGBD相机原理主要分为:
1、通过红外结构光(Structured Light)来测量像素距离,如Kinect1、Project Tango1、Intel Realsense等;
通过近红外激光器,将具有一定结构特征的光(比如离散光斑、条纹光、编码结构光等)投射到物体上,再由专门的红外摄像头进行采集。然后通过返回的结构光图案,计算物体与自身的距离。
2、通过飞行时间法(TOF)原理来测量像素距离,如Kinect2、TOF传感器等。
通过发射脉冲光到被观测物体上,然后接收从物体反射回去的脉冲光,通过发送到返回的光束飞行(往返)时间来计算被测物体离相机的距离。分为光脉冲调制和连续波调制。
2.3 双目相机与RGBD相机对比
(部分数据可能是前几年的技术水平,仅供参考,但局限性与基本趋势不会变)
相机 | TOF | 结构光 | 双目 |
---|---|---|---|
测距方式 | 主动式 | 主动式 | 被动式 |
工作原理 | 根据红外(IR)光飞行时间直接测量 | 主动投影已知编码图案 | 图像特征点匹配,三角测量间接计算 |
帧率 | 较高,可达上百FPS | 30fps | 从高到低都有(一般较低) |
分辨率 | 低于640X480 | 可达1080X720 | 可达2K |
测量精度 | 最高里厘米 | 近距离可达0.01-1mm | 近距离可达毫米级 |
测量范围 | 可测量较远距离 | 一般10m以内 | 由于基线限制,只能测量较近距离 |
强光环境 | 中 | 弱 | 良好 |
低光环境 | 良好 | 良好 | 弱 |
影响因素 | 不受光照变化和物体纹理影响,受多重反射影响 | 容易受光照影响,难以用于室外 | 受光照变化和物理纹理影响很大,夜晚无法使用 |
硬件成本 | 高 | 中 | 低 |
软件复杂度 | 低 | 中 | 高 |
功耗 | 很高,需全面照射 | 中,只需照射局部区域 | 低 |
视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比相关推荐
- 相机标定和双目相机标定标定原理推导及效果展示
文章目录 前言 一.相机标定 1.相机的四个坐标系 2.相机的畸变 二.张正友标定法 1.求解内参矩阵与外参矩阵的积 2.求解内参矩阵 3.求解外参矩阵 4.标定相机的畸变参数 5.双目标定 6.极线 ...
- 相机标定的意义,单目相机和双目相机标定注意事项
本博客解释了相机标定的意义,单目相机和双目相机标定注意事项.对单目相机标定时物体距离相机位置不同,需要在不同位置进行标定做了解释. 坐标转换 像素坐标.相机坐标.世界物理坐标之间的坐标转换条件 相机标 ...
- 相机标定原理 用ROS camera_calibration 功能包 在gazebo中进行 相机校准
在gazebo中进行相机标定 相机标定原理 相机标定意义 相机标定原理 相机标定参数 相关坐标系 世界坐标系 相机坐标系 像素坐标系.图像坐标系 相机坐标系转换为世界坐标系 像素坐标系转换为图像坐标系 ...
- 1. 相机标定原理(学习笔记)
相机标定(Camera Calibration)-学习笔记 文章目录 相机标定(Camera Calibration)-学习笔记 一.简介 二.原理 1. 坐标系 *coordinates* 2. 相 ...
- 非常详细的相机标定原理、步骤(一)
目录 一.什么是相机标定 二.坐标系 1.世界坐标系(word Coordinate) 2.相机坐标系(camera coordinate) 3.世界坐标系到相机坐标系转换 三.总结: 非常详细的相机 ...
- 奥比中光Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题
相机:Gemini 3D双目结构光深度相机 环境:Android7.1 软件:SDK中的java demo下的depthforopenni2 问题: 在Android样例depthforopenni2 ...
- Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题
相机:Gemini 3D双目结构光深度相机 环境:Android7.1 软件:SDK中的java demo下的depthforopenni2 问题: 在Android样例depthforopenni2 ...
- 相机标定、双目相机标定(原理)、三维重建效果展示
1.相机标定的目的: (1)通过单目相机标定分别求出左右相机的内参数和外参数. (2)矫正由于镜头畸变造成的图片的变形,例如,现实中的直线,拍摄成图像后会外凸或内凹,进行相机标定后可以对这种情况进行校 ...
- 相机标定原理_第二期直播《相机标定的基本原理与经验分享》精彩回录
作者:齐小凡 来源:第二期直播<相机标定的基本原理与经验分享>精彩回录 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微信群内完成答疑 ...
最新文章
- MySQL主主复制搭建教程收集(待实践)
- JS字符串类型转日期然后进行日期比较
- Citrix XenApp 下载及一年 developer license 获取
- ip字符串转换 linux,Linux网络编程入门
- php验证规则表单,PHP Yii框架之表单验证规则大全
- android Surface和SurfaceView概述
- ZOJ 3987 2017CCPC秦皇岛 G:Numbers(高精度+贪心)
- foreach写失效的问题
- 为什么需要软件过程改善(Software Process Improvement)?
- mysql远程连接error 1045_启用远程MySQL连接:错误1045(28000):用户被拒绝访问
- 树莓派3B通过mentohust登录锐捷校园网有线端,并创建WIFI(开热点)供其他设备使用,同时实现开机自启动
- PMP课程学习第五天
- 方舟服务器显示网络错误,方舟生存进化提示网络错误怎么办
- 如何测试服务器及端口是否畅通?
- P1234 小A的口头禅题解
- SAP 成套销售按项目销售
- 【ROS】分布式系统【talkerlistener】(新增自定义名称)
- VC++中遇到的错误“Error spawning cl.exe”
- Baxter官网资料(查)
- 【zxing生成二维码及解析二维码】