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

法向量提取器的基类(CRTP模式) / Base class for normal extractors (CRTP pattern) More...

#include <base_norm.hpp>

Public Types

using data_type = DataType
 
using knn_type = KNN
 
using point_type = toolbox::types::point_t< data_type >
 
using point_cloud = toolbox::types::point_cloud_t< data_type >
 
using point_cloud_ptr = std::shared_ptr< toolbox::types::point_cloud_t< data_type > >
 

Public Member Functions

 base_norm_extractor_t ()=default
 
 ~base_norm_extractor_t ()=default
 
std::size_t set_input (const point_cloud &cloud)
 设置输入点云 / Set input point cloud
 
std::size_t set_input (const point_cloud_ptr &cloud)
 设置输入点云(智能指针版本) / Set input point cloud (smart pointer version)
 
std::size_t set_num_neighbors (std::size_t num_neighbors)
 设置用于法向量估计的近邻数量 / Set number of neighbors for normal estimation
 
std::size_t get_num_neighbors () const noexcept
 获取当前的近邻数量设置 / Get current number of neighbors setting
 
std::size_t set_knn (const knn_type &knn)
 设置KNN搜索算法 / Set KNN search algorithm
 
point_cloud extract ()
 提取法向量 / Extract normals
 
void extract (point_cloud_ptr output)
 提取法向量到指定输出 / Extract normals to specified output
 
 base_norm_extractor_t (const base_norm_extractor_t &)=delete
 
base_norm_extractor_toperator= (const base_norm_extractor_t &)=delete
 
 base_norm_extractor_t (base_norm_extractor_t &&)=delete
 
base_norm_extractor_toperator= (base_norm_extractor_t &&)=delete
 

Detailed Description

template<typename Derived, typename DataType, typename KNN>
class toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >

法向量提取器的基类(CRTP模式) / Base class for normal extractors (CRTP pattern)

该类定义了所有法向量提取算法的通用接口,使用CRTP模式实现静态多态。 法向量是点云处理中的重要特征,用于描述局部表面的方向。 This class defines the common interface for all normal extraction algorithms, using CRTP pattern for static polymorphism. Normals are important features in point cloud processing, describing the direction of local surfaces.

Template Parameters
Derived派生类类型 / Derived class type
DataType数据类型(如float或double) / Data type (e.g., float or double)
KNNKNN搜索算法类型 / KNN search algorithm type
// 使用示例 / 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);
// 提取法向量 / Extract normals
point_cloud_t<float> normals = norm_extractor.extract();
// 每个法向量点的xyz分量表示法向量方向 / xyz components of each normal point represent the normal direction
for (const auto& normal : normals.points) {
std::cout << "法向量 / Normal: (" << normal.x << ", " << normal.y << ", " << normal.z << ")\n";
}
基于PCA的法向量提取器 / PCA-based normal extractor
Definition pca_norm.hpp:56

Member Typedef Documentation

◆ data_type

template<typename Derived , typename DataType , typename KNN >
using toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::data_type = DataType

◆ knn_type

template<typename Derived , typename DataType , typename KNN >
using toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::knn_type = KNN

◆ point_cloud

template<typename Derived , typename DataType , typename KNN >
using toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::point_cloud = toolbox::types::point_cloud_t<data_type>

◆ point_cloud_ptr

template<typename Derived , typename DataType , typename KNN >
using toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::point_cloud_ptr = std::shared_ptr<toolbox::types::point_cloud_t<data_type> >

◆ point_type

template<typename Derived , typename DataType , typename KNN >
using toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::point_type = toolbox::types::point_t<data_type>

Constructor & Destructor Documentation

◆ base_norm_extractor_t() [1/3]

template<typename Derived , typename DataType , typename KNN >
toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::base_norm_extractor_t ( )
default

◆ ~base_norm_extractor_t()

template<typename Derived , typename DataType , typename KNN >
toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::~base_norm_extractor_t ( )
default

◆ base_norm_extractor_t() [2/3]

template<typename Derived , typename DataType , typename KNN >
toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::base_norm_extractor_t ( const base_norm_extractor_t< Derived, DataType, KNN > &  )
delete

◆ base_norm_extractor_t() [3/3]

template<typename Derived , typename DataType , typename KNN >
toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::base_norm_extractor_t ( base_norm_extractor_t< Derived, DataType, KNN > &&  )
delete

Member Function Documentation

◆ extract() [1/2]

template<typename Derived , typename DataType , typename KNN >
point_cloud toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::extract ( )
inline

提取法向量 / Extract normals

Returns
包含法向量的点云,每个点的xyz表示法向量方向 / Point cloud containing normals, xyz of each point represents normal direction
// 提取并验证法向量 / Extract and verify normals
auto normals = norm_extractor.extract();
// 检查法向量是否归一化 / Check if normals are normalized
for (const auto& n : normals.points) {
float length = std::sqrt(n.x*n.x + n.y*n.y + n.z*n.z);
assert(std::abs(length - 1.0f) < 1e-6f);
}

◆ extract() [2/2]

template<typename Derived , typename DataType , typename KNN >
void toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::extract ( point_cloud_ptr  output)
inline

提取法向量到指定输出 / Extract normals to specified output

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

◆ get_num_neighbors()

template<typename Derived , typename DataType , typename KNN >
std::size_t toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::get_num_neighbors ( ) const
inlinenoexcept

获取当前的近邻数量设置 / Get current number of neighbors setting

Returns
近邻数量 / Number of neighbors

◆ operator=() [1/2]

template<typename Derived , typename DataType , typename KNN >
base_norm_extractor_t & toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::operator= ( base_norm_extractor_t< Derived, DataType, KNN > &&  )
delete

◆ operator=() [2/2]

template<typename Derived , typename DataType , typename KNN >
base_norm_extractor_t & toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::operator= ( const base_norm_extractor_t< Derived, DataType, KNN > &  )
delete

◆ set_input() [1/2]

template<typename Derived , typename DataType , typename KNN >
std::size_t toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::set_input ( const point_cloud cloud)
inline

设置输入点云 / Set input point cloud

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

◆ set_input() [2/2]

template<typename Derived , typename DataType , typename KNN >
std::size_t toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::set_input ( const point_cloud_ptr cloud)
inline

设置输入点云(智能指针版本) / Set input point cloud (smart pointer version)

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

◆ set_knn()

template<typename Derived , typename DataType , typename KNN >
std::size_t toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::set_knn ( const knn_type knn)
inline

设置KNN搜索算法 / Set KNN search algorithm

Parameters
knnKNN搜索算法对象 / KNN search algorithm object
Returns
设置结果 / Setting result
// 使用不同的KNN算法 / Using different KNN algorithms
norm_extractor.set_knn(kdtree);
Definition kdtree.hpp:14

◆ set_num_neighbors()

template<typename Derived , typename DataType , typename KNN >
std::size_t toolbox::pcl::base_norm_extractor_t< Derived, DataType, KNN >::set_num_neighbors ( std::size_t  num_neighbors)
inline

设置用于法向量估计的近邻数量 / Set number of neighbors for normal estimation

Parameters
num_neighbors近邻数量 / Number of neighbors
Returns
实际设置的近邻数量 / Actually set number of neighbors
Note
近邻数量影响法向量估计的平滑程度,较大的值产生更平滑的法向量 / The number of neighbors affects the smoothness of normal estimation, larger values produce smoother normals

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