Use el filtro VoxelGrid para lograr una nube de puntos dispersa

Filtro VoxelGrid

Use el método de cuadrícula de vóxel para lograr la reducción de resolución, es decir, reducir la cantidad de puntos, reducir los datos de la nube de puntos y guardar las características de forma de la nube de puntos al mismo tiempo. Es muy práctico para mejorar la velocidad de algoritmos como registro, reconstrucción de superficies y reconocimiento de formas PCL es la realización La clase VoxelGrid crea una cuadrícula de vóxeles tridimensional a través de los datos de la nube de puntos de entrada y utiliza el centro de gravedad de todos los puntos en cada vóxel para aproximar otros puntos en el vóxel, para que todos los puntos en el vóxel usen un El centro de gravedad puntos finalmente representan, para todos los vóxeles procesados ​​para obtener una nube de puntos filtrada, este método es más lento que el método de aproximación con centro de vóxel, pero es más preciso para la representación de la superficie correspondiente a los puntos de muestra.
El filtro VoxelGrid utiliza un método de cuadrícula de vóxeles para reducir la resolución y mantener las características de forma de la nube de puntos;

  1. Específicamente: la clase voxelGrid crea una cuadrícula de vóxel tridimensional en datos de nube de puntos y luego usa el centro de gravedad de cada vóxel para aproximar otros puntos en el vóxel.
  2. Evaluación: Este método es más lento que el método de aproximación al centro del vóxel, pero es más preciso al representar la superficie correspondiente al punto de muestreo;

Código

/*
 * @Description: 2VoxelGrid滤波器对点云进行下采样    https://www.cnblogs.com/li-yao7758258/p/6445831.html
 * @Author: HCQ
 * @Company(School): UCAS
 * @Email: [email protected]
 * @Date: 2020-10-20 10:50:23
 * @LastEditTime: 2020-10-20 11:00:48
 * @FilePath: /pcl-learning/09filters滤波/2VoxelGrid滤波器对点云进行下采样/voxel_grid.cpp
 */
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>


int
main (int argc, char** argv)
{
    
    

  pcl::PCLPointCloud2::Ptr cloud (new pcl::PCLPointCloud2 ());
  pcl::PCLPointCloud2::Ptr cloud_filtered (new pcl::PCLPointCloud2 ());

  //点云对象的读取
  pcl::PCDReader reader;
 
  reader.read ("../table_scene_lms400.pcd", *cloud);    //读取点云到cloud中

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

  /******************************************************************************
  创建一个voxel叶大小为1cm的pcl::VoxelGrid滤波器,
**********************************************************************************/
  pcl::VoxelGrid<pcl::PCLPointCloud2> sor;  //创建滤波对象
  sor.setInputCloud (cloud);            //设置需要过滤的点云给滤波对象
  sor.setLeafSize (0.01f, 0.01f, 0.01f);  //设置滤波时创建的体素体积为1cm的立方体
  sor.filter (*cloud_filtered);           //执行滤波处理,存储输出

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

  pcl::PCDWriter writer;
  writer.write ("../table_scene_lms400_downsampled.pcd", *cloud_filtered, 
         Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), false);

  return (0);
}

Efecto

Los resultados de visualización de la nube de puntos original y la nube de puntos filtrada se puede ver claramente que la densidad y el orden de los puntos son diferentes.Aunque la cantidad de datos después del procesamiento se reduce considerablemente, es obvio que las características de la forma y la información de la estructura espacial contenidas son diferentes de las de la nube de puntos original.La nube de puntos original es aproximadamente la misma.
El punto rojo son los datos de la nube de puntos después de la reducción de resolución
inserte la descripción de la imagen aquí

referencia

https://www.yuque.com/huangzhongqing/pcl/ai96k5#Pj8Fd

Supongo que te gusta

Origin blog.csdn.net/weixin_42990464/article/details/131239643
Recomendado
Clasificación