精华内容
下载资源
问答
  • 三维重建 网格交叉点的提取 MATLAB程序语言编写的完整程序 可以运行 带图片
  • 针对三维重建网格模型经常出现异常缺失孔洞的问题,提出一种缺陷孔洞自动识别与孔洞区域细节特征保持的曲面修复方法。首先对缺失区域的上下文及轮廓曲线进行异常检测以判断是否为缺陷孔洞, 确认为缺陷孔洞后对孔洞...
  • 这是我之前在泡泡机器人上翻译的文章,放在这里做个备份,原文链接:https://www.sohu.com/a/330972284_715754一、摘要在这篇文章中,我们重点研究基于RGB视频的三维物体网格重建。通过同时构建基于多视角几何的...

    这是我之前在泡泡机器人上翻译的文章,放在这里做个备份,原文链接:https://www.sohu.com/a/330972284_715754

    一、摘要

    在这篇文章中,我们重点研究基于RGB视频的三维物体网格化重建。通过同时构建基于多视角几何的光度约束和基于先验形状信息的约束,结合了多视图几何和深度学习算法的优势。约束模型是通过建立三维物体不同视角图像之间的对准误差构建的。我们的模型可以在不使用深度信息和隐含信息的情况下优化三维物体形状参数。更进一步,我们通过对一个特定视角进行栅格化,避免了光度梯度为零的问题。最后,我们基于所提出的方法,分别使用人工生成视频和实际物理世界视频重建了三维网格物体,这在传统的网格物体重建网络里是做不到的,即便在表面重建方法中也需要很多的后处理才能做到。

    二、主要贡献

    1、通过使用2D光度约束,结合了光度约束和先验模型的优势。

    2、提出了用于网格优化的光度约束模型,并且通过对特定视角网格化避免了梯度为零的问题。

    三、主要算法

    1、整体思路

    算法的整体思路如下图所示。先通过深度编码器生成先验形状对应的三维物体,对三维物体进行网格化,网格采用三角形,然后对三维物体进行多视角采样,每次采样对应一张RGB视频里的图像,根据三维物体模型计算三角形网格在每张图片里的2D投影,和图片里观察到的物体图像进行匹配,匹配误差作为损失函数,反向去优化物体形状参数和每张图片对应的相机真实位姿。此处需要注意的是,每次的优化是对网格里的点采样优化,这就需要保证,所选取的网格在每次用来匹配的两张图片之间都是完全可观测的,即不能有遮挡。

    d15960f2-d814-eb11-8da9-e4434bdf6706.png

    2、构建约束方程

    d85960f2-d814-eb11-8da9-e4434bdf6706.png

    其中a和b分别代表两个视角,方程中第二项是正则化项,第一项是图像匹配误差,具体内容如下

    da5960f2-d814-eb11-8da9-e4434bdf6706.png

    3、特定视角网格化

    这一步的目的主要是因为只使用a和b两个视角进行图像对准,会造成光度梯度为零。此处特定视角网格化是构建一个第三视角,a和b视角观测到的图像先投影到该视角对应的图片上去,然后再进行误差计算。该思路通过下可以看的更直观。

    dd5960f2-d814-eb11-8da9-e4434bdf6706.png

    四、实验

    作者把本文方法和另一个端到端学习3D网格化重建的方法AtlasNet进行了对比,对比效果如下图所示。

    df5960f2-d814-eb11-8da9-e4434bdf6706.png

    为了定量分析,作者通过和ground-truth进行对比,得到了下表, 从表中可以看出,本文所提出的方法,在平均精度上具有明显优势。

    e15960f2-d814-eb11-8da9-e4434bdf6706.png

    五、结论

    本文提出了一种基于RGB视频进行3D网格化重建的优化方法,该方法通过构建先验物体不同视角的视觉投影,计算各个投影之间的对准误差来优化物体形状参数,这种方法能够结合多视角几何和深度学习各自的优势。实验证明,这种方法取得了很好的重建精度。

    展开全文
  • 提出一种基于网格点投影灰度相似性的双目立体视觉的三维重建新方法。首先将被测物体所在的世界坐标系划分成间距相等的矩形网格, 将网格节点作为潜在的物点投影到左右图像坐标系上, 然后根据不同深度的空间点在两幅...
  • 建设中,记录日常学习到的碎片,最后整理什么是三维重建?这里指的三维重建是基于对环境或者物体的一系列不同角度的照片,通过一系列的处理,获得环境或物体的三维模型。三维模型的表示方式点云(Point Clouds)、...

    建设中,记录日常学习到的碎片,最后整理

    什么是三维重建?

    这里指的三维重建是基于对环境或者物体的一系列不同角度的照片,通过一系列的处理,获得环境或物体的三维模型。

    三维模型的表示方式

    点云(Point Clouds)、网格(Meshes)、体素(Voxels)、Patch Clouds、Layered Models、Depth maps等。

    主要方法

    比较常见的流程是:

    提取图像特征(如SIFT、SURF等)->利用特征将图像计算图像之间的特征匹配->基于匹配的特征进行稀疏重建,得到各个图像的相机位姿和稀疏的特征点云(SfM)->基于相机位姿进行稠密重建,得到稠密点云(PMVS/CMVS)->基于点云重建网格、体素或者纹理

    常用工具

    eb3749331cee

    image.png

    VisualSFM是一个整合了特征提取、图像匹配、稀疏点云重建、稠密重建(需要单独下载CMVS/PMVS)的软件,由?开发,免费但不开源(不能用于商业用途)。基于一系列RGB图像,我们可以得到一个稠密的点云。

    PMVS/CMVS用SFM的输出作为输入,利用稀疏的特征点云、图像和对应的相机位姿来重建稠密点云。这个算法由?开发,如果你的OpenCV是build without non commercial module,采用permissive BSD license,可以用于商业目的。PMVS指的是将大的点云合理地分割、重建、拼接的过程。

    MeshLab是常用的点云、网格显示和处理软件,内置了很多3D重建算法,能够进行基于点云的网格重建、简化等。

    COLMAP是一个开源的软件,采用New BSD license,因而可以用于商业目的。类似于VisualSFM的前半部分,COLMAP能够用于从图像中得到稀疏特征点云和相机位姿。如果有CUDA的话,COLMAP也能用于稠密点云重建和表面重建。

    https://colmap.github.io

    Bundler是稀疏重建工具,然而效果可能不如VisualSFM。

    SfM(Structure from Motion)

    SfM指的是给出

    math?formula=n个固定的三维空间点的

    math?formula=m张图像:

    math?formula=%5Cmathbf%7Bx%7D_%7Bij%7D%3D%5Cmathbf%7BP%7D_i%5Cmathbf%7BX%7D_j%2C%20%5Cquad%20i%3D1%2C...%2Cm%2C%20j%3D1%2C...%2Cn

    math?formula=m%5Ctimes%20n个对应关系

    math?formula=%5Cmathbf%7Bx%7D_%7Bij%7D中估计出

    math?formula=m个投影矩阵

    math?formula=%5Cmathbf%7BP%7D_i

    math?formula=n个三维空间中的点

    math?formula=%5Cmathbf%7BX%7D_j

    SfM问题中的不确定性

    如果我们对场景进行一个变换

    math?formula=%5Cmathbf%7BQ%7D,同时对相机矩阵进行其逆变换

    math?formula=%5Cmathbf%7BQ%5E%7B-1%7D%7D,则图像会保持不变:

    math?formula=%5Cmathbf%7Bx%7D%3D%5Cmathbf%7BPX%7D%3D(%5Cmathbf%7BPQ%7D%5E%7B-1%7D)(%5Cmathbf%7BQX%7D)

    因而SfM问题中会存在不确定性,通过一些约束可以减小不确定性。

    这些不确定性可以分为以下几种

    。。。

    eb3749331cee

    Workflow of SfM

    相机的内参矩阵和外参矩阵

    我们记一个点在世界坐标系(WCS,World Coordinate System)中的坐标为

    math?formula=%5Cmathbf%7BX%7D_w%3D%5Bx_w%2Cy_w%2Cz_w%5D%5ET,相机坐标系(CCS,Camera Coordinate System)的坐标为

    math?formula=%5Cmathbf%7BX%7D_c%3D%5Bx_c%2Cy_c%2Cz_c%5D%5ET,其在相机图像中的投影(ICS,Image Coordinate System)中的坐标为

    math?formula=%5Cmathbf%7BX%7D%3D%5Bu%2Cv%5D%5ET。则内参矩阵

    math?formula=%5Cmathbf%7BK%7D表示

    math?formula=%5Cmathbf%7BX%7D_c

    math?formula=%5Cmathbf%7BX%7D之间的关系:

    math?formula=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20u%5C%5C%20v%5C%5C%201%20%5Cend%7Bmatrix%7D%5Cright%5D%3D%5Cfrac%7B1%7D%7Bz_c%7D%20%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20f_x%20%260%26c_x%5C%5C%200%26f_y%26c_y%20%5C%5C0%260%261%20%5Cend%7Bmatrix%7D%5Cright%5D%5Ccdot%20%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20x_c%5C%5C%20y_c%5C%5Cz_c%20%5Cend%7Bmatrix%7D%5Cright%5D

    外参矩阵则指的是相机坐标系和世界坐标系之间的欧氏变换矩阵,包括平移矩阵

    math?formula=%5Cmathbf%7Bt%7D和旋转矩阵

    math?formula=%5Cmathbf%7BR%7D

    math?formula=%5Cmathbf%7BX%7D_c%3D%5Cmathbf%7BR%7D%5Cmathbf%7BX%7D_w%2B%5Cmathbf%7Bt%7D

    写成增广形式:

    math?formula=%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20x_c%5C%5C%20y_c%5C%5C%20z_c%5C%5C1%20%5Cend%7Bmatrix%7D%5Cright%5D%3D%20%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR%7D%20%26%5Cmathbf%7Bt%7D%5C%5C%20%5Cmathbf%7B0%7D%261%20%5Cend%7Bmatrix%7D%5Cright%5D%5Ccdot%20%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%20x_w%5C%5C%20y_w%5C%5C%20z_w%5C%5C1%5Cend%7Bmatrix%7D%5Cright%5D

    则外参矩阵

    math?formula=%5Cmathbf%7BA%7D可以表示为:

    math?formula=%5Cmathbf%7BA%7D%3D%20%5Cleft%5B%20%5Cbegin%7Bmatrix%7D%5Cmathbf%7BR%7D%20%26%5Cmathbf%7Bt%7D%5C%5C%20%5Cmathbf%7B0%7D%261%20%5Cend%7Bmatrix%7D%5Cright%5D

    于是从世界参考系到图像坐标系的转化可以用一个投影矩阵

    math?formula=%5Cmathbf%7BP%7D来表示:

    相机的基础矩阵(Fundamental Matrix)和本质矩阵(Essential Matrix)

    基础矩阵

    math?formula=%5Cmathbf%7BF%7D

    对于两个固定的相机,那么存在一个

    math?formula=3%5Ctimes%203的矩阵

    math?formula=%5Cmathbf%7BF%7D,对于任意一个三维空间点

    math?formula=%5Cmathbf%7BX%7D_w,若其在两个相机图像参考系中的坐标分别为

    math?formula=%5Cmathbf%7BX%7D_i%3D%5Bu_i%2Cv_i%2C1%5D%5ET

    math?formula=%5Cmathbf%7BX%7D_j%3D%5Bu_j%2Cv_j%2C1%5D%5ET,则有

    math?formula=%5Cmathbf%7BX%7D_i%5E%7B-1%7D%5Cmathbf%7BF%7D%5Cmathbf%7BX%7D_j%3D0

    基础矩阵只由两个相机的内参(

    math?formula=%5Cmathbf%7BK%7D%2C%5Cmathbf%7BK'%7D)和相互变换关系(

    math?formula=%5Cmathbf%7BR%7D%2C%5Cmathbf%7Bt%7D)决定,确定了两个相机的对极几何,可以将一个相机图像上的一点转化成另一个相机图像上的一条极线。

    八点法计算基础矩阵

    单凭

    math?formula=%5Cmathbf%7BX%7D_i%5E%7B-1%7D%5Cmathbf%7BF%7D%5Cmathbf%7BX%7D_j%3D0这个关系,我们是无法确定基础矩阵的,因为乘上任何一个常数等式仍然成立,因而我们通常让

    math?formula=f_%7B33%7D%3D-1。这样基础矩阵还有八个自由度,只需要再有八个点对就可以确定基础矩阵(线性无关的情况下)每个点对会得到一个如下的方程:

    math?formula=uu'f_%7B11%7D%2Bvu'f_%7B12%7D%2Bu'f_%7B13%7D%2Buv'f_%7B21%7D%2Bvv'f_%7B22%7D%2Bv'f_%7B23%7D%2Buf_%7B31%7D%2Bvf_%7B32%7D%3D1

    实际上我们会希望用更多的信息来计算基础矩阵,可以用更多的点,随后对超定方程组计算最小二乘解,也或者用RANSAC算法用其他的点进行验证,取最好的结果。

    本质矩阵

    math?formula=%5Cmathbf%7BE%7D

    本质矩阵被定义为

    math?formula=%5Cmathbf%7BE%7D%3D%5Cmathbf%7BK'%7D%5ET%5Cmathbf%7BF%7D%5Cmathbf%7BK%7D,只与两个相机间的相互变换(

    math?formula=%5Cmathbf%7BR%7D%2C%5Cmathbf%7Bt%7D)有关。我们可以通过SVD分解等方法算出

    math?formula=%5Cmathbf%7BR%7D,和

    math?formula=%5Cmathbf%7Bt%7D的方向,这也被用于SfM的一种方法。

    基础矩阵、本质矩阵与SfM

    一方面,基础矩阵可以用来验证两幅图像间的特征匹配;另一方面,可以通过基础矩阵推算出本质矩阵,并以此使用序惯的方式将所有图像对应的相机位姿结合到一起。

    序惯方法

    极线约束:利用本质矩阵可以算出一个相机位姿相对于另一个相机位姿的旋转和平移方向,利用一个额外的确定的点,我们便可以确定平移的距离。这样利用之前的相机的位姿能够确定新的相机位姿。

    Resection:利用已经重建过的3D点来确定新的视野的位姿。

    融合局部重建碎片:每两三个视野进行局部重建,然后融合在一起。

    MVS(Multi-View Stereo)

    广义上的多视几何指的是利用同一个物体或者场景的一系列照片计算出它的一个3D形状的某种表示。

    基于RGB-D相机的的三维重建

    除了图像,还能感知距离的相机被称为RGB-D相机。RGB-D相机常见的技术包括ToF(Time of Flight,飞时原理)、Stereo(双目)、结构光等。常见的结构光相机如Microsoft Kinect、Intel RealSense等。

    RTAB Map

    RTAB Map(Real-Time Appearance-Based Mapping)是一个基于图的SLAM框架。我们也可以用RTAB Map来实现场景的稠密三维重建。RTAB Map在ROS环境下有比较好的集成,可以支持常见的RGB-D相机和IMU。

    eb3749331cee

    RTAB Map

    未完待续

    展开全文
  • 原文连接:三维模型的网格细化 原文中给出了理论和程序链接,可下载。直接查看原文即可 细分规则可以分为两个部分:一是拓扑分裂规则,主要用来描述网格每次细分之后所有顶点之间的连接关系,该过程也称为分裂;另...

            原文连接:三维模型的网格细化

            原文中给出了理论和程序链接,可下载。直接查看原文即可大笑

           细分规则可以分为两个部分:一是拓扑分裂规则,主要用来描述网格每次细分之后所有顶点之间的连接关系,该过程也称为分裂;另一个是几何规则,用来计算新顶点的几何位置信息,这一过程也称为平均。通常有两种基本的分裂方法:顶点分裂面分裂,其区别主要在于所作用的基本几何体元。

          顶点分裂是对于给定度为n的顶点i(顶点的度表示顶点所关联的边的个数),将其分裂成n个新顶点,每个顶点对应着它的一个邻面,使用该方式的细分方法称为对偶型。如果i为内部顶点,则把这些复制顶点依次相边开成一个新的n边形,称此n边形为新网格的V-面;对于内部边两个端点分裂构成的新网格称为E-面,旧网格多边形每个顶点分裂构成的新网格面与原来的网格具有相同的拓扑结构,称之为F-面。

          面分裂是在网格边和面上插入新的顶点,然后对每个面进行剖分,从而得到新的网格。使用此方法的细分方法称为基本型。


    图:

     

    注意到上述对于人脸模型进行细分后会出现不正常的控制点,这是由于模型数据源的问题,因在程序中直接使用了PSB模型检索测试库中的.off格式人脸模型。

    程序Demo下载地址:http://dl.dbank.com/c0x7hbfnu0

    PS:这篇博客是第一次用Live Writer写的,比直接在网站上写爽多了~~~!!:)


    转载于:https://www.cnblogs.com/wishchin/p/9200011.html

    展开全文
  • 基于图像的单目三维网格重建
  • 基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息。 1. 相关概念 (1)彩色图像与深度图像 彩色图像也叫作RGB图像,R...

    基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息。


    1. 相关概念


    (1)彩色图像与深度图像

    彩色图像也叫作RGB图像,R、G、B三个分量对应于红、绿、蓝三个通道的颜色,它们的叠加组成了图像像素的不同灰度级。RGB颜色空间是构成多彩现实世界的基础。深度图像又被称为距离图像,与灰度图像中像素点存储亮度值不同,其像素点存储的是该点到相机的距离,即深度值。图2-1表示深度图像与灰度图像之间的关系。

    这里写图片描述
    图2-1 深度图像与灰度图像 

     

    Fig.2-1 The depth image and gray image

    深度值指的目标物体与测量器材之间的距离。由于深度值的大小只与距离有关,而与环境、光线、方向等因素无关,所以深度图像能够真实准确的体现景物的几何深度信息。通过建立物体的空间模型,能够为深层次的计算机视觉应用提供更坚实的基础。

    这里写图片描述
    图2-2 人物的彩色图像与深度图像 

     

    Fig.2-2 Color image and depth image of the characters

    (2)PCL

    PCL(Point Cloud Library,点云库)是由斯坦福大学的Dr.Radu等学者基于ROS(Robot Operating System,机器人操作系统)下开发与维护的开源项目,最初被用来辅助机器人传感、认知和驱动等领域的开发。2011年PCL正式向公众开放。随着对三维点云算法的加入与扩充,PCL逐步发展为免费、开源、大规模、跨平台的C++编程库。

    PCL框架包括很多先进的算法和典型的数据结构,如滤波、分割、配准、识别、追踪、可视化、模型拟合、表面重建等诸多功能。能够在各种操作系统和大部分嵌入式系统上运行,具有较强的软件可移植性。鉴于PCL的应用范围非常广,专家学者们对点云库的更新维护也非常及时。PCL的发展时至今日,已经来到了1.7.0版本。相较于早期的版本,加入了更多新鲜、实用、有趣的功能,为点云数据的利用提供了模块化、标准化的解决方案。再通过诸如图形处理器、共享存储并行编程、统一计算设备架构等领先的高性能技术,提升PCL相关进程的速率,实现实时性的应用开发。

    在算法方面,PCL是一套包括数据滤波、点云配准、表面生成、图像分割和定位搜索等一系列处理点云数据的算法。基于不同类型区分每一套算法,以此把整合所有三维重建流水线功能,保证每套算法的紧凑性、可重用性与可执行性。例如PCL中实现管道运算的接口流程:

    ①创建处理对象,例如滤波、特征估计、图像分割等; 
    ②通过setInputCloud输入初始点云数据,进入处理模块; 
    ③设置算法相关参数; 
    ④调用不同功能的函数实现运算,并输出结果。

    为了实现模块化的应用与开发,PCL被细分成多组独立的代码集合。因此便可方便快捷的应用于嵌入式系统中,实现可移植的单独编译。如下列举了部分常用的算法模块:

    libpcl I/O:完成数据的输入、输出过程,如点云数据的读写; 
    libpcl filters:完成数据采样、特征提取、参数拟合等过程; 
    libpcl register:完成深度图像的配准过程,例如迭代最近点算法; 
    libpcl surface:完成三维模型的表面生成过程,包括三角网格化、表面平滑等。

    此类常用的算法模块均具有回归测试功能,以确保使用过程中没有引进错误。测试一般由专门的机构负责编写用例库。检测到回归错误时,会立即将消息反馈给相应的作者。因此能提升PCL和整个系统的安全稳定性。

    (3)点云数据

    如图2-3所示,展示了典型的点云数据(Point Cloud Data,PCD)模型。

    这里写图片描述
    图2-3 点云数据及其放大效果

     

    点云数据通常出现在逆向工程中,是由测距设备获取的物体表面的信息集合。其扫描资料以点的形式进行记录,这些点既可以是三维坐标,也可以是颜色或者光照强度等信息。通常所使用的点云数据一般包括点坐标精度、空间分辨率和表面法向量等内容。点云一般以PCD格式进行保存,这种格式的点云数据可操作性较强,同时能够提高点云配准融合的速度。本文研究的点云数据为非结构化的散乱点云,属于三维重建特有的点云特点。

    (4)坐标系 
    在三维空间中,所有的点必须以坐标的形式来表示,并且可以在不同的坐标系之间进行转换。首先介绍基本坐标系的概念、计算及相互关系。

    ①图像坐标系

    图像坐标系分为像素和物理两个坐标系种类。数字图像的信息以矩阵形式存储,即一副像素的图像数据存储在维矩阵中。图像像素坐标系以为原点、以像素为基本单位,U、V分别为水平、垂直方向轴。图像物理坐标系以摄像机光轴与图像平面的交点作为原点、以米或毫米为基本单位,其X、Y轴分别与U、V轴平行。图2-4展示的是两种坐标系之间的位置关系:

    这里写图片描述
    图2-4 图像像素坐标系与物理坐标系

     
     
    Fig.2-4 Image pixel coordinate system and physical coordinate system

    令U-V坐标系下的坐标点(u0,v0),与代表像素点在X轴与Y轴上的物理尺寸。那么图像中的所有像素点在U-V坐标系与在X-Y坐标系下的坐标间有着如式(2-1)表示的关系: 

    这里写图片描述

    其中指的是图像坐标系的坐标轴倾斜相交而形成的倾斜因子(Skew Factor)。

    ②摄像机坐标系 
    摄像机坐标系由摄像机的光心及三条、、轴所构成。它的、轴对应平行于图像物理坐标系中的、轴,轴为摄像机的光轴,并与由原点、、轴所组成的平面垂直。如图2-5所示:

    这里写图片描述
    图2-5摄像机坐标系

     

    令摄像机的焦距是f,则图像物理坐标系中的点与摄像机坐标系中的点的关系为:

    ③世界坐标系

    考虑到摄像机位置具有不确定性,因此有必要采用世界坐标系来统一摄像机和物体的坐标关系。世界坐标系由原点及、、三条轴组成。世界坐标与摄像机坐标间有着(2-3)所表达的转换关系:

    这里写图片描述

     

    这里写图片描述

    这里写图片描述

    ( 23 ) 
    其中,是旋转矩阵,代表摄像机在世界坐标系下的指向;是平移向量,代表了摄像机的位置。


    2.三维重建流程


    本文使用Kinect采集景物的点云数据,经过深度图像增强、点云计算与配准、数据融合、表面生成等步骤,完成对景物的三维重建。

    这里写图片描述
    图2-6 基于深度传感器的三维重建流程图 

     

    Fig.2-6 Flow chart of 3D reconstruction based on depth sensor

    图2-6显示的流程表明,对获取到的每一帧深度图像均进行前六步操作,直到处理完若干帧。最后完成纹理映射。下面对每个步骤作详细的说明。

    2.1 深度图像的获取

    景物的深度图像由Kinect在Windows平台下拍摄获取,同时可以获取其对应的彩色图像。为了获取足够多的图像,需要变换不同的角度来拍摄同一景物,以保证包含景物的全部信息。具体方案既可以是固定Kinect传感器来拍摄旋转平台上的物体;也可以是旋转Kinect传感器来拍摄固定的物体。价格低廉、操作简单的深度传感器设备能够获取实时的景物深度图像,极大的方便了人们的应用。

    2.2 预处理

    受到设备分辨率等限制,它的深度信息也存在着许多缺点。为了更好的促进后续基于深度图像的应用,必须对深度图像进行去噪和修复等图像增强过程。作为本文的重点问题,具体的处理方法将在第四章进行详细的解释说明。

    2.3 点云计算

    经过预处理后的深度图像具有二维信息,像素点的值是深度信息,表示物体表面到Kinect传感器之间的直线距离,以毫米为单位。以摄像机成像原理为基础,可以计算出世界坐标系与图像像素坐标系之间具有下式的转换关系:

    这里写图片描述

     

    这里写图片描述

    则k值只与有关,而等参数只与摄像机的内部构造有关,所以称为像机的内参数矩阵。以摄像机作为世界坐标系,即,则深度值即为世界坐标系中的值,与之对应的图像坐标就是图像平面的点。

    2.4 点云配准

    对于多帧通过不同角度拍摄的景物图像,各帧之间包含一定的公共部分。为了利用深度图像进行三维重建,需要对图像进行分析,求解各帧之间的变换参数。深度图像的配准是以场景的公共部分为基准,把不同时间、角度、照度获取的多帧图像叠加匹配到统一的坐标系中。计算出相应的平移向量与旋转矩阵,同时消除冗余信息。点云配准除了会制约三维重建的速度,也会影响到最终模型的精细程度和全局效果。因此必须提升点云配准算法的性能。

    三维深度信息的配准按不同的图像输入条件与重建输出需求被分为:粗糙配准、精细配准和全局配准等三类方法。

    (1)粗糙配准(Coarse Registration)

    粗糙配准研究的是多帧从不同角度采集的深度图像。首先提取两帧图像之间的特征点,这种特征点可以是直线、拐点、曲线曲率等显式特征,也可以是自定义的符号、旋转图形、轴心等类型的特征。

    随后根据特征方程实现初步的配准。粗糙配准后的点云和目标点云将处于同一尺度(像素采样间隔)与参考坐标系内,通过自动记录坐标,得到粗匹配初始值。

    (2)精细配准(Fine Registration)

    精细配准是一种更深层次的配准方法。经过前一步粗配准,得到了变换估计值。将此值作为初始值,在经过不断收敛与迭代的精细配准后,达到更加精准的效果。以经典的由Besl和Mckay[49]提出的ICP(Iterative Closest Point,迭代最近点)算法为例,该算法首先计算初始点云上所有点与目标点云的距离,保证这些点和目标点云的最近点相互对应,同时构造残差平方和的目标函数。

    基于最小二乘法对误差函数进行最小化处理,经过反复迭代,直到均方误差小于设定的阈值。ICP算法能够获得精正确无误的配准结果,对自由形态曲面配准问题具有重要意义。另外还有如SAA(Simulate Anneal Arithmetic,模拟退火)算法、GA(Genetic Algorithm,遗传)算法等也有各自的特点与使用范畴。

    (3)全局配准(Global Registration)

    全局配准是使用整幅图像直接计算转换矩阵。通过对两帧精细配准结果,按照一定的顺序或一次性的进行多帧图像的配准。这两种配准方式分别称为序列配准(Sequential Registration)和同步配准(Simultaneous Registration)。

    配准过程中,匹配误差被均匀的分散到各个视角的多帧图像中,达到削减多次迭代引起的累积误差的效果。值得注意的是,虽然全局配准可以减小误差,但是其消耗了较大的内存存储空间,大幅度提升了算法的时间复杂度。

    2.5 数据融合

    经过配准后的深度信息仍为空间中散乱无序的点云数据,仅能展现景物的部分信息。因此必须对点云数据进行融合处理,以获得更加精细的重建模型。以Kinect传感器的初始位置为原点构造体积网格,网格把点云空间分割成极多的细小立方体,这种立方体叫做体素(Voxel)。通过为所有体素赋予SDF(Signed Distance Field,有效距离场)值,来隐式的模拟表面。

    SDF值等于此体素到重建表面的最小距离值。当SDF值大于零,表示该体素在表面前;当SDF小于零时,表示该体素在表面后;当SDF值越接近于零,表示该体素越贴近于场景的真实表面。KinectFusion技术虽然对场景的重建具有高效实时的性能,但是其可重建的空间范围却较小,主要体现在消耗了极大的空间用来存取数目繁多的体素。

    为了解决体素占用大量空间的问题,Curless[50]等人提出了TSDF (Truncated Signed Distance Field,截断符号距离场)算法,该方法只存储距真实表面较近的数层体素,而非所有体素。因此能够大幅降低KinectFusion的内存消耗,减少模型冗余点。

    这里写图片描述
    图2-7 基于空间体的点云融合

     

    TSDF算法采用栅格立方体代表三维空间,每个栅格中存放的是其到物体表面的距离。TSDF值的正负分别代表被遮挡面与可见面,而表面上的点则经过零点,如图2-7中左侧展示的是栅格立方体中的某个模型。若有另外的模型进入立方体,则按照下式(2-9)与(2-10)实现融合处理。

    其中,指的是此时点云到栅格的距离,是栅格的初始距离,是用来对同一个栅格距离值进行融合的权重。如图2-7中右侧所示,两个权重之和为新的权重。对于KinectFusion算法而言,当前点云的权重值设置为1。

    鉴于TSDF算法采用了最小二乘法进行了优化,点云融合时又利用了权重值,所有该算法对点云数据有着明显的降噪功能。

    2.6 表面生成

    表面生成的目的是为了构造物体的可视等值面,常用体素级方法直接处理原始灰度体数据。Lorensen[51]提出了经典体素级重建算法:MC(Marching Cube,移动立方体)法。移动立方体法首先将数据场中八个位置相邻的数据分别存放在一个四面体体元的八个顶点处。对于一个边界体素上一条棱边的两个端点而言,当其值一个大于给定的常数T,另一个小于T时,则这条棱边上一定有等值面的一个顶点。

    然后计算该体元中十二条棱和等值面的交点,并构造体元中的三角面片,所有的三角面片把体元分成了等值面内与等值面外两块区域。最后连接此数据场中的所有体元的三角面片,构成等值面。合并所有立方体的等值面便可生成完整的三维表面。


    3 性能优化


    Kinect等深度传感器的出现,不仅给娱乐应用带来了变革,同样对科学研究提供了新的方向。尤其是在三维重建领域。然而由于三维重建过程涉及到大量密集的点云数据处理,计算量巨大,所以对系统进行相应的性能优化显得非常的重要。本文采用基于GPU(Graphic Processing Unit,图形处理器)并行运算功能,以提高整体的运行效率。

    NVIDIA公司于1999年提出了GPU概念。在这十几年间,依靠硬件行业的改革创新,芯片上晶体管数量持续增多,GPU性能以半年翻一番的速度成倍提升。GPU的浮点运算能力远超CPU上百倍,却具有非常低的能耗,极具性价比。因GPU不仅广泛应用于图形图像处理中,也在如视频处理、石油勘探、生物化学、卫星遥感数据分析、气象预报、数据挖掘等方面崭露头角。

    作为GPU的提出者,NVIDIA公司一直致力于GPU性能提升的研究工作,并在2007年推出了CUDA架构。CUDA(Compute Unified Device Architecture,统一计算设备架构)是一种并行计算程序架构。在CUDA的支持下,使用者可以编写程序以利用NVIDIA系列GPU完成大规模并行计算。GPU在CUDA中被用作通用计算设备,而不只是处理图像。在CUDA中,将计算机CPU称为主机(Host),GPU称为设备(Device)。

    主机端和设备端都有程序运行,主机端主要完成程序的流程与串行计算模块,而设备端则专门处理并行计算。其中,设备端的并行计算过程被记录在Kernel内核函数中,主机端可以从Kernel函数入口执行并行计算的调用功能。在此过程中,虽然Kernel函数执行同一代码,但却处理着不同的数据内容。

    Kernel函数采用扩展的C语言来编程,称为CUDAC语言。需要注意的是,并不是所有的运算都可以采用CUDA并行计算。只有独立性的计算,如矩阵的加减,因为只涉及到对应下标的元素的加减,不同下标元素毫无关联,所以适用于并行计算;而对于如阶乘的计算则必须对所有数累积相乘,故无法采用并行计算。

    CUDA具有线程(Thread)、程序块(Block)、网格(Grid)三级架构,计算过程一般由单一的网格完成,网格被平均分成多个程序块,每个程序块又由多个线程组成,最终由单个线程完成每个基本运算,如图2-8所示。 

    这里写图片描述
    图2-8 CUDA模型

     

    为了更深入的理解CUDA模型的计算过程,这里以前一章中提到的公式(2-11)为例,计算某点的深度值与三维坐标之间的转换: 

    这里写图片描述

     
    上式中的表示深度值,内参数矩阵是已知量,是该点的坐标。可以发现这个点的转换过程与其他点转换过程是相互独立的,所以整幅图像中各点的坐标转换能够并行执行。这种并行计算可以大幅提升整体计算的速率。例如,利用一个网格来计算一幅像素的深度图像到三维坐标的转换,只需要将此网格均分成块,每块包括个线程,每个线程分别操作一个像素点,便可以便捷的完成所有的坐标转换运算。

    通过GPU的并行计算,三维重建性能得到了大幅的提升,实现了实时的输入输出。对于Kinect在实际生产生活中的应用奠定了基础。


    小结


    首先介绍了与三维重建相关的基本概念,包括深度图像、点云数据、四种坐标系及其之间的转换关系等。

    展开全文
  • (1)传统的三维重建技术 (2)基于深度学习的三维重建算法研究主要有三种: 在传统三维重建算法中引入深度学习方法...模仿动物视觉,直接利用深度学习算法进行三维重建,包括基于体素、基于点云和基于网格。 ...
  • 三维重建】使用OpenMVG+OpenMVS做三维重建

    千次阅读 热门讨论 2020-11-20 17:35:24
    这篇博客只是记录怎样使用OpenMVG和OpenMVS这两个开源工具完成一个三维重建的pipeline,不涉及开发。 为了简便,这里并没有用源码编译软件,而是直接下载的release版本。 OpenMVG是计算机视觉领域处理多视几何的...
  • “近年来,随着AR,VR,虚拟试衣,自动驾驶等领域的兴起,三维重建技术得到了广泛的应用。今天分享一篇来自三维匠心的关于三维重建的综述文章。文章较长,建议收藏。”三维匠心(已授权)丨来源三维...
  • 姿态变化问题是人脸识别研究中的一个难题。在公安刑侦等实际应用中,多数情况下我们不能得到人脸的正面像,...本论文主要针对从非正面人脸图像生成正面人脸的应用需要,研究了基于多姿态二维人脸图像的三维人脸重建方法。
  • 点云进行matlab三维重建,通过双目相机进行匹配,得到点云,最后利用点云进行三维重建
  • 由人脸图片重建三维人脸网格

    千次阅读 2018-07-28 14:36:02
    这篇文章将一张人脸照片通过深度学习的方法学习到各个参数从而重建三维人脸模型。 算法框架 参考文献 [1] Tewari A, Zollhöfer M, Kim H, et al. Mofa: Model-based deep convolutional face ...
  • 三维模型重建(1):关于三维模型重建的一些简介

    万次阅读 多人点赞 2017-07-07 11:33:48
    三维模型重建顾名思义就是从一些数据(点云,图片,三维轮廓线等)重建出物体的三维逼真的三维模型,在其重建的过程中针对不同的数据的的三维重建会有不同的处理算法,如针对点云数据的三维重建有很多种重建方法,如...
  • 三维重建技术概述

    万次阅读 多人点赞 2016-06-01 22:29:08
    基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息。1. 相关概念(1)彩色图像与深度图像彩色图像也叫作RGB图像,R、G、B...
  • 三维重建

    千次阅读 2019-03-15 15:16:01
    在计算机视觉和计算机图形学中,三维重建是捕捉真实物体的形状和外观的过程,这个过程可以通过主动或被动的方法来完成。如果允许模型随时间改变形状,这称为非刚性或时空重构。三维重建的研究一直是一个难题。利用...
  • 点击上方“3D视觉工坊”,选择“星标”干货第一时间送达编辑丨三维匠心近年来,随着AR,VR,虚拟试衣,自动驾驶等领域的兴起,三维重建技术得到了广泛的应用。三维匠自接触三维重建以来,一直为基...
  • 基于opencv、pcl单目线激光三维重建,包括相机标定、激光面标定、履带运动标定、三维重建。三维结果效果还不错,可参考学习
  • 论文名称:Soft Rasterizer: A Differentiable Renderer for Image-based...渲染通过模拟图像形成的物理过程来缩小二维视觉和三维场景之间的差距,通过反转这种渲染器,人们可以得到一种从二维图像中推断三维信息的...
  • 三维重建技术综述

    万次阅读 多人点赞 2019-06-15 16:23:25
    三维重建技术通过深度数据获取、预处理、点云配准与融合、生成表面等过程,把真实场景刻画成符合计算机逻辑表达的数学模型。这种模型可以对如文物保护、游戏开发、建筑设计、临床医学等研究起到辅助的作用。 三维...
  • 点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入!普通的神经网络不适用于比较大的网格(因为参数会过多),而传统的卷积神经网络又没法应用在拥有不规则结构的三维网格上。因此,我们把传...
  • 今天想和各位伙伴分享一些有趣的三维重建方面的工作,同时,本篇文章也是三维匠一路走来接触的相关工作的总览,后续三维匠会继续分享AI与三维重建方面的工作,希望各位伙伴能持续关注~ 近年来,随着AR,VR,虚拟...
  • 《A 3D reconstruction method based on grid laser and gray scale photo for...提出了一种新的三维重建算法,该算法通过对网格激光照射下的焊缝图像进行融合分析,不需要附加光源。采用栅极激光在焊缝表面形成9×...
  • 三维重建方法

    2020-08-27 10:13:40
    三维重建技术 三维重建技术就是要在计算机中真实地重建出该物体表面的三维虚拟模型,构建一个物体完整的三维模型,大致可以分为三步: 1.利用摄像机等图像采集设备对物体的点云数据从各个角度釆集,单个摄像机只能对...
  • Ubuntu下openMVG+openMVS实现三维重建

    千次阅读 热门讨论 2019-11-22 11:13:48
    三维重建是一个计算机视觉领域经典的问题,近年来也出现了许多利用深度学习直接从图像中得到网格的方法,取得了很好的效果。本文主要关注三维重建的经典实现方法,其步骤为: 通过相机获取一系列三维物体不同侧面的...
  • OpenCV+OpenGL 双目立体视觉三维重建

    万次阅读 多人点赞 2016-08-08 00:02:47
    0.绪论这篇文章主要为了研究双目立体视觉的最终目标——三维重建,系统的介绍了三维重建的整体步骤。双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维重建...
  • 在基于图像的三维重建领域中,基于轮廓或立体匹配的实时三维重建算法精度很低,而高精度的三维重建算法需要像素级能量最优化,很难做到实时.针对这个问题,提出一种用飞行时间相机拍摄得到的深度图优化可视外壳方法的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,608
精华内容 1,843
关键字:

三维重建网格