PCL:PointNet点云处理原理(二)


一、Previous Works

  1. 方法介绍
ConversionDeep Net备注
Voxelization3D CNN点云数据数据珊格化后会降低分辨率,存在信息丢失
Projection/Rendering2D CNN代表方法 Multi-view CNN,对物体进行多方面的拍照再进行处理,这种方法和选取的角度多少有关,选取的角度个数多,会造成计算量的增加
Feature extractionFully Connected
  1. 挑战
    • Unordered point set as input(n个d维的点,输入顺序不同不影响几何图形)
      在这里插入图片描述

    • Invariance under geometric transformations(不同的几何变换要有不变的特性)
      在这里插入图片描述

二、PointNet++

  1. 特点
    • Hierarchical feature learning
    • Translation invariant
    • Permutation invariant
  2. Hierarchical feature learning
    Set Abstraction: sampling + grouping + pointnet
    • Sample centroids
      • Uniform sampling
      • Farthest sampling
    • Group points by centroids
      • K nearest neighbors(找到固定数量的邻近点)
      • Ball query (within range)(会查找在查询点半径范围内的所有点,在实现中设置了查询点的上限)
      • 与KNN相比,求查询的局部邻域可确保固定的区域尺寸,使局部区域的特征在整个空间中更具有通用性。
    • Apply PointNet on each point group
  3. PointNet++:improved PointNet(缺乏Hierarchical feature learning,导致丢失局部结构信息)
  4. Point Feature Propagation for set segmentation
  5. 对非均匀点云的处理方法
    • Multi-scale grouping (MSG):对同一级别的点选择不同的半径,进行特征提取,将得到的特征进行拼接
      在这里插入图片描述

    • Multi-resolution grouping (MRG):在不同级别上进行特征提取,进行拼接
      在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 VTK 显示 PCL 的点云,需要将 PCL 的点云数据转换为 VTK 的数据类型。可以使用 `pcl::visualization::PCLVisualizer` 类来实现这个功能。以下是一个简单的示例程序,展示如何使用 VTK 来显示 PCL 点云数据: ```cpp #include <pcl/point_types.h> #include <pcl/visualization/pcl_visualizer.h> #include <vtkRenderWindow.h> int main () { // 创建一个 PCL 的点云 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); cloud->width = 5; cloud->height = 1; cloud->is_dense = false; cloud->points.resize(cloud->width * cloud->height); for (size_t i = 0; i < cloud->points.size(); ++i) { cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f); cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f); } // 创建一个可视化窗口 pcl::visualization::PCLVisualizer viewer("Cloud Viewer"); // 将 PCL 的点云数据转换为 VTK 的数据类型 vtkSmartPointer<vtkPoints> vtk_points = vtkSmartPointer<vtkPoints>::New(); for (size_t i = 0; i < cloud->points.size(); ++i) { vtk_points->InsertNextPoint(cloud->points[i].x, cloud->points[i].y, cloud->points[i].z); } vtkSmartPointer<vtkPolyData> vtk_polydata = vtkSmartPointer<vtkPolyData>::New(); vtk_polydata->SetPoints(vtk_points); // 将 VTK 的数据类型添加到可视化窗口中 viewer.addModelFromPolyData(vtk_polydata, "cloud"); // 显示可视化窗口 while (!viewer.wasStopped()) { viewer.spinOnce(); } return 0; } ``` 在上面的示例程序中,我们首先创建了一个 PCL 的点云数据,并使用 `pcl::visualization::PCLVisualizer` 类创建了一个 VTK 的可视化窗口。然后,我们将 PCL 的点云数据转换为 VTK 的数据类型,并将其添加到可视化窗口中。最后,我们进入了一个循环,显示可视化窗口,直到用户关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值