KinectFusion
1、资料
Kinect有两篇论文,一篇《KinectFusion: Real-Time Dense Surface Mapping and Tracking》偏向学术,另一篇《KinectFusion:Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera》偏向工程实践。
还有官方的PPT,讲的更清楚。
付兴银在泡泡机器人上讲《KinectFusion和ElasticFusion三维重建方法》
官方资料
https://blog.csdn.net/kiara_wei/article/details/70145640
《随机蕨编码在三维重建中的应用——刘洋》中第四章引言有kinectFusion的介绍及改进,及论文引用。
2、CUDA
CUDA可以理解为NVIDIA GPU的c/c++开发套件。
一个线程(thread)处理一个图像的像素或TSDF Volume中一列体素。线程是最小的执行单位。
许多线程组成线程束(warp),每个warp的活跃线程在任意时刻执行相同的指令,但线程的数据可能不同。一般一个warp内含32个thread。一个warp应避免分支指令,尽量执行同样的操作。一个warp分享的是相同的指令。
多个线程组织为一个block,一个block中的线程共享一片shared memory,线程数目上限一般为512或1024,维度为1-3.
显存(global memory),全局访问(包含CPU),片外,不加指定默认存储在这里,容量大,速度慢(相对)
Shared memory,片内,每个block都有自己的仅同一个block下的线程可以访问的shared memory,容量大,速度快(相对)
3、 程序在CPU 上,但CPU调用GPU,所以CPU理解为主机,GPU理解为设备端。数据从CPU到GPU需要“上传”,数据从GPU到CPU需要“下载”,CUDA中提供了API
__host__只能在CPU上调用、运行的函数,就是普通写的函数,CUDA中不加前缀默认为__host__属性;__global__可以在CPU上调用,GPU上运行的函数,__device__只能在GPU上调用和运行的函数,host__不能调用__device,global__和__device__能调用__device
4、流程
kinectFusion首先由图像估计点云和法线,再根据当前的点云、法线和上一帧的点云、法线估计R、T,然后surface reconstruction,最后融合。Kinectfusion主要用深度图,彩色图是用来做表面文理的。
KinectFusion第一步是做金字塔,彩色图像的金字塔,深度图的金字塔,深度图金字塔还要双边滤波去噪点,然后计算深度图金字塔每一层的顶点和法线。
计算顶点就是根据图像像素和相机内参计算在相机坐标系下的点。
计算法线,采用计算点左右上下的四个点,连线做叉乘。
求位姿采用ICP方法,对金字塔每一层从顶层到底层均要迭代计算,每一层计算过程一样,下面红色框内是每一层的步骤。顶层计算得到的位姿粗糙,但可以作为下一层计算的初始值。
计算考虑每一帧和上一帧之间的移动很小
point-to-plane的清晰推导在B站的计算机视觉life中《KinectFusionLib代码详解下》
kinectFusion的点云模型存在于显存,由于显存空间有限,使得kinectFusion支持的建模受限。
5、kinectFusion有许多实现,包括OpenCV4和PCL、KinectFusionLib。KinectFusionlib运用许多新的C++的新特性,看着舒服。KinectFusionlib只是一个库,需要搭配kinectFusionAPP使用。
kinectFusionlib中的CUDA文件先通过nvcc编译成一个中间库,KinectFusionlib中的C++(CPU)文件通过g++编译成另一个库,通过kinectFusionlib把两个连在一起形成一个库,KinectFusionAPP中的C++文件(CPU)通过g++编译,最有KinectFusionAPP调用kinectFusionlib库和KinectFusionAPP中的C++文件(CPU),很多算法都是这样,CUDA单独编译成一个库,然后调用。
KinectFusionApp:https://github.com/chrdiller/KinectFusionApp
KinectFusionLib:https://github.com/chrdiller/KinectFusionLib
KinectFusionLib代码注释:https://github.com/DreamWaterFound/KinectFusionAppLib_comments
6、位姿估计时,将当前帧以位姿初始值,转换到上一帧的视角下,计算数据关联。
7、相机在volume前面
8、TSDF值
9、raycast
KinectFusion相关推荐
- KinectFusion基于深度的实时稠密三维重建TSDF开山之作
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨安如夏@知乎 来源丨https://zhuanlan.zhihu.com/p/281482545 ...
- KinectFusion简介
KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time Dense Surface Mapping and Trac ...
- KinectFusion——微软基于KINECT的实时三维重建项目(KINECT)
微软正在进行一个名为KinectFusion的项目.目标是利用一台围绕物体移动的kinect实时重建物体的三维模型.(是不是可以理解为Kinect版本的SLAM?)不同于的简单的三维点云的拼接,该项目 ...
- 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)
KinectFusion算法原理依据2011年发表的Fusion重建的论文,主要重建方法为TSDF算法,并在GitHub上开源了相关代码,可以直接编译使用.Github: https://github ...
- Kinect-Fusion解读
原文链接:KinectFusion: Real-time dense surface mapping and tracking | IEEE Conference Publication | IEEE ...
- KinectFusion原理介绍
KinectFusion原理介绍 1 简介: 2 基础知识 2.1 点云(Point Cloud) 2.1 TSDF(Truncated Signed Distance Function)地图 3 原 ...
- Kinect与KinectFusion重建
有关Kinect应用开发正日新月异,稍有懈怠就会被远远甩在身后.不过,Kinect目前带给我们的仍只是一个充满无限可能的远景,正如App store能吸引年仅11岁的开发者一样,Kinect未来将对& ...
- 三维重建KInectFusion 学习笔记
目录 KInectFusion实战笔记 有icp 步骤和条件: 从零开始复现实时三维重建KInectFusion KInectFusion实战笔记 有icp KinectFusion实战笔记_kine ...
- kinectfusion解析_KinectFusion介绍
KinectFusion 介绍 KinectFusion简介 KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time ...
- kinectfusion的详细介绍
转载:https://blog.csdn.net/eric_e/article/details/81008437 最近一直在做dynamicfusion所以也查看了下kinectfusion 很经典的 ...
最新文章
- ACM模板--邻接表 无向图 Prim Kruskal Dijkstra
- 串口通信模块3:串口通信编程基础(读写、关闭)
- uva 10271——Chopsticks
- [Android源码]Android源码之高仿飞鸽传书WIFI热点搜索与创建(一)
- 微型计算机方面的论文,微型计算机论文.doc
- 作者:王建新(1969-),博士,中南大学信息科学与工程学院教授,中国计算机学会高级会员。...
- 配置tomcat 7控制台账号
- tensorrt安装_基于TensorRT的BERT推断加速与服务部署
- linux环境配置sonarqube
- Node.js:npm下载很慢,设置国内淘宝镜像
- 基础知识(四)C++常用函数.txt
- 【 PG 入门系列 】PostgreSQL的客户端工具(五)
- 分布式室内空气质量监测系统设计
- 基于STM32(F103ZE)的LD3320语音控制系统
- 计算机组成原理期末复习
- 最简单小米设备怎么不root激活xposed框架
- Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸
- 跨境电商如何搭建独立站?
- Python爬虫之bili站的正确打开方式
- Android textview设置ttf字体库本地库和网络库使用的两种方式