三角测量和极线校正

·三角测量

假设两个相机像平面精准位于同一平面上,且行对齐,两个光轴严格平行。

利用三角形关系,我们不难推出Z值:

如果主点cxlc_{x}^{l}cxl​,cxrc_{x}^{r}cxr​坐标相同则可简化为:

因为视差d=xl−xrd = x^{l}-x^{r}d=xl−xr,且ZZZ为我们的深度值depthdepthdepth,故:
depth=fTddepth = \frac{fT}{d}depth=dfT​


·视差与深度图关系

(1)视差与深度成反比,视差接近0时,微小的视差变化会产生较大的深度变化。
(2)当视差较大时,微小的视差变化几乎不会引起深度多大的变化。
(3)因此,立体视觉系统仅物体距离相机较近时具有较高的深度精度。

·极线校正

(1)校正的过程:就是将相机在数学上对准到同一观察平面上,使得相机像素行是严格对齐的。
(2)校正的目的:对两幅图像的二维匹配搜索变成一维,节省计算量,排除虚假匹配点。

·校正算法

为了将相机极点变换到无穷远使得极线水平对准,我们创建一个旋转矩阵,首先是XXX轴的旋转,我们将XXX轴旋转到与基线相同的方向即旋转后新XXX轴就是Ol−OrO_{l}-O_{r}Ol​−Or​,旋转向量:e1=T∣T∣e_{1}=\frac{T}{|T|}e1​=∣T∣T​。

确定旋转后的新YYY轴,只需满足与e1e_{1}e1​正交即可:选择与主光轴和e1e_{1}e1​相交的方向:
e2=e1×(Rl[0,0,1]T+tl)e_{2}=e_{1} \times (R_{l}[0,0,1]^{T}+t_{l})e2​=e1​×(Rl​[0,0,1]T+tl​)

新的ZZZ轴,与e1,e2e_{1},e_{2}e1​,e2​垂直且满足右手法则:e3=e1×e2e_{3}=e_{1} \times e_{2}e3​=e1​×e2​,

最终得到的旋转矩阵:Rnew=[e1,e2,e3]R_{new}=[e_{1},e_{2},e_{3}]Rnew​=[e1​,e2​,e3​],

新的旋转矩阵:Rlnew=RnewRltR_{l}^{new}=R_{new}R_{l}^{t}Rlnew​=Rnew​Rlt​,RrnewRnewRrtR_{r}^{new}R_{new}R_{r}^{t}Rrnew​Rnew​Rrt​,

校正后,baseline TTT计算:

下式中clrc_{lr}clr​是指右相机光心在左相机坐标系下的坐标(也等于与右相机光心[0,0,0]的距离), t求解公式的意义是左相机光心在右相机校正后的坐标系下的坐标(也等于与右相机校正后的坐标系下光心[0,0,0]的距离)。故baseline就是x轴方向的距离。

·视差图转深度图

视差图是校正后的坐标系下得到的值,首先将其转换为校正后坐标系下的深度图
已知:

则:

把上式写成矩阵形式:

