使用PCL实现LAS点云数据抽稀(即降采样)

PCL中的VoxelGrid类提供了降采样功能,使用VoxelGrid可方便的实现点云数据抽稀,请看代码:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include "LasLoader.h"
#include "PointCloudViewer.h"

int main()
{
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud = LasLoader::loadLas("420-432_realColor_small_Cloud.las");
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGBA>());

    std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height
        << " data points (" << pcl::getFieldsList(*cloud) << ")." << std::endl;

    // Create the filtering object
    pcl::VoxelGrid<pcl::PointXYZRGBA> sor;
    sor.setInputCloud(cloud);
    sor.setLeafSize(2.01f, 2.01f, 2.01f);
    sor.filter(*cloud_filtered);

    std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height
        << " data points (" << pcl::getFieldsList(*cloud_filtered) << ")." << std::endl;

    PointCloudViewer viewer;
    viewer.showCloud(cloud);
    PointCloudViewer viewer2;
    viewer2.showCloud(cloud_filtered);
    while (viewer.isDone() == false || viewer2.isDone() == false)
    {
        if (viewer.isDone() == false)
        {
            viewer.renderFrame();
        }
        if (viewer2.isDone() == false)
        {
            viewer2.renderFrame();
        }
    }

    return (0);
}

LasLoader和PointCloudViewer的源码参见文章:如何使用OSG引擎显示PCL的点云数据?

完整Visual Studio 2017工程下载:Filtering-Downsample.rar


芸芸小站首发,阅读原文:


最后编辑:2021年10月07日 ©版权所有,转载须保留原文链接