cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
toolbox::pcl::pca_norm_extractor_t< DataType, KNN > Class Template Reference

基于PCA的法向量提取器 / PCA-based normal extractor More...

#include <pca_norm.hpp>

Inheritance diagram for toolbox::pcl::pca_norm_extractor_t< DataType, KNN >:

Public Types

using base_type = base_norm_extractor_t< pca_norm_extractor_t< DataType, KNN >, DataType, KNN >
 
using data_type = typename base_type::data_type
 
using knn_type = typename base_type::knn_type
 
using point_cloud = typename base_type::point_cloud
 
using point_cloud_ptr = typename base_type::point_cloud_ptr
 

Public Member Functions

std::size_t set_input_impl (const point_cloud &cloud)
 设置输入点云的实现 / Implementation of setting input point cloud
 
std::size_t set_input_impl (const point_cloud_ptr &cloud)
 设置输入点云的实现(智能指针版本) / Implementation of setting input point cloud (smart pointer version)
 
std::size_t set_knn_impl (const knn_type &knn)
 设置KNN搜索算法的实现 / Implementation of setting KNN search algorithm
 
std::size_t set_num_neighbors_impl (std::size_t num_neighbors)
 设置近邻数量的实现 / Implementation of setting number of neighbors
 
point_cloud extract_impl ()
 提取法向量的实现 / Implementation of extracting normals
 
void extract_impl (point_cloud_ptr output)
 提取法向量到指定输出的实现 / Implementation of extracting normals to specified output
 
void enable_parallel (bool enable)
 启用或禁用并行计算 / Enable or disable parallel computation
 

Detailed Description

template<typename DataType, typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
class toolbox::pcl::pca_norm_extractor_t< DataType, KNN >

基于PCA的法向量提取器 / PCA-based normal extractor

该类使用主成分分析(PCA)来估计点云中每个点的法向量。通过分析每个点的邻域, 计算协方差矩阵的特征向量,最小特征值对应的特征向量即为法向量方向。 This class uses Principal Component Analysis (PCA) to estimate normals for each point in the point cloud. By analyzing the neighborhood of each point, it computes the eigenvectors of the covariance matrix, where the eigenvector corresponding to the smallest eigenvalue represents the normal direction.

Template Parameters
DataType数据类型(如float或double) / Data type (e.g., float or double)
KNNKNN搜索算法类型,默认为kdtree_generic_t / KNN search algorithm type, default is kdtree_generic_t
// 基本使用示例 / Basic usage example
point_cloud_t<float> cloud = load_point_cloud("data.pcd");
// 设置输入和参数 / Set input and parameters
norm_extractor.set_input(cloud);
norm_extractor.set_num_neighbors(30); // 使用30个近邻点 / Use 30 neighbors
// 提取法向量 / Extract normals
point_cloud_t<float> normals = norm_extractor.extract();
基于PCA的法向量提取器 / PCA-based normal extractor
Definition pca_norm.hpp:56
// 使用并行计算加速 / Using parallel computation for acceleration
norm_extractor.enable_parallel(true); // 启用并行 / Enable parallel
norm_extractor.set_input(large_cloud);
norm_extractor.set_num_neighbors(50);
// 使用自定义KNN算法 / Using custom KNN algorithm
norm_extractor.set_knn(custom_knn);
auto normals = norm_extractor.extract();
Definition bfknn_parallel.hpp:14
void enable_parallel(bool enable)
启用或禁用并行计算 / Enable or disable parallel computation
Definition pca_norm.hpp:120

Member Typedef Documentation

◆ base_type

template<typename DataType , typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
using toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::base_type = base_norm_extractor_t<pca_norm_extractor_t<DataType, KNN>, DataType, KNN>

◆ data_type

template<typename DataType , typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
using toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::data_type = typename base_type::data_type

◆ knn_type

template<typename DataType , typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
using toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::knn_type = typename base_type::knn_type

◆ point_cloud

template<typename DataType , typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
using toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::point_cloud = typename base_type::point_cloud

◆ point_cloud_ptr

template<typename DataType , typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
using toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::point_cloud_ptr = typename base_type::point_cloud_ptr

Member Function Documentation

◆ enable_parallel()

template<typename DataType , typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
void toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::enable_parallel ( bool  enable)
inline

启用或禁用并行计算 / Enable or disable parallel computation

Parameters
enabletrue启用并行,false禁用 / true to enable parallel, false to disable
// 对于大规模点云,启用并行可显著提升性能 / For large point clouds, enabling parallel can significantly improve performance
if (cloud.size() > 10000) {
norm_extractor.enable_parallel(true);
}

◆ extract_impl() [1/2]

template<typename DataType , typename KNN >
pca_norm_extractor_t< DataType, KNN >::point_cloud toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::extract_impl ( )

提取法向量的实现 / Implementation of extracting normals

Returns
包含法向量的点云 / Point cloud containing normals

◆ extract_impl() [2/2]

template<typename DataType , typename KNN >
void toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::extract_impl ( point_cloud_ptr  output)

提取法向量到指定输出的实现 / Implementation of extracting normals to specified output

Parameters
output[out] 输出点云的智能指针 / Smart pointer to output point cloud

◆ set_input_impl() [1/2]

template<typename DataType , typename KNN >
std::size_t toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::set_input_impl ( const point_cloud cloud)

设置输入点云的实现 / Implementation of setting input point cloud

Parameters
cloud输入点云 / Input point cloud
Returns
点云中的点数 / Number of points in the cloud

◆ set_input_impl() [2/2]

template<typename DataType , typename KNN >
std::size_t toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::set_input_impl ( const point_cloud_ptr cloud)

设置输入点云的实现(智能指针版本) / Implementation of setting input point cloud (smart pointer version)

Parameters
cloud输入点云的智能指针 / Smart pointer to input point cloud
Returns
点云中的点数 / Number of points in the cloud

◆ set_knn_impl()

template<typename DataType , typename KNN >
std::size_t toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::set_knn_impl ( const knn_type knn)

设置KNN搜索算法的实现 / Implementation of setting KNN search algorithm

Parameters
knnKNN搜索算法对象 / KNN search algorithm object
Returns
设置结果 / Setting result

◆ set_num_neighbors_impl()

template<typename DataType , typename KNN >
std::size_t toolbox::pcl::pca_norm_extractor_t< DataType, KNN >::set_num_neighbors_impl ( std::size_t  num_neighbors)

设置近邻数量的实现 / Implementation of setting number of neighbors

Parameters
num_neighbors近邻数量 / Number of neighbors
Returns
实际设置的近邻数量 / Actually set number of neighbors
Note
建议使用10-50个近邻点,太少可能导致不稳定,太多会过度平滑 / It's recommended to use 10-50 neighbors, too few may cause instability, too many will over-smooth

The documentation for this class was generated from the following files: