平面扫描(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. LSTM模型与前向反向传播算法
  2. 假设写一段代码引导PC开机这段代码是 ? Here is a tiny quot;OSquot; :-D
  3. 【译】LXC and LXD: Explaining Linux Containers
  4. 我在微信上大学:如何正确理解指针和结构体指针?
  5. 为了实现在线库的复杂查询,你还在双写吗?
  6. ECCV18|人脸对齐与跟踪如何克服遮挡、姿态变化带来的特征点跳变?
  7. 安全应对MySQL攻击
  8. c语言学习-将一个2*3的矩阵转置为3*2的矩阵
  9. 笔记本电脑电池怎么拆_笔记本电脑光驱位置加装机械硬盘,应该知道的事
  10. RDMA相关的技术网站
  11. 重装64位WIN7之后再装KUBUNTU遇到的问题
  12. 深度linux64位系统下载,深度 Deepin 15.9 操作系统下载
  13. 计算机进入vga模式,VGA模式是什么,怎么进入VGA模式
  14. 【学习笔记】利用API进行数据采集或获取
  15. Ubuntu16.04 (ROS)下通过CAN分析仪(USBCAN/CANalyst-II)调试无人车助力转向电机(1)
  16. 李彦宏创业语录中我喜欢的几句
  17. 股票自选股基本函数大全-8
  18. Python输出所有水仙花数(3种方法)
  19. vue 判断字符串是否是英文_vue rules以及原生js判断字符串是否为正整数(正小数)...
  20. 【论文笔记】《基于深度学习的中文命名实体识别研究》阅读笔记

热门文章

  1. DOS下进行文本编辑的方法
  2. 鲁大师2015怎么检测显示器|显示器质量测试方法
  3. Windows10下删除需TrustedInstaller权限的目录或文件
  4. LED背光十大领先技术优势
  5. openjudge 1.7.18 验证子串
  6. Android 飞机大战详解与感悟
  7. HTML5期末大作业:网购网站设计——品优购(4页) HTML+CSS+JavaScript 大学生网购网页设计模板代码 学生简单购物网站设计成品
  8. Android感应器Sensor的使用
  9. 文秘与计算机应用,18文秘02李荧 随着现代科学技术的发展,计算机已经
  10. 性能测试的各种监控工具大全