平面扫描(plane-sweeping)介绍:

plane-sweeping算法在三维重建中非常重要,其特别适合并行计算,因此通过GPU加速后可以使复杂的稠密重建达到实时。大多实时三维重建的深度图生成部分采用plane-sweeping算法。而且plane-sweeping不用rectify,甚至radial distortion的图像也可以用。研究semantic 3D的Christian Hane直接利用鱼眼相机的图像planes-weeping也得到很好的效果。可以说plane-sweeping和patch-match为三维重建实时和非实时深度图估计的主要算法。
最初由《Multi-resolution real-time stereo on commodity graphics hardware》提出,后由《Real-time Plane-sweeping Stereo with Multiple Sweeping Directions》添加多面扫面用在实时三维重建中。本文也主要参考这两篇文章。

算法描述:

1、basic plane-sweeping algorithm

基本原理

如下图平面扫面算法将深度范围内分为一个个平面,深度范围可以由很多方法获得。如果平行平面足够密集,空间被分割的足够细,那么,空间物体表面上的一点M 一定位于众多平行平面中的其中一个平面 上,同时,所有能可以看到 M 的摄机看点 M 必然看到的是同一个颜色,也就是物体在点 M 本来的颜色。假设现在又有另一个点 M’,这个点也在一个平面上,假定如同 M 一样也在 其平面上,但是他并不位于任何可见物体的表面上。这样的点很有可能投影到每个可见摄像机上,并不是同样的颜色(图上两个黑点)。

单应矩阵(homograph)

知道了基本原理后就是用数学建模。plane-sweeping利用平面与图像对应点的关系,因此采用Homography表述图像点之间的映射。

如上图,若平面 ∏m=[nTm−d],m=1,2....M ∏ m = [ n m T − d ] , m = 1 , 2.... M \prod_m=[n^T_m-d],m=1,2....M,机投影矩阵为 Pk=Kk[RTk−RTkCk],k=1,2...N P k = K k [ R k T − R k T C k ] , k = 1 , 2... N P_k=K_k[R^T_k-R^T_kC_k],k=1,2...N, Kk,R,T K k , R , T K_k,R,T 分别是内参、旋转和平移矩阵。参考图像 Pref=Kk[I3×30] P r e f = K k [ I 3 × 3 0 ] P_ref=K_k[I_3\times3 0],那么平面上一点在参考图像和图像 Pk P k P_k 的投影点对应关系为: x′=Hx,H x ′ = H x , H x'=Hx,H 即为Homograph:

Cost function

有了点之间的表述关系,接下来就是找到cost function对其优化。由于噪声的影响,不能只利用两点颜色相同,需利用改点的窗口信息一块进行比较因此cost function可以表述为:

W W <script type="math/tex" id="MathJax-Element-14">W</script>为以x,y为中心的窗口,$\beta为增益因子,计算光照变化后转换为增益因子。
当然更具鲁棒的聚合方法也可以用来生成cost,如:ZNCC等。在得到了cost function后只需计算个点最小值即为对应的平面:

有了对应平面该点的深度如下计算:

2、Multiple Sweeping Directions

由于采用基于窗口的匹配方法,而窗口内像素与中心像素极有可能不在一个平面,因此利用上述方法会干扰中心像素的匹配。
这里也提一下《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》这篇论文,这篇在patch match方法中比较出名。同样解决原来基于窗口的匹配方法具有不连续性(大多呈阶梯状),这篇论文抛弃以前思想,用photo consistency直接估计窗口内平面方程,有了平面方程直接带入该点坐标即是深度值。后来北京自动化所的申抒含将其引入3d重建中《Accurate Multiple View 3D Reconstruction Using Patch-Based Stereo for Large-Scale Scenes》,该篇论文深度图估计大体基于上篇,针对大规模三维重建做了修改,如:将平面法向量用球坐标表示,图像间的像素映射用homograph表示。由于不像双目只有两幅图像,3d重建中可以利用多图像进行深度图融合,所以对上篇论文的深度估计做了三个简化,以减小估计深度图的时间。openmvs深度图估计便是用的这篇论文方法,效果非常好。《Tanks and Temples: Benchmarking Large-Scale Scene Reconstruction》这个数据集对现有的三维重建开源算法做了比较,目测openmvs比后起之秀colmap效果要好。但我在利用openmvs重建时,图片过多总会出现错误,github也有人提问,作者貌似也无能为力。
以上几种算法其实思想相同,下图一目了然。所以三维重建的深度图估计无论实时还是非实时其实主要算法相同。

思想搞明白了讲Multiple Sweeping Directions也简单了,无非就是求取平面方程的方法不同。Multiple Sweeping Directions主要是基于房子都是方方正正的假设,如下图(原论文没给图,只好灵魂画图师亲自来了)。

首先将从SFM获得的三维点向重力方向投影至与重力正交的平面上,处于同一平面的三维点投影下去再一条直线上,直线间又是垂直关系,因此可以得到下面投影图像(a)。

通过最小化信息熵可以得到各平面的方向。得到平面方向只需按不同方向进行basic plane-sweeping即可。
参考文献:

