精华内容
下载资源
问答
  • 商业计划 - 【三维重建】空陆视觉v7.2 -领先的实时三维重建技术.pdf
  • 实时三维重建笔记

    2020-08-30 22:38:58
    KinectFusion首次实现了基于RGB-D实时三维重建,该算法的流程是将获取的深度图像转化为点云,然后从模型投影获得到深度图像配准,求解位姿,根据相机位姿将点云数据融合到场景的三维模型中,最后使用光线投影算法...

    我胡汉三维重建又干回本行了

    由KinectFusion谈起

    KinectFusion首次实现了基于RGB-D实时三维重建,该算法的流程是将获取的深度图像转化为点云,然后从模型投影获得到深度图像配准,求解位姿,根据相机位姿将点云数据融合到场景的三维模型中,最后使用光线投影算法求解当前视角下所看到的场景。具体实现过程可以参照:KinectFusion: Real-time dense surface mapping and tracking这篇,这里只是说说我的理解。

    实时三维重建与SLAM

    事实上,这两个追求的目标是不一样的。基于RGB-D的实时三维重建更注重重建精度,而SLAM更注重轨迹求解的精度,所以前者会对点云进行精简工作,使用直接法+icp进行配准,而后者通常只是简单的讲点堆积在一起,再使用特征匹配+icp进行粗略配准,当然,现有的SLAM已经做了很大的改进,这里不赘述。

    KinectFusion算法流程浅谈

    实时重建中的ICP算法

    何为ICP

    本质上,ICP(迭代最近点)算法就是在求解两个点云之间的最小距离,算法步骤为:

    1. 对于源点云中的每个点(通常是整个顶点集中的密集集合或每个模型中的成对顶点选择),去匹配目标点云最接近的点;
    2. 使用均方根到点距离度量最小化技术来估计旋转和平移矩阵,该技术将使每个源点最佳地与其上一步中找到的匹配点对齐。该步骤还可以包括在对准之前加权点并剔除异常值;
    3. 使用获得矩阵变换源点云;
    4. 迭代(重新关联点,依此类推)。
      未完待续。。

    实时重建中的ICP算法的GPU实现

    相机位姿估计

    点云与全局模型的融合

    光线投影算法

    总结与思考

    全篇主要参考文献:
    [1] Newcombe R A, Izadi S, Hilliges O, et al. KinectFusion: Real-time dense surface mapping and tracking[C]//Mixed and augmented reality (ISMAR), 2011 10th IEEE international symposium on. IEEE, 2011: 127-136.
    [2] Izadi S, Kim D, Hilliges O, et al. KinectFusion: real-time 3D reconstruction and interaction using a moving depth camera[C]//Proceedings of the 24th annual ACM symposium on User interface software and technology. ACM, 2011: 559-568.
    [3]KinectFusion和ElasticFusion三维重建方法ppt,付兴银。

    展开全文
  • 作为计算机视觉技术的一个...在室内环境下就智能机器人的同步定位以及环境地图创建(SLAM)算法展开了研究,引入RGB-D相机Kinect直接获取3D场景的深度信息,实现了一种基于单目视觉SLAM与Kinect的实时三维重建方法。
  • 在基于图像的三维重建领域中,基于轮廓或立体匹配的实时三维重建算法精度很低,而高精度的三维重建算法需要像素级能量最优化,很难做到实时.针对这个问题,提出一种用飞行时间相机拍摄得到的深度图优化可视外壳方法的...
  • 微软实时三维重建KinectFusion两篇论文:一篇原理,一篇GPU流水线实现,源码为CUDA和C++结合
  • 这是一篇基于Kinect深度信息的实时三维重建和滤波算法研究的硕士论文
  • 分析了基于Kinect输出的深度数据进行场景实时三维重建的算法。针对实现过程中出现的深度图像噪声过大的问题, 根据其信号结构的特点给出了改进的双边滤波算法。新算法利用已知的深度图像噪声范围, 将权值函数修改为二...
  • 《CHISEL:Real Time Large Scale 3D Reconstruction Onboard a Mobile Device using Spatially-Hashed Signed Distance Fields》。使用TSDF与voxel hash进行三维重建,论文中有笔记,可以参考。
  • 1.技术背景 Kinect fusion是微软研究院利用Kinect进行的三维重建项目。用户可以通过Kinect相机进行场景绘制并实时查看...1、基于RGB-D相机三维重建的开山之作,首次实现实时稠密的三维重建。 2、通过融合序列图像重建三

    1.技术背景

    Kinect fusion是微软研究院利用Kinect进行的三维重建项目。用户可以通过Kinect相机进行场景绘制并实时查看3D模型,Kinect fusion在GPU上以交互式速率运行,并且可以在各种硬件上以非交互式速率运行。Kinectfusion使用ICP算法将多帧不同位姿深度数据融合到前帧,并使用TSDF算法进行点云融合和立方体重建,重建结果具有平滑、噪声小、精度高等优点。

    2.算法特点

    1、基于RGB-D相机三维重建的开山之作,首次实现实时稠密的三维重建。

    2、通过融合序列图像重建三维重建,如果显卡满足要求重建的帧率可以跟得上深度相机的帧率(30Hz)。

    4、使用 TSDF 模型不断融合深度图像重建三维模型。

    3、通过配准当前帧和模型投影获取的图像计算位姿,比通过配准当前帧和上一帧计算位姿要更加准确。

    基于上述需求,KinectFusion允许用户手持Kinect设备自由探索室内环境,系统将自动跟踪Kinect摄像头的6DOF姿态,然后融合不同时序的深度图数据并重建出场景的全局模型。由于视角的不断变化,Kinect反馈的深度图也会发生改变,这里采用了类似图像超分辨率技术对深度图进行了细节优化,从而提高模型的重建质量。最后利用Kinect自带的RGB数据进行场景纹理映射。

    首先如何利用单Kinect摄像头去跟踪它自己的6DOF姿态?这里采用点云模型的刚性配准对齐来计算摄像头在空间中的6DOF变换,点云配准首选经典的ICP[Besl92, RusinKiewicz01]。之前需要将深度图像数据变换至摄像机的空间坐标系中,并计算其对应点的法线信息;然后逐帧采用基于GPU的ICP实现进行模型配准和6DOF计算;在重建部分,KinectFusion并没有直接融合点云或生成网格模型,而是采用了[Curless96]的体集成算法,最终在全局坐标系中生成一个三维体素网格并进行不断更新,每个体素内最终保存了一段时间内从该体素到物理表面上某一点的平均距离。最后使用Raycast给出隐式表面的渲染结果,另一方面,以摄像机位置作为视点做Raycasting,同样能够得到一个具有真实细节的高质量的合成深度图,然后再对其进行下一轮ICP迭代。这就允许我们能够利用合成深度图与下一帧的深度图进行配准,使重建结果的精度不断提高。

    3.算法流程

    a) 读入的深度图像转换为三维点云并且计算每一点的法向量;

    b) 计算得到的带有法向量的点云,和通过光线投影算法根据上一帧位姿从模型投影出来的点云,利用 ICP 算法配准计算位姿;

    c) 根据计算得到的位姿,将当前帧的点云融合到网格模型中去;

    d) 根据当前帧相机位姿利用光线投影算法从模型投影得到当前帧视角下的点云,并且计算其法向量,用来对下一帧的输入图像配准。

    展开全文
  • <p><a href="https://github.com/willSapgreen/stereo-vision">https://github.com/willSapgreen/stereo-vision</a></p> 方法采用了这位大神的代码 已经成功运行了但是不知道为什么运行不出结果  ...
  • 博主的源码地址:... 原论文:"KinectFusion: Real-time dense surface mapping and tracking." KinectFusion算法是三维视觉里面一个经典的基于深度相机的入门级实时静态场景重建算法,算法的流程简单...

           博主的源码地址:https://github.com/sjy234sjy234/KinectFusion-ios

           原论文:"KinectFusion: Real-time dense surface mapping and tracking."

           KinectFusion算法是三维视觉里面一个经典的基于深度相机的入门级实时静态场景重建算法,算法的流程简单易懂,项目复杂度适中,而且涵盖三维视觉一些基础知识细节,适合入门学习。值得一提的是,KinectFusion算法本身的并行度非常高,几乎每一个步骤都可以使用gpgpu的核函数并行实现。目前,github上已经有PC端的cuda开源实现版本。

           博主此前在ios平台上做metal gpgpu开发,在此整理分享一下KinectFusion算法在ios移动端的metal实现代码,该代码是demo版本,目前还不能达到实时运行的效率,但是非常适合ios metal gpgpu的初学者。经测试,如果对编程做一些gpgpu方向的优化加速,可以在iphoneX上达到30以上的帧率。

                                    

           上图是iphoneX上的运行示例,本文主要先对项目的结构框架做一个系统的介绍。

    一、小白需要的前期准备工作

           图形渲染的getting started部分:https://learnopengl.com/

           ios metal入门:https://blog.csdn.net/sjy234sjy234/article/details/81812029

           齐次坐标与空间变换:https://blog.csdn.net/qq_35976351/article/details/84871397

           相机投影:https://blog.csdn.net/rurud/article/details/72823718      

           KinectFusion原文阅读——重点理解框架、TSDF、ICP,其它细节对照博主源码,很多可以略过

           Marching Cube——用于提取TSDF中存储的网格模型,原文似乎不是用这个

    二、项目结构介绍

           从文首的源码链接克隆项目后,用xcode打开,在苹果真机上直接运行。注意metal相关应用无法在虚拟手机上测试运行,只能在真机上测试运行。经博主实测,demo项目在iphone X和iphone SE平台上都可以正常运行。

           项目中的主要文件(夹)有:Utility、FusionProcessor、depth.bin、ViewController.mm。

    1、Utility文件夹

            文件夹中包含了算法中用到的数学计算的实现,包括投影矩阵、空间变换、线性方程求解等等。同时,还包含了ios metal相关的功能文件。其中,metal相关部分的写法,与博主此前的学习ios Metal系列是相同的,可以参考上面准备工作中的链接。

    2、FusionProcessor文件夹

           文件夹包含了KinectFusion的ios metal的实现源码,在后续的文章中将详细展开介绍。

    3、depth.bin文件

           文件预存了57帧来自iphoneX深度相机的深度帧,帧尺寸是480x640x2 byte。注意,ios平台的深度相机获取存储的是float16的深度数据,即每个深度用2个字节存储,而且存储的值是disparity。如果要获取深度值,需要进行如下换算,取disparity的倒数:depth = 1.0 / disparity。

    4、ViewController.mm

           文件里面编写了KinectFusion的运行示例。从depth.bin读取深度帧数据流,调用KinectFusion的方法逐帧的进行三维几何重建。

    三、总结

          综上,本文介绍了学习KinectFusion之前需要掌握的基础知识框架,以及博主的KinectFusion-ios项目的组织结构。后续的文章,会进一步解析在ios平台上,KinectFusion的调用、实现的相关源码部分。

                                                                             

     

    展开全文
  • Win10+VS2015+Realsense D435相机+BundleFusion实现基于SLAM的实时三维建图前言1 程序环境2 相关代码、SDK的下载2.1 相关代码下载2.2 软件、SDK下载3 配置3.1 工程文件配置3.2 源码相关配置3.3 模型参数修改4 编译5 ...

    前言

    本人前期实现了ORB_slam3的实现过程,但是其是稀疏重建。
    这两天实现了基于经典SLAM框架—BundleFusion的稠密三维重建。主要参考博主:https://blog.csdn.net/Claiborne696/article/details/107928892

    配置过程和博主的基本一致。主要区别是本人使用Realsense D435、使用vs2015、显卡为GTX1050 (2G);并遇到了一些其他问题,在这里记录一下。

    1 程序环境

    1. 编译器:Visual Studio 2015;程序位数:64位(即x64)
    2. 操作系统:Windows 10;
    3. GPU: GTX 1050,配CUDA 8.0驱动;

    2 相关代码、SDK的下载

    为了快速配置,读者可以先把下面必须的库下载过来,主要包括如下两方面(如果已经安装过的,就不用下载了)

    2.1 相关代码下载

    (1)bundlefusion源码https://github.com/niessner/BundleFusion;(若wifi访问不了github,用手机热点试试)

    (2)mLib库地址:https://github.com/niessner/mLib

    (3)mLibExternal库地址:https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0。这是外网地址,若访问不了,需要配置vpn;或者用参考博主给的百度网盘链接:https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew ;提取码:0x4t。

    (4)RealSenseSensor类的2个库文件:https://github.com/hqWaynee/lidar_vision_slam

    2.2 软件、SDK下载

    (1)Realsense 地址:https://github.com/IntelRealSense/librealsense/releases。本人下的win10-2.30.0版本;默认c盘安装。

    (2)CUDA8.0 地址:https://developer.nvidia.com/cuda-80-ga2-download-archive。选择win10,可在线安装(network)或离线安装(local);默认安装。

    (3)DirectX SDK 地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
    DirectX SDK的安装会遇到DirectX SDK的错误“ErrorCode:s1023”,本人用https://www.dazhuanlan.com/2019/12/13/5df30b9d0f239/ 中的解决方法1。

    (4)Boost-1.72.0 地址:https://dl.bintray.com/boostorg/release/1.72.0/source/ 中下载boost_1_72_0.zip。

    Boost库使用说明:Boost-1.72.0不用全部解压,只提取其中serialization文件夹的array_optimization.hpp和array_wrapper.hpp,放到源码工程的mLibExternal/Include/boost/serialization下

    否则后面编译会出现如下错误:

    无法打开包括文件: “boost/serialization/array_wrapper.hpp”: No such file or directory
    无法打开包括文件: “boost/serialization/array_optimization.hpp”: No such file or directory
    

    3 配置

    3.1 工程文件配置

    (1)配置FriedLiver.vcxproj文件
    以文本形式打开,将36行的“CUDA 8.0.props”和376行的“CUDA 8.0.targets”都改成8.0。如下所示:
    在这里插入图片描述
    否则会出现cuda错误:

    未能从程序集 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\Nvda.Build.CudaTasks.v7.0.dll 加载任务“Nvda.Build.CudaTasks.SanitizePaths”
    

    (2)配置FriedLiver.sln
    以文本文档形式打开,更改为左图的数据。从而使得vs2013程序升级为vs2015,如右图所示。
    在这里插入图片描述

    3.2 源码相关配置

    (1)添加dll和lib文件
    将 C:\Program Files (x86)\Intel RealSense SDK 2.0\bin\x64安装路径下的realsense2.dll 和C:\Program Files (x86)\Intel RealSense SDK 2.0\lib\x64下的realsense2.lib 拷贝至 “ BundleFusion-master/FriedLiver" 目录下,如下:
    在这里插入图片描述
    (2)添加realsense属性表
    BundleFusion工程打开“属性管理器”, 右键工程,选择“添加现有属性表”,从 RealSense SDK 2.0 的安装路径下选中intel.realsense.props属性表;
    在这里插入图片描述

    (3)RealSenseSensor类源码的添加
    将前面下载的RealSenseSensor类的cpp和h文件放到BundleFusion-master/FriedLiver/Source文件夹下;
    同时VS工程的解决方案右键-添加现有项,选中上面的cpp和h文件。
    在这里插入图片描述
    否则后面编译会出现错误:

    LNK2019无法解析的外部符号 "public: __cdecl RealSenseSensor::RealSenseSensor(void)" (??0RealSenseSensor@@QEAA@XZ),该符号在函数 "class RGBDSensor * __cdecl getRGBDSensor(void)" (?getRGBDSensor@@YAPEAVRGBDSensor@@XZ) 中被引用。
    

    (4)两个h文件修改
    GlobalAppState.h 文件中的 “REAL_SENSE”一行取消注释,同时屏蔽源码的“STRUCTURE_SENSOR”一行。

    FriedLiver.h 文件中28和30行添加2条支持库 realsense2.lib,其他的lib去掉。同时在39行添加#include “RealSenseSensor.h”,表示realsense配置完成。如下图所示:

    在这里插入图片描述
    (5)源码错误修正
    将FriedLiver.cpp73行的g_sensor = RealSenseSensor 改为 “g_sensor =new RealSenseSensor”,否则编译会报错:

    未定义标识符 "RealSenseSensor"......
    

    在这里插入图片描述

    3.3 模型参数修改

    (1)修改zParametersBundlingDefault.txt
    为避免出现窗口崩溃或没有响应直接跳出,打开 zParametersBundlingDefault.txt 配置文件,设置 30行的s_maxNumImages = 1200为s_maxNumImages = 400。否则内存容易溢出。

    (2)修改zParametersDefault.txt
    将s_sensorIdx = 7改为6,从而选中 REAL_SENSE;将49行s_hashNumSDFBlocks = 200000改为100000。否则运行会出现SDFBlocks溢出错误。

    4 编译

    Debug模式下编译通过,Debug模式不能运行,会出现错误:

    由于找不到Freelmage.dll,无法继续执行代码。重新安装程序可能会解决此问题。
    

    需要切换到Release模式,运行。结果如下:
    运行
    最后ctrl+9,保存ply模型。用meshlab显示,如下:
    在这里插入图片描述

    可发现,可以重建出电脑和桌子。但由于640*480分辨率下Realsense相机的深度精度不高,导出效果较差。所以,论重建精度,还是sfm方法更香一点。

    5 最终目录

    如果编译或执行有问题,可以按照上面步骤或参考链接再检查一遍。或者和下面的程序目录对照一下。本人目录格式为:

    Bundlefusion(自己创建的总目录)
    	BundleFusion-master/  //github源码下载过来
    		external/
    			mLib/   //下载mLib后放在external下
    				data/
    				include/
    				src/
    				[...]
    		FriedLiver/
    			[...]
    			Source/
    				RealSenseSensor.cpp //从下载的RealSenseSensor拷过来
    				RealSenseSensor.h //从下载的RealSenseSensor拷过来
    			FriedLiver.sln
    			[...]
    			realsense2.dll  //从RealSense SDK 2.0本地路径拷过来
    			realsense2.lib  //从RealSense SDK 2.0本地路径拷过来
    			zParametersBundlingDefault.txt   //修改参数
    			zParametersDefault.txt   //修改参数
    		img
    	mLibExternal  //下载过来
    		include/
    			boost/
    				serialization/
    					[...]
    					array_optimization.hpp   //从boost库拷过来
    					array_wrapper.hpp   //从boost库拷过来
    		libsWindows/
    		[...]
    

    6 其他

    若想通过双击FriedLiver.exe运行,则需要将 ”BundleFusion-master/FriedLiver" 目录下的 zParametersBundlingDefault.txt 和 zParametersDefault.txt 拷贝至 “ BundleFusion-master/FriedLiver/x64/Release ” 目录下。

    (原创不易。若有用,请左下角点赞,谢谢!)

    展开全文
  • 主要是在ElasticFusion基础上做了部分修改,进行人脸实时重建。 PPT及相关论文地址:https://pan.baidu.com/s/1Zr1uCFj7YqgEWWof2gp-Lw ,提取码:7fnw 相关算法实现链接: BundleFusion在win10+vs2013+cuda8.0上的...
  • RGB-D 实时三维重建/SLAM 中的 ICP 算法解析

    万次阅读 多人点赞 2016-05-16 15:47:35
    实时三维重建中,由于相邻两帧之间位姿变化比较小,在变量求解时,直接用上一帧的位姿初始化。 在 Dense SLAM 中,ICP 算法通常通过极小化匹配点的点到平面的距离计算 pose,ICP 算法有好多变种。 算法...
  • 对于实时三维重建系统,通常使用基于投影的ICP进行相机位姿的求解。即对于时间上连续的两帧深度图数据,可以分别提取以像素栅格化格式存储的三维顶点数据图。将这些数据当成点云,由于连续两帧之间的相机位姿变换...
  • 经过这样的操作,得到每一张顶点图的单像素存储的是一个(x, y, z)的顶点三维坐标,每一张法向图的单向素存储的是一个(x, y, z)的顶点法向坐标。 三、总结  综上(a)-(e)的所有操作构成了KinectFusion-ios的...
  • “走进高校” CARA 第二期学术讲堂:智能几何计算篇,直播已圆满结束。错过直播的小伙伴,福利来了,CV君已将回放视频整理完毕,欢迎收看!第part,是黄石生老师的学术分享,主题为“基...
  • 微软正在进行一个名为KinectFusion的项目。...)不同于的简单的三维点云的拼接,该项目的另外的吸引人的特性在于:如果对物体进行持续的扫描,三维重建精度可以由粗到细的逐渐提高。(类似superresolu...
  • 然后,提取操作,对于前面记录下来的体素点,利用预存的网格索引及线性插值方法,提取出三角形面片网格,得到重建三维几何模型。  代码在FusionProcessor.mm文件的processFrame方法中的外部调用如下 //...
  •  其中,第1行就是在前面的算法调用示例中出现过的接口调用,传入每一帧新的深度帧数据byte流,以更新重建三维场景。第3行是用于直接从iphoneX获取的深度数据类型CVPixelBufferRef的实时调用借口。实际上,两者完成...
  • 基本情况 题目:Real-time 3d reconstruction in dynamic scenes using point-based fusion 出处:Keller M, Lefloch D, Lambers M, et al. Real-time 3d reconstruction in dynamic scenes using point-based ...
  • 图1:个苹果的网格结果(从图2中放大)。由于不依赖过多的重叠的surfels来实现一个紧密的表面模型,网格(mesh)重建可以更精确、更有效地描述表面。 摘要: Dense 3D reconstructions generate globally consisent...
  • 基于Kinect v2的实时精确三维重建系统
  • GPU并行计算加速的实时可视外壳三维重建及其虚实交互
  • 医学图像三维重建实时性研究,:使用vTK工具包和MC重建算法开发了一套医学影像三维重建系统,并着重对实时性进行研究。
  • 尺度不变特征对于视频图像中的特征具有优秀敏锐的匹配能力,极大地放宽了摄像机标定对于设备上的限制,拓宽了实时三维重建的适用范围.通过对系统的一系列优化,不但提升了三维重建的精度,减少了错误匹配对摄像机标定的...
  • 基于RGBD和IMU的实时室内SLAM及三维重建,内含自动驾驶全套资料

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 291
精华内容 116
关键字:

实时三维重建