稠密点云重建MVS——基于多视角深度图像

  • 前言
  • 一、整体流程*
  • 二、算法原理
    • 1.全局视角图像序列选取方法
    • 2.局部视角图像序列选取方法
    • 2.深度与法向量优化算法
  • 基本概念
    • 极线搜索——查找图像中某个像素点在另一帧图像的对应像素点
    • 光度一致性——衡量两个模板的相似程度

前言

稠密点云重建主要介绍利用多视角的RGB图像重建三维模型的方法,主要包括三种:基于体素、基于深度图像、基于空间patch。
本节将介绍基于深度图像的三维模型重建算法。利用多帧RGB图像计算获得深度图像,实现三维模型重建。
(为了保证文章的完整性,一些简单的基本概念在文末给出,如有需要可以参照)


一、整体流程*

输入多帧同一场景不同视角RGB图像,选取其中一帧或几帧图像作为参考图像,利用输入的多帧图像恢复参考图像的深度和法向量信息,获得参考图像的深度图和法向量图。最后对恢复的参考图像进行融合。
(怎么从多帧RGB图像中恢复其中某几帧图像的深度和法向量信息呢?要知道一帧图像里包含了非常多的像素,要对绝大部分像素的深度与法向量进行恢复看起来似乎不可能。其实大体思想是:对输入的图像进行稀疏3D点云重建,获得特征点的三维信息,只要将这些点投影到参考图像上,就可以恢复这些特征点在参考图像上对应像素的深度信息,那么接下来就是利用区域生长的思想以这些像素点为中心,确定优化方法,逐步将他们周围点的信息恢复)

1、预处理部分

  • 稀疏3D点云重建(SFM)
    检测输入的每帧图像特征点,并进行特征点匹配,通过匹配的特征点恢复相机的内外参数(相机内参:焦距、径向畸变系数,相机外参:相机的位姿R,t),重建特征点的空间3D坐标。
  • 全局视角图像序列选取
    从输入图像中选一帧作为参考图像。通过一些指标在输入图像中筛选出符合要求的图像。这里我们希望筛选出来的图像和参考图像,它们相邻图像视场之间的拍摄视场角合适(相邻图像视场角太小会导致基线短,重建误差大,视场角太大则两张图差异太大也难以重建成功)。选取方法详细介绍见本文第二部分算法原理。

    2、深度图像生成
  • 种子点选取
    从获得的3D点云中,筛选出那些可以投影到参考图像上的3D点,并且该点能投影到至少1帧其他全局视场图像(有些点按照投影模型无法投影到参考图或其他图的成像面上)。
  • 种子点深度与法向量信息恢复
    将3D点投影到参考图像上,以3D点到参考图像相机坐标系原点的距离为投影点像素初始深度,3D点到相机坐标系原点的方向为初始法向量。
    上面获得了像素点的深度与法向量的初始值,我们需要对这些像素点的深度和法向量进行优化。以这些投影像素点为中心建立正方形模板,将每个模板里的所有像素投影到空间3D坐标中,以一个模板为例,再次把一个模板里的3D点投影到其他视角的图像上获得投影的像素点,优化像素点的深度与法向量信息使得在参考图像上的模板与在其他视图上的模板投影差异尽可能小。详细优化算法见本文第二部分算法原理
    为什么要建立模板,只是为了求它的法向量吗?其实为了衡量参考图像上的这个像素点与其他图像上像素点的相似性,仅凭一个像素点难以很好的表征,所以才引入了模板来表征中心像素点区域的特征,而参考图像与其他图像的模板特征的差异是优化深度和法向量信息的关键。
  • 其余像素点深度与法向量信息恢复
    计算种子点优化后结果的置信度,参考下文基本概念光度一致性——衡量两个模板的相似程度,按照置信度高低建立队列,对队列中的点进行优化,并将这些点的周围点加入队列中。如下图左图所示,把黄色种子点深度和法向量值赋给相邻的上下左右四个像素点,作为他们的深度和法向量初值。并将这些点加入队列进行优化。
    如下图右图所示,当前优化完的种子点(绿色)四周有已经被优化过的点(红色),和未被优化过的点(蓝色),比较绿色点与红色点的置信度大小,如果绿色点的置信度高,则把绿色点的信息赋给红色点。

    3、三维稠密点云
    根据深度图每个像素的深度,利用相机的逆投影矩阵可以将深度像素点投影到三维空间,获得3D点云。思路很简单,具体实现可以参考一些其他文章。

二、算法原理

1.全局视角图像序列选取方法

2.局部视角图像序列选取方法

2.深度与法向量优化算法


基本概念

极线搜索——查找图像中某个像素点在另一帧图像的对应像素点

参考图上某个像素点的空间3D点必定在该点与相机中心的连线上。那么该空间3D点在另一帧图像上的成像像素必然是3D点与相机2中心的连线与图像相交处。所以如果我们需要搜索参考图像上的某个像素点与另一帧图像上哪个像素点是同一个点,只需要搜索下图中的极线(Epipolar line)即可。
根据对极几何原理我们知道极线的表达式计算方法:

光度一致性——衡量两个模板的相似程度