《Real-time Plane-sweeping Stereo with Multiple Sweeping Directions》
《A Space-Sweep Approach to True Multi-Image Matching》,plane sweeping开创性文章
colmap Dense 3D Geometry estimation
《PatchMatch Stereo - Stereo Matching with Slanted Support Windows》
《Accurate Multiple View 3D Reconstruction Using Patch-Based Stereo for Large-Scale Scenes》
《Semantic 3D Modeling from Images with Geometric Priors》
《多视图立体匹配三维重建方法》

三维重建之平面扫描算法(Plane-sweeping)相关推荐

  1. 基于正向扫描的并行区间连接平面扫描算法(IEEE论文)

    作者: Panagiotis Bouros ∗ Department of Computer Science Aarhus University, Denmark pbour@cs.au.dk Nik ...

  2. Plane Sweeping | 平面扫描

    输入:一系列经过校准的照片以及拍摄相机对应的投影矩阵 假设(定义):所有物体只有漫反射,有一个虚拟相机cam x,定义一个近平面和一个远平面,在这之间物体被一系列密集的平行平面划分 核心思想 如果平行 ...

  3. (医学三维重建)MATLAB体绘制算法:多层面重建(MPR)

    (医学三维重建)MATLAB体绘制算法:多层面重建(MPR) 算法原理 代码实现 测试结果 其他 by HPC_ZY 算法原理 体绘制中比较特殊的一种,因为它的输出是各种切面. 就好比用刀切开一个物体 ...

  4. 操作系统 先来先服务算法(FCFS)、最短寻到时间优先算法(SSTF)、扫描算法(电梯算法,SCAN)、循环扫描算法(CSCAN)

    操作系统 先来先服务算法(FCFS).最短寻到时间优先算法(SSTF).扫描算法(电梯算法,SCAN).循环扫描算法(CSCAN)和N步扫描算法(NStepScan)的程序实现 复制到本地即可运行 # ...

  5. 操作系统之文件管理:9、磁盘的结构与磁盘调度算法(先来先服务FCFS、最短寻找时间优先SSTF、扫描算法SCAN、循环扫描算法C-SCAN、LOOK调度算法、C-LOOK调度算法)

    9.磁盘的结构 磁盘结构 思维导图 磁盘.磁道.扇区.盘面.柱面 如何在磁盘中读/写数据? 磁盘的物理地址 一次磁盘读/写操作需要的时间 磁盘调度算法 1.先来先服务FCFS 2.最短寻找时间优先SS ...

  6. 最短寻道时间优先算法c语言程序,操作系统先来先服务、最短寻道时间优先(SSTf)、扫描算法(SCAN)、循环扫描算法(CSCAN)的c++实现.doc...

    先来先服务(FCFS).最短寻道时间优先(SSTf).扫描算法(SCAN).循环扫描算法(CSCAN) 最后有运行截图. #include #include #include #include int ...

  7. 求解VRP问题的节约里程法、sweep扫描算法和λ互换法

    第05章  求解容量约束车辆路径问题的启发式算法 Edited by Jiannywang@163.com 目  录 5.1 节约里程法. 1 5.1.1 C-W节约算法简介. 1 5.1.2 C-W ...

  8. 裁切平面(clipping plane)

    裁切平面(clipping plane) 示例 HTML 更多有趣示例 尽在知屋安砖社区 示例 HTML <!DOCTYPE html> <html lang="en&qu ...

  9. 轮廓线扫描算法:Theo Pavlidis' Algorithm

    轮廓线扫描算法:Theo Pavlidis' Algorithm 在介绍Pavlidis算法之前,先介绍个网址:http://www.imageprocessingplace.com/download ...

最新文章

  1. com.sun.crypto.provider.SunJCE
  2. 我的7天=玩2天+窝5天
  3. ITK:使用Viola Wells互信息执行多模式注册
  4. RMAN的一些术语解释
  5. jfinal后台获取权限树,以供前台展示
  6. JavaScript 的call 与 apply
  7. Javascript第五章innerHTML/innerText/创建新节点元素添加内容第八课
  8. ARM给服务器厂商更多创新机会
  9. NoSQL数据库的安装和使用
  10. Arduino--电容式土壤湿度传感器使用及原理
  11. 汇编程序debug的使用完整使用
  12. win7升级自带ie8到ie11版本(在不能联网的状态下)
  13. ads软件是什么?有什么用?怎么用?
  14. labwindows 多线程
  15. php mmorpg,MMORPG中的组队设计
  16. css中关于旋转属性trtransform: rotate影响文字轻微变形的解决办法。
  17. VVC代码阅读(2)compressGOP函数(1)
  18. 柳传志:想过得富有光鲜就要知道为啥穷
  19. Android触摸屏突然没反应了
  20. 为BlueLake主题增加自定义icon图标

热门文章

  1. 一、肺癌检测-项目简介
  2. 辩论会写数学作业使用计算机,作业辩论赛作文600字
  3. tcpdump工具详解
  4. Dota2设置英文配音中文界面
  5. Spring2.5+Struts2+Hibernate3整合之四
  6. 《selenium2自动化测试实战-基于python语言》第二遍
  7. 2021年R2移动式压力容器充装考试题及R2移动式压力容器充装操作证考试
  8. MATLAB中果蝇味道浓度判定函数,果蝇优化算法的分析.PDF
  9. android爱哥的日历,安卓版人生日历日子使用方法
  10. Android编程心得---捕捉Home键事件的完美解决方法