目录
一、点云处理介绍:
二、Open3D文章目录:
Open3D几何部分(Geometry)
点云处理(点云IO/可视化/数据结构/下采样/凸包计算/裁减/法向量估计/聚类/隐藏点移除/平面分割/最小外接矩形/外点移除)
面片(mesh)处理(mesh可视化/IO/表面法向量估计/裁剪/滤波/采样/网格(曲面)细分/网格(曲面)简化/聚类)
点云的体素化/KDTree创建和搜索/Octree创建和搜索
点云的平移/表面重建/网格(曲面)变形/ISS关键点
Ray Casting/距离查询
Open3D中的RGB-D images(range images)使用
Open3D点云处理(Pipelines)
ICP(Iterative Closest Point)配准(粗配准/精配准/robust核函数/基于颜色的ICP)
点云的全局配准和基于位姿图优化的多点云配准
RGB-D相机介绍RGB-D文件的点云融合
RGB-D里程计(RGB-D Odometry)和RGB-D颜色优化和刚体优化
Open3D点云处理进阶
理解ICP算法和API
open3d中多尺度ICP在cpu和cuda上的实现
多种robust核函数在点到点和点到面ICP中的使用
Open3D可视化
Open3D可视化参数选择
Open3D自定义可视化/交互式可视化/非阻塞可视化
Open3D无头渲染/cpu渲染
Open3D网页可视化实现
Open3D核心数据操作
Tensor创建/属性/异构计算/数据类型
Numpy和Pytorch与Tensor的拷贝/移动/一元运算/二元运算/逻辑运算/归约/切片/索引/比较/Nonzero操作
Open3D中的Hash map实现
常见三维数据集在Open3D中的接口
点云数据集
三角面片(TriangleMesh)数据集与PBR纹理
纹理材质贴图
RGBD数据集
Open3D中使用RealSense与Azure Kinect
三、PCL文章目录:
PCL数据结构和使用示例
PCL编译、安装、使用
点云在PCL中的数据结构
自定义类型和PCL类
点云的读取/写入与拼接
PCL中3D关键点与特征处理
点云表面法向量估计
PFH(Point Feature Histograms)与FPFH(Fast Point Feature Histograms)描述子
VFH(Viewpoint Feature Histogram)描述子、range image的NARF关键点
基于描述子计算eccentricity 和 moment of inertia
PCL中RoPs和GASD特征的使用
PCL中的滤波操作
PassThrough(直通)滤波器与VoxelGrid滤波器
参数化模型投影点云
PCL中的点云索引
使用StatisticalOutlierRemoval滤波器移除离群点、用ConditionalRemoval或RadiusOutlinerRemoval移除离群点
点云的双边滤波(bilateral filter)
PCL中的KdTree与Octree
使用KdTree进行搜索
使用Octree对点云进行压缩
使用Octree进行点云空间划分和搜索
使用Octree对无序点云进行Spatial change detection
PCL中的Range Images
从点云中创建Range Image
提取Range Image的边界
PCL中的识别(Recongnition)
基于对应组(Correspondence)的3D目标识别
Implict Shape Model
三维物体识别的假设验证
PCL中的配准
PCL中的配准API
PCL中使用ICP(Iterative closest point)
使用ICP增量配准点云
交互式ICP示例
NDT(Normal Distributions Transform)配准
采样一致性介绍(Sample Consensus)
PCL中的点云分割
平面模型分割(Plane model segmentation)
圆柱体分割(Cylinder model segmentation)
欧式聚类提取(Euclidean Cluster Extration)
区域增长分割(Region Growing Segmentation)
最小剪切分割(Min-Cut Based Segmentation)
条件欧式聚类(Conditional Euclidean Clustering)
基于法线差异的分割(Difference of Normals Based Segmentation)
点云聚类成supevoxel
渐进形态学滤波器(Progressive Morphological Filter)分割地面点云
基于模型的离群值去除(ModelOutlierRemoval)
PCL中的表面重建
基于多项式重建的表面平滑与法线估计
点云平面模型凹凸多边形构建
无序点云的快速三角化
无序点云的修剪B样条表面重建
PCL中的可视化
PCL中可视化工具的使用
PCL可视化range image
PCLPlotter的使用
PCL在Qt中的应用
PCL应用篇
物体模板对齐到点云
使用VFH描述子完成聚类识别和6DOF位姿估计
使用RGB-D相机进行行人检测与行人姿态估计
移动设备的点云传输与可视化
Nidia GPU与PCL
kinectfusion三维重建介绍(Kinfu)
四、RGB-D三维重建
三维离线重建与实时重建实现
使用Open3D基于Robust Reconstruction of Indoor Scenes, CVPR, 2015实现室内离线重建
Open3D RGB-D实时重建
后续文章将会按照上面顺序进行更新!!!
一、点云处理介绍:
随着机器人在人们生活中普及以及越来越廉价的3D感知设备的到来,我们急需满足对日益增长的3维数据处理需求。例如,当机器人需要与物理世界互动时,他们需要感知周围的环境,就需要处理三维的数据。三维的数据的集中表示形式包括了点云(Point Cloud)、面片(mesh)、体素(Volumetric)、多试图深度图(Multi-view RGB-D images)。
- 点云:点云是指目标表面特性的海量点集合。包含了xyz坐标信息和反射强度、颜色、法向量等信息(从激光雷达或深度相机中获得该数据)
- Mesh:由三角面片和正方形面片组成(由点云或其他计算机建模软件生成)
- 体素:由三维栅格将物体用0和1表征(对点云进行体素化操作得到)
- 多角度的RGB图像或者RGB-D图像(标定后的多相机拍摄得到)
当前处理三维数据的主要软件有以下几种:
- Point Cloud Library(PCL):最早的开源点云处理框架,从ROS中分离出来后经过短暂的快速发展后如今出现了停滞,PCL以C++的模板编成实现,其中数学运算基于Eigen,大量使用SSE向量扩展与OpenMP并行化实现加速并使用VTK作为其可视化工具;支持Windows, macOS, Linux, Android,但在Python语言中没有对应的官方库
- Open3D:现代3D数据处理框架(包含对点云、mesh、RGB-D图片的处理),由Intel主导;后端基于C++11优化且以OpenMP并行,支持ubuntu、macOS、Windows, Open3D是在一个全新的基础上开发的并使用OPENGL提供可视化界面,并尽可能使用最少的依赖项;Open3D同时提供了Python接口和C++包,其中Python接口基于pybind11实现。使用PCL和Open3D实现相同功能时C++代码量相较于PCL少一半,python版代码是PCL C++的5分之一
- MeshLab:一个提供GUI界面的三维数据处理应用,在Windows和Linux和mac OS中都可以使用
- libigl:基于C++提供了离散微分几何处理与基于图片的模型重建
本博客将会重Open3D开始进行介绍,然后再到PCL模板库的使用,最后完成一个基于RGB-D的三维重建代码解析。
点云的主要应用包括:点云的滤波、点云的3D特征提取、点云的关键点、点云的配准、点云的kd-tree和oc-tree、点云分割、点云表面重建、点云识别、点云的IO、点云的可视化操作
二、Open3D文章目录:
-
Open3D几何部分(Geometry)
-
点云处理(点云IO/可视化/数据结构/下采样/凸包计算/裁减/法向量估计/聚类/隐藏点移除/平面分割/最小外接矩形/外点移除)
-
面片(mesh)处理(mesh可视化/IO/表面法向量估计/裁剪/滤波/采样/网格(曲面)细分/网格(曲面)简化/聚类)
-
点云的体素化/KDTree创建和搜索/Octree创建和搜索
-
点云的平移/表面重建/网格(曲面)变形/ISS关键点
-
Ray Casting/距离查询
-
Open3D中的RGB-D images(range images)使用
-
-
Open3D点云处理(Pipelines)
-
ICP(Iterative Closest Point)配准(粗配准/精配准/robust核函数/基于颜色的ICP)
-
点云的全局配准和基于位姿图优化的多点云配准
-
RGB-D相机介绍RGB-D文件的点云融合
-
RGB-D里程计(RGB-D Odometry)和RGB-D颜色优化和刚体优化
-
-
Open3D点云处理进阶
-
理解ICP算法和API
-
open3d中多尺度ICP在cpu和cuda上的实现
-
多种robust核函数在点到点和点到面ICP中的使用
-
-
Open3D可视化
-
Open3D可视化参数选择
-
Open3D自定义可视化/交互式可视化/非阻塞可视化
-
Open3D无头渲染/cpu渲染
-
Open3D网页可视化实现
-
-
Open3D核心数据操作
-
Tensor创建/属性/异构计算/数据类型
-
Numpy和Pytorch与Tensor的拷贝/移动/一元运算/二元运算/逻辑运算/归约/切片/索引/比较/Nonzero操作
-
Open3D中的Hash map实现
-
-
常见三维数据集在Open3D中的接口
-
点云数据集
-
三角面片(TriangleMesh)数据集与PBR纹理
-
纹理材质贴图
-
RGBD数据集
-
-
Open3D中使用RealSense与Azure Kinect
下图是Open3D的所有模块说明例图
三、PCL文章目录:
-
PCL数据结构和使用示例
-
PCL编译、安装、使用
-
点云在PCL中的数据结构
-
自定义类型和PCL类
-
点云的读取/写入与拼接
-
-
PCL中3D关键点与特征处理
-
点云表面法向量估计
-
PFH(Point Feature Histograms)与FPFH(Fast Point Feature Histograms)描述子
-
VFH(Viewpoint Feature Histogram)描述子、range image的NARF关键点
-
基于描述子计算eccentricity 和 moment of inertia
-
PCL中RoPs和GASD特征的使用
-
-
PCL中的滤波操作
-
PassThrough(直通)滤波器与VoxelGrid滤波器
-
参数化模型投影点云
-
PCL中的点云索引
-
使用StatisticalOutlierRemoval滤波器移除离群点、用ConditionalRemoval或RadiusOutlinerRemoval移除离群点
-
点云的双边滤波(bilateral filter)
-
-
PCL中的KdTree与Octree
-
使用KdTree进行搜索
-
使用Octree对点云进行压缩
-
使用Octree进行点云空间划分和搜索
-
使用Octree对无序点云进行Spatial change detection
-
-
PCL中的Range Images
-
从点云中创建Range Image
-
提取Range Image的边界
-
-
PCL中的识别(Recongnition)
-
基于对应组(Correspondence)的3D目标识别
-
Implict Shape Model
-
三维物体识别的假设验证
-
-
PCL中的配准
-
PCL中的配准API
-
PCL中使用ICP(Iterative closest point)
-
使用ICP增量配准点云
-
交互式ICP示例
-
NDT(Normal Distributions Transform)配准
-
-
采样一致性介绍(Sample Consensus)
-
PCL中的点云分割
-
平面模型分割(Plane model segmentation)
-
圆柱体分割(Cylinder model segmentation)
-
欧式聚类提取(Euclidean Cluster Extration)
-
区域增长分割(Region Growing Segmentation)
-
最小剪切分割(Min-Cut Based Segmentation)
-
条件欧式聚类(Conditional Euclidean Clustering)
-
基于法线差异的分割(Difference of Normals Based Segmentation)
-
点云聚类成supevoxel
-
渐进形态学滤波器(Progressive Morphological Filter)分割地面点云
-
基于模型的离群值去除(ModelOutlierRemoval)
-
-
PCL中的表面重建
-
基于多项式重建的表面平滑与法线估计
-
点云平面模型凹凸多边形构建
-
无序点云的快速三角化
-
无序点云的修剪B样条表面重建
-
-
PCL中的可视化
-
PCL中可视化工具的使用
-
PCL可视化range image
-
PCLPlotter的使用
-
PCL在Qt中的应用
-
-
PCL应用篇
-
物体模板对齐到点云
-
使用VFH描述子完成聚类识别和6DOF位姿估计
-
使用RGB-D相机进行行人检测与行人姿态估计
-
移动设备的点云传输与可视化
-
Nidia GPU与PCL
-
kinectfusion三维重建介绍(Kinfu)
-
PCL中的代码库描述:
libpcl filters: implements data filters such as downsampling, outlier removal, indices extraction, projections,etc; libpcl features: implements many 3D features such as surface normals and curvatures, boundary point estimation,moment invariants, principal curvatures, PFH and FPFH descriptors, spin images, integral images, NARF descriptors, RIFT, RSD, VFH, SIFT on intensity data,etc; libpcl io: implements I/O operations such as writing to/reading from PCD (Point Cloud Data) files; libpcl segmentation: implements cluster extraction,model fitting via sample consensus methods for a variety of parametric models (planes, cylinders, spheres, lines, etc), polygonal prism extraction, etc libpcl surface: implements surface reconstruction techniques, meshing, convex hulls, Moving Least Squares,etc; libpcl registration: implements point cloud registration methods such as ICP, etc; libpcl keypoints: implements different keypoint extraction methods, that can be used as a preprocessing step to decide where to extract feature descriptors; libpcl range image: implements support for range images created from point cloud datasets.
模块间的依赖关系图:
四、RGB-D三维重建
-
三维离线重建与实时重建实现
-
使用Open3D基于Robust Reconstruction of Indoor Scenes, CVPR, 2015实现室内离线重建
-
Open3D RGB-D实时重建
-
所有示例与代码均基于Ubuntu实现,在windows的同学也建议转到基于linux的操作系统下来;很多工程文件代码也都是在linux下配置更加方便。