好了,上面极线搜索说到可以在另一帧图像上极线经过的像素范围内,搜索参考图像的对应点,那么,当我们查找到了一对对应点,应该用一个指标来衡量这个查找的可信程度(置信度),这里我们以参考图像上的这个像素点和找到的另一个像素点为中心建立分别一个模板,两个模板越相似,则这对点越有可能是正确的对应点。这里我们引入光度一致性来衡量两个模板的相似程度,这里我们常用归一化互相关(NCC)来衡量他们的相似程度。

稠密点云重建MVS——基于多视角深度图像相关推荐

  1. ORB-SLAM2稠密点云重建:双目室外[1]

    接上一篇. 步骤4:读取每帧位姿信息,初始化点云 类似之前的RGBD,先在XCTool.h中加入XCKITTIKey类读取每帧信息: class XCKITTIKey { public:double ...

  2. ORB-SLAM2稠密点云重建:双目室外[2]

    接上一篇. 上一篇中,看起来我们基本完成了重建.但是有很多问题: 问题1:如果你真正跑起来(00数据集),你会发现点云没有正确拼接.这是点云化的部分有问题. 问题2:跑起来,你会发现很乱,除了问题1, ...

  3. 基于图像的三维模型重建——稠密点云重建

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:梦寐mayshine 链接:https://zhuanlan.zhihu.com/p/13159 ...

  4. RSE2020/云检测:基于弱监督深度学习的高分辨率遥感图像精确云检测

    RSE2020/云检测:Accurate cloud detection in high-resolution remote sensing imagery by weakly supervised ...

  5. 超分辨率重建 matlab,基于Matlab的多图像超分辨率重建算法

    [实例简介] 多图像超分辨率的实现主要就是将具有相似而又不同却又互相补充信息的配准影像融到一起,得到非均匀采样的较高分辨率数据,复原需要亚像素精度的运动矢量场,然而它们之间的运动模型估计精确与否直接影 ...

  6. PCL点云与深度图像

    PCL点云与深度图像 1 RangeImage概念及相关算法 1.1 深度图像简介 1.2 PCL中RangeImage的相关类 2 从一个点云创建一个深度图像 3 从深度图像中提取边界 4 点云到深 ...

  7. 如何从点云创建深度图像,看这篇你就懂了(附详细代码)

    作者I Roar冷颜@CSDN 编辑I 3D视觉开发者社区 前言 目前,深度图像的获取方法有:激光雷达深度成像法.计算机立体视觉成像.坐标测量机法.莫尔条纹法.结构光法等.针对深度图像的研究重点主要集 ...

  8. PCL点云生成深度图像

    https://www.cnblogs.com/li-yao7758258/p/6476046.html (1)点云到深度图与可视化的实现 区分点云与深度图本质的区别 1.深度图像也叫距离影像,是指将 ...

  9. invalid floating point operation什么意思_Point-MVSNet:基于多视角的点云重建网络

    Point-Based Multi-View Stereo Network是一篇点云重建领域的文章,其工作内容为通过输入多张不同角度的图片,提取不同的点云特征,再进行融合,从而生成最终的点云. 1.介 ...

最新文章

  1. leetcode解题报告:198 House Robber
  2. (转)一个vue路由参数传递的注意点
  3. maven The method must override a superclass method
  4. 4条实用小建议,送给初入NLP领域的你
  5. hadoop3.0新特性介绍
  6. 好朋友,记得要经常联系
  7. spring异常:Could not resolve placeholder
  8. WPF ImageButton
  9. 服务器系统2008还原,Windows2008系统克隆——GHOST备份还原系统
  10. 在计算机检索中 有哪些方法能缩小,使用“或OR”运算将同义词连接起来可以缩小检索。()...
  11. 嵌入式Linux红外遥控,嵌入式系统中的红外遥控附加功能,嵌入式系统,红外遥控,发射...
  12. Tecplot新手进阶--使用tecplot宏操作批量处理数据输出图片(详细步骤)
  13. 台式计算机搜索不到无线信号,win7电脑搜不到无线信号怎么办_win7找不到无线网络怎么解决-win7之家...
  14. sysbench和lua的简单研究
  15. 李沐的动手学深度学习环境配置
  16. sparc处理器开发工具_SPARC处理器启动代码的分析与编程
  17. oracle create数据库,oracle手工创建数据库全纪录
  18. 高级软件工程第四次作业:东理三剑客团队项目
  19. matplotlib 库画云图两种方法
  20. [转] 单片机硬件设计 转载自 麦麦

热门文章

  1. STO解析:从STO概念到STO生态圈
  2. shell编程计算1-1000中所有3或5的倍数之和
  3. 使用easyexcel进行excel的导入和导出(web)
  4. 令人生疑的Windows窗口消息WM_PAINT详解
  5. UI动效基础:AE动效表现课
  6. Ubuntu虚拟机ns_error_failure 0x80004005错误
  7. 当初这么学进程和线程就好了
  8. CF1821 E. Rearrange Brackets
  9. EXCEL线性规划方法求解鸾尾花分类
  10. Oracle常见问题问答