式中Q′,wQ^{'},wQ′,w定义如下:

将校正后的坐标系下深度图转换到校正前的相机坐标系下
已知:校正前的相机坐标系下坐标(x,y,z)(x,y,z)(x,y,z)转到校正后相机坐标系下坐标(x′,y′,z′)(x^{'},y^{'},z^{'})(x′,y′,z′)转换关系如下:

则已知校正后的求校正前的公式如下:

再将其投影到图像坐标系下:

即:

将上两步合并得到校正后坐标系下的视差图(u′,v′,disp)(u^{'},v^{'},disp)(u′,v′,disp) 与校正前的坐标系下的深度图(u,v,depth)(u,v,depth)(u,v,depth)的转换矩阵QQQ,已知:

则:

·立体匹配

三维重建的核心就是立体匹配。通过寻找匹配点,利用三角测量或对极约束得到其在空间中的3D信息。

立体匹配算法主要分为全局、局部、半全局。

(1)全局立体匹配算法:
全局立体匹配算法主要是采用了全局的优化理论方法估计视差,建立全局能量函数,通过最小化全局能量函数得到最优视差值。通过二维相邻像素视差之间的约束(如平滑性约束)而得到更好的匹配效果,但是对内存的占用量大,速度慢不适合实时运行。主要的算法有图割(graph cuts)、信念传播(belief propagation)、动态规划等算法。

(2)局部立体匹配算法:
主要是采用局部优化方法进行视差值估计,局部立体匹配算法有 SAD,SSD 等算法,与全局立体匹配
算法一样,也是通过能量最小化方法进行视差估计,但是在能量函数中,只有数据项,而没有平滑项。
该算法由于每个像素计算互不干扰可以并行计算,所以可以实时。但由于所基于的局部窗口视差相同的
假设在很多情况下并不成立导致匹配效果较差。

(3)半全局立体匹配算法SGM
综合上述局部和全局算法的优缺点,半全局算法依旧采用全局框架,但是在计算能量函数最小化的步骤
时使用高效率的一维路径聚合方法来代替全局算法中的二维最小化算法,使用一维最优来近似二维最优,得到的视差图在效果上和全局算法没有太大的差别,但是算法效率却有非常大的提升。

双目立体视觉笔记(三)三角测量、极线校正相关推荐

  1. 双目立体视觉笔记(二)

    系统校准 为了能利用立体视觉系统的视差计算三维深度信息,必须首先设法得到立体视觉系统的以下信息: (1)相机的内部参数.包括各相机的焦距.光心及畸变模型等. (2)相机的外部参数.包括各相机坐标系与世 ...

  2. 双目立体视觉:三(空间直线坐标,立体图像校正)

    双目的一些推导 比如:基线.视差这些在我之前的博客有单独介绍的,这里就不做详细说明了 现在问个问题,我们在应用双目相机时,最想看到两个相机处于什么状态呢? 相机内参相同.光轴平行.x轴重合.两个相机y ...

  3. 双目立体视觉 I:标定和校正

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Ali Yasin Eser 编译:ronghuaiyang(AI 公园) 导读 双目立体校正和 ...

  4. 结构光、双目、ToF——三种3D技术对比

    本文虽然命名为对比文档,但是对比意义不是特别强烈的内容仍不在少数--如三种3D技术的误差等部分--换言之,本文旨在通过对比的形式对三种3D技术的特点和特性进行总结.资料主要来自于网络,部分相关参考文献 ...

  5. 关于双目立体视觉的三大基本算法及发展现状的总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热 ...

  6. sgbm算法_关于双目立体视觉的三大基本算法及发展现状的总结

    作者:何文博 来源:公众号 @3D视觉工坊 链接:关于双目立体视觉的三大基本算法及发展现状的总结 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热"是因为双目立体视觉有着及 ...

  7. 关于双目立体视觉的三大基本算法SAD、SSD、SGBM及发展现状的总结

    双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热"是因为双目立体视觉有着及其广阔的应用前景,且随着光学.计算机科学等学科的不断发展,双目立体技术将不断进步直到应用到人类生活 ...

  8. python双目三维重建_OpenCV+OpenGL 双目立体视觉三维重建

    0.绪论 这篇文章主要为了研究双目立体视觉的最终目标--三维重建,系统的介绍了三维重建的整体步骤.双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维 ...

  9. 双目立体标定与极线校正【双目立体视觉几何】

       在这篇博文中,我们来了解一下立体标定的过程.双目相机各自经过相机标定后,该如何把两个相机统一起来,获得物体三维信息呢?    那么在双目立体视觉中,通过把左右相机平面旋转到一个平面内,且行对齐, ...

最新文章

  1. 任意1-10中的4个数字,使用加减乘除计算得出24结果的可能组合(java版),很多人小时候都玩过...
  2. 真我闪博,闪靓自我!
  3. 语言 重量计算_R语言 第五章 高级绘图工具(4)
  4. KVM 虚拟化环境安装
  5. html5 hgroup,HTML5 hgroup 标签
  6. 由塔科马大桥事件 谈软件架构
  7. app版本升级的测试点
  8. java color类 蓝色_java color类简介
  9. 台哥算法练习 - 自己写的一个LinkedList
  10. 计算机应用基础全套课件图文,计算机应用基础教程(全套课件)综述.ppt
  11. 陀螺仪传感器与方向传感器的区别
  12. Postman连接失败 解决方法
  13. JXT查询数据库导入到Execl
  14. Python3 微信支付(小程序支付)V3接口
  15. 从零开始足球战术分析
  16. 意想不到的前端三个小妙招
  17. Docker安装配置Redis最全教程
  18. Java-IO-字符流
  19. 音频格式简介和PCM转换成WAV
  20. 企业微信可以统计加班时长吗?如何查看?

热门文章

  1. 中小学生相关计算机课程,中小学生计算机教学计划
  2. 智能会议需要哪些设备,智能会议和传统会议有何不同?
  3. js拼接字符串时数据类型的隐式转换
  4. 孔松(信通院)-数字化时代云安全能力建设及趋势
  5. 打通深度学习的“任督二脉”——入门必备
  6. 四臂螺旋天线的移相功分网络理论分析(一)
  7. 纳入存款准备金缴存基数的保证金存款
  8. swift开源项目精选(已经造好的轮子)
  9. ORACLE根据日期获取季度,并获取季度的第一天,以及季度的第一个月
  10. panel 相关的零碎注意事项