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

4PCS(4-Point Congruent Sets)粗配准算法 / 4PCS coarse registration algorithm More...

#include <four_pcs_registration.hpp>

Inheritance diagram for toolbox::pcl::four_pcs_registration_t< DataType >:

Classes

struct  base_4pcs_t
 4点基结构 / 4-point base structure More...
 
struct  candidate_t
 候选匹配结构 / Candidate match structure More...
 

Public Types

using base_type = base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >
 
using transformation_t = Eigen::Matrix< DataType, 4, 4 >
 
using vector3_t = Eigen::Matrix< DataType, 3, 1 >
 
using matrix3_t = Eigen::Matrix< DataType, 3, 3 >
 
using kdtree_t = toolbox::pcl::kdtree_t< DataType >
 
- Public Types inherited from toolbox::pcl::base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >
using point_cloud = toolbox::types::point_cloud_t< DataType >
 
using point_cloud_ptr = std::shared_ptr< point_cloud >
 
using correspondences_ptr = std::shared_ptr< std::vector< correspondence_t > >
 
using result_type = registration_result_t< DataType >
 

Public Member Functions

 four_pcs_registration_t ()=default
 
 ~four_pcs_registration_t ()=default
 
void set_delta (DataType delta)
 设置配准精度delta / Set registration accuracy delta
 
DataType get_delta () const
 获取配准精度 / Get registration accuracy
 
void set_overlap (DataType overlap)
 设置重叠率估计 / Set overlap ratio estimate
 
DataType get_overlap () const
 获取重叠率 / Get overlap ratio
 
void set_sample_size (std::size_t size)
 设置采样点数 / Set number of points to sample
 
std::size_t get_sample_size () const
 获取采样点数 / Get sample size
 
void set_use_normals (bool use_normals)
 设置是否使用法向量信息 / Set whether to use normal information
 
bool get_use_normals () const
 获取是否使用法向量 / Get whether using normals
 
void set_max_normal_angle (DataType angle)
 设置最大法向量偏差角度 / Set maximum normal deviation angle
 
DataType get_max_normal_angle () const
 获取最大法向量偏差角度 / Get maximum normal deviation angle
 
void set_num_bases (std::size_t num_bases)
 设置基的数量 / Set number of bases to try
 
std::size_t get_num_bases () const
 获取基的数量 / Get number of bases
 
- Public Member Functions inherited from toolbox::pcl::base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >
 base_coarse_registration_t ()=default
 
 base_coarse_registration_t (const base_coarse_registration_t &)=delete
 
 base_coarse_registration_t (base_coarse_registration_t &&)=default
 
virtual ~base_coarse_registration_t ()=default
 
base_coarse_registration_toperator= (const base_coarse_registration_t &)=delete
 
base_coarse_registration_toperator= (base_coarse_registration_t &&)=default
 
void set_source (const point_cloud_ptr &source)
 设置源点云 / Set source point cloud
 
void set_target (const point_cloud_ptr &target)
 设置目标点云 / Set target point cloud
 
void set_correspondences (const correspondences_ptr &correspondences)
 设置初始对应关系(可选,主要用于RANSAC类算法) / Set initial correspondences (optional, mainly for RANSAC-like algorithms)
 
void set_max_iterations (std::size_t max_iterations)
 设置最大迭代次数 / Set maximum iterations
 
void set_inlier_threshold (DataType threshold)
 设置内点距离阈值 / Set inlier distance threshold
 
void set_convergence_threshold (DataType threshold)
 设置收敛阈值 / Set convergence threshold
 
void set_min_inliers (std::size_t min_inliers)
 设置最小内点数量 / Set minimum number of inliers
 
bool align (result_type &result)
 执行配准 / Perform registration
 
std::string get_algorithm_name () const
 获取算法名称 / Get algorithm name
 
void enable_parallel (bool enable=true)
 启用/禁用并行计算 / Enable/disable parallel computation
 
bool is_parallel_enabled () const
 获取并行计算状态 / Get parallel computation status
 
void set_random_seed (unsigned int seed)
 设置随机种子 / Set random seed
 

Protected Member Functions

bool align_impl (result_type &result)
 派生类实现的配准算法 / Registration algorithm implementation
 
std::string get_algorithm_name_impl () const
 获取算法名称实现 / Get algorithm name implementation
 
bool validate_input_impl () const
 额外的输入验证 / Additional input validation
 
void set_source_impl (const point_cloud_ptr &source)
 钩子函数:设置源点云时的处理 / Hook: processing when setting source cloud
 
void set_target_impl (const point_cloud_ptr &target)
 钩子函数:设置目标点云时的处理 / Hook: processing when setting target cloud
 
const std::shared_ptr< kdtree_t > & get_target_kdtree () const
 获取受保护的成员 / Get protected members
 
const std::vector< std::size_t > & get_source_samples () const
 
const std::vector< std::size_t > & get_target_samples () const
 
void sample_points (const point_cloud_ptr &cloud, std::size_t num_samples, std::vector< std::size_t > &indices)
 采样点云 / Sample point cloud
 
bool are_coplanar (const std::array< vector3_t, 4 > &points, DataType tolerance) const
 检查4个点是否共面 / Check if 4 points are coplanar
 
void compute_invariants (base_4pcs_t &base) const
 计算4点基的仿射不变量 / Compute affine invariants for 4-point base
 
transformation_t estimate_transformation (const base_4pcs_t &source_base, const base_4pcs_t &target_base) const
 估计两个4点基之间的变换 / Estimate transformation between two 4-point bases
 
DataType compute_lcp_score (const transformation_t &transform, std::vector< std::size_t > &inliers) const
 计算LCP(最大公共点集)评分 / Compute LCP (Largest Common Pointset) score
 
void refine_candidate (candidate_t &candidate) const
 精炼候选变换 / Refine candidate transformation
 
std::vector< base_4pcs_textract_coplanar_bases (const std::vector< std::size_t > &indices, const point_cloud_ptr &cloud, std::size_t num_bases) const
 提取共面4点基 / Extract coplanar 4-point bases
 
std::vector< base_4pcs_tfind_congruent_sets (const base_4pcs_t &source_base, const std::vector< std::size_t > &target_indices, const point_cloud_ptr &target_cloud) const
 寻找匹配的4点集 / Find congruent 4-point sets
 
bool is_valid_transformation (const transformation_t &transform) const
 验证变换的有效性 / Verify transformation validity
 
- Protected Member Functions inherited from toolbox::pcl::base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >
void set_source_impl (const point_cloud_ptr &)
 派生类可选实现的钩子函数 / Optional hook functions for derived classes
 
void set_target_impl (const point_cloud_ptr &)
 
void set_correspondences_impl (const correspondences_ptr &)
 
void set_max_iterations_impl (std::size_t)
 
void set_inlier_threshold_impl (DataType)
 
void set_convergence_threshold_impl (DataType)
 
void set_min_inliers_impl (std::size_t)
 
bool validate_input () const
 验证输入数据 / Validate input data
 
bool validate_input_impl () const
 派生类的额外输入验证(可选) / Additional input validation for derived class (optional)
 
DataType compute_fitness_score (const Eigen::Matrix< DataType, 4, 4 > &transformation, const std::vector< std::size_t > &inliers) const
 计算配准质量评分 / Compute registration fitness score
 
const point_cloud_ptrget_source_cloud () const
 获取受保护的成员变量访问 / Get access to protected members
 
const point_cloud_ptrget_target_cloud () const
 
const correspondences_ptrget_correspondences () const
 
std::size_t get_max_iterations () const
 
DataType get_inlier_threshold () const
 
DataType get_convergence_threshold () const
 
std::size_t get_min_inliers () const
 
unsigned int get_random_seed () const
 

Friends

class base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >
 

Detailed Description

template<typename DataType>
class toolbox::pcl::four_pcs_registration_t< DataType >

4PCS(4-Point Congruent Sets)粗配准算法 / 4PCS coarse registration algorithm

4PCS是一种鲁棒的点云配准算法,通过寻找两个点云中的共面4点集合来估计刚体变换。 该算法对噪声和部分重叠具有良好的鲁棒性。 4PCS is a robust point cloud registration algorithm that estimates rigid transformation by finding coplanar 4-point sets in two point clouds. It is robust to noise and partial overlap.

Template Parameters
DataType数据类型(如float或double) / Data type (e.g., float or double)
// 使用示例 / Usage example
fourpcs.set_source(source_cloud);
fourpcs.set_target(target_cloud);
fourpcs.set_delta(0.01f); // 配准精度 1cm
fourpcs.set_overlap(0.4f); // 40%重叠
fourpcs.set_sample_size(200); // 采样200个点
if (fourpcs.align(result)) {
std::cout << "Registration successful!" << std::endl;
}
void set_target(const point_cloud_ptr &target)
设置目标点云 / Set target point cloud
Definition base_coarse_registration.hpp:60
void set_source(const point_cloud_ptr &source)
设置源点云 / Set source point cloud
Definition base_coarse_registration.hpp:51
bool align(result_type &result)
执行配准 / Perform registration
Definition base_coarse_registration.hpp:117
4PCS(4-Point Congruent Sets)粗配准算法 / 4PCS coarse registration algorithm
Definition four_pcs_registration.hpp:42
void set_overlap(DataType overlap)
设置重叠率估计 / Set overlap ratio estimate
Definition four_pcs_registration.hpp:99
void set_delta(DataType delta)
设置配准精度delta / Set registration accuracy delta
Definition four_pcs_registration.hpp:87
void set_sample_size(std::size_t size)
设置采样点数 / Set number of points to sample
Definition four_pcs_registration.hpp:114
配准结果结构体 / Registration result structure
Definition registration_result.hpp:15

Member Typedef Documentation

◆ base_type

template<typename DataType >
using toolbox::pcl::four_pcs_registration_t< DataType >::base_type = base_coarse_registration_t<four_pcs_registration_t<DataType>, DataType>

◆ kdtree_t

template<typename DataType >
using toolbox::pcl::four_pcs_registration_t< DataType >::kdtree_t = toolbox::pcl::kdtree_t<DataType>

◆ matrix3_t

template<typename DataType >
using toolbox::pcl::four_pcs_registration_t< DataType >::matrix3_t = Eigen::Matrix<DataType, 3, 3>

◆ transformation_t

template<typename DataType >
using toolbox::pcl::four_pcs_registration_t< DataType >::transformation_t = Eigen::Matrix<DataType, 4, 4>

◆ vector3_t

template<typename DataType >
using toolbox::pcl::four_pcs_registration_t< DataType >::vector3_t = Eigen::Matrix<DataType, 3, 1>

Constructor & Destructor Documentation

◆ four_pcs_registration_t()

template<typename DataType >
toolbox::pcl::four_pcs_registration_t< DataType >::four_pcs_registration_t ( )
default

◆ ~four_pcs_registration_t()

template<typename DataType >
toolbox::pcl::four_pcs_registration_t< DataType >::~four_pcs_registration_t ( )
default

Member Function Documentation

◆ align_impl()

template<typename DataType >
bool toolbox::pcl::four_pcs_registration_t< DataType >::align_impl ( result_type result)
protected

派生类实现的配准算法 / Registration algorithm implementation

Parameters
result[out] 配准结果 / Registration result
Returns
是否成功 / Whether successful

◆ are_coplanar()

template<typename DataType >
bool toolbox::pcl::four_pcs_registration_t< DataType >::are_coplanar ( const std::array< vector3_t, 4 > &  points,
DataType  tolerance 
) const
protected

检查4个点是否共面 / Check if 4 points are coplanar

Parameters
points4个点 / 4 points
tolerance容差 / Tolerance
Returns
是否共面 / Whether coplanar

◆ compute_invariants()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::compute_invariants ( base_4pcs_t base) const
protected

计算4点基的仿射不变量 / Compute affine invariants for 4-point base

Parameters
base[in/out] 4点基 / 4-point base

◆ compute_lcp_score()

template<typename DataType >
DataType toolbox::pcl::four_pcs_registration_t< DataType >::compute_lcp_score ( const transformation_t transform,
std::vector< std::size_t > &  inliers 
) const
protected

计算LCP(最大公共点集)评分 / Compute LCP (Largest Common Pointset) score

Parameters
transform变换矩阵 / Transformation matrix
inliers[out] 内点索引 / Inlier indices
Returns
LCP评分 / LCP score

◆ estimate_transformation()

template<typename DataType >
four_pcs_registration_t< DataType >::transformation_t toolbox::pcl::four_pcs_registration_t< DataType >::estimate_transformation ( const base_4pcs_t source_base,
const base_4pcs_t target_base 
) const
protected

估计两个4点基之间的变换 / Estimate transformation between two 4-point bases

Parameters
source_base源基 / Source base
target_base目标基 / Target base
Returns
变换矩阵 / Transformation matrix

◆ extract_coplanar_bases()

template<typename DataType >
std::vector< typename four_pcs_registration_t< DataType >::base_4pcs_t > toolbox::pcl::four_pcs_registration_t< DataType >::extract_coplanar_bases ( const std::vector< std::size_t > &  indices,
const point_cloud_ptr cloud,
std::size_t  num_bases 
) const
protected

提取共面4点基 / Extract coplanar 4-point bases

Parameters
indices点索引 / Point indices
cloud点云 / Point cloud
num_bases要提取的基数量 / Number of bases to extract
Returns
4点基列表 / List of 4-point bases

◆ find_congruent_sets()

template<typename DataType >
std::vector< typename four_pcs_registration_t< DataType >::base_4pcs_t > toolbox::pcl::four_pcs_registration_t< DataType >::find_congruent_sets ( const base_4pcs_t source_base,
const std::vector< std::size_t > &  target_indices,
const point_cloud_ptr target_cloud 
) const
protected

寻找匹配的4点集 / Find congruent 4-point sets

Parameters
source_base源基 / Source base
target_indices目标点索引 / Target point indices
target_cloud目标点云 / Target point cloud
Returns
匹配的基列表 / List of congruent bases

◆ get_algorithm_name_impl()

template<typename DataType >
std::string toolbox::pcl::four_pcs_registration_t< DataType >::get_algorithm_name_impl ( ) const
inlineprotected

获取算法名称实现 / Get algorithm name implementation

Returns
算法名称 / Algorithm name

◆ get_delta()

template<typename DataType >
DataType toolbox::pcl::four_pcs_registration_t< DataType >::get_delta ( ) const
inline

获取配准精度 / Get registration accuracy

Returns
配准精度 / Registration accuracy

◆ get_max_normal_angle()

template<typename DataType >
DataType toolbox::pcl::four_pcs_registration_t< DataType >::get_max_normal_angle ( ) const
inline

获取最大法向量偏差角度 / Get maximum normal deviation angle

Returns
最大角度 / Maximum angle

◆ get_num_bases()

template<typename DataType >
std::size_t toolbox::pcl::four_pcs_registration_t< DataType >::get_num_bases ( ) const
inline

获取基的数量 / Get number of bases

Returns
基的数量 / Number of bases

◆ get_overlap()

template<typename DataType >
DataType toolbox::pcl::four_pcs_registration_t< DataType >::get_overlap ( ) const
inline

获取重叠率 / Get overlap ratio

Returns
重叠率 / Overlap ratio

◆ get_sample_size()

template<typename DataType >
std::size_t toolbox::pcl::four_pcs_registration_t< DataType >::get_sample_size ( ) const
inline

获取采样点数 / Get sample size

Returns
采样点数 / Sample size

◆ get_source_samples()

template<typename DataType >
const std::vector< std::size_t > & toolbox::pcl::four_pcs_registration_t< DataType >::get_source_samples ( ) const
inlineprotected

◆ get_target_kdtree()

template<typename DataType >
const std::shared_ptr< kdtree_t > & toolbox::pcl::four_pcs_registration_t< DataType >::get_target_kdtree ( ) const
inlineprotected

获取受保护的成员 / Get protected members

◆ get_target_samples()

template<typename DataType >
const std::vector< std::size_t > & toolbox::pcl::four_pcs_registration_t< DataType >::get_target_samples ( ) const
inlineprotected

◆ get_use_normals()

template<typename DataType >
bool toolbox::pcl::four_pcs_registration_t< DataType >::get_use_normals ( ) const
inline

获取是否使用法向量 / Get whether using normals

Returns
是否使用法向量 / Whether using normals

◆ is_valid_transformation()

template<typename DataType >
bool toolbox::pcl::four_pcs_registration_t< DataType >::is_valid_transformation ( const transformation_t transform) const
protected

验证变换的有效性 / Verify transformation validity

Parameters
transform变换矩阵 / Transformation matrix
Returns
是否有效 / Whether valid

◆ refine_candidate()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::refine_candidate ( candidate_t candidate) const
protected

精炼候选变换 / Refine candidate transformation

Parameters
candidate[in/out] 候选匹配 / Candidate match

◆ sample_points()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::sample_points ( const point_cloud_ptr cloud,
std::size_t  num_samples,
std::vector< std::size_t > &  indices 
)
protected

采样点云 / Sample point cloud

Parameters
cloud输入点云 / Input point cloud
num_samples采样数量 / Number of samples
indices[out] 采样的索引 / Sampled indices

◆ set_delta()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_delta ( DataType  delta)
inline

设置配准精度delta / Set registration accuracy delta

Parameters
delta期望的配准精度 / Desired registration accuracy

◆ set_max_normal_angle()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_max_normal_angle ( DataType  angle)
inline

设置最大法向量偏差角度 / Set maximum normal deviation angle

Parameters
angle最大角度(弧度) / Maximum angle (radians)

◆ set_num_bases()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_num_bases ( std::size_t  num_bases)
inline

设置基的数量 / Set number of bases to try

Parameters
num_bases基的数量 / Number of bases

◆ set_overlap()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_overlap ( DataType  overlap)
inline

设置重叠率估计 / Set overlap ratio estimate

Parameters
overlap重叠率(0到1之间) / Overlap ratio (between 0 and 1)

◆ set_sample_size()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_sample_size ( std::size_t  size)
inline

设置采样点数 / Set number of points to sample

Parameters
size采样点数 / Number of points to sample

◆ set_source_impl()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_source_impl ( const point_cloud_ptr source)
protected

钩子函数:设置源点云时的处理 / Hook: processing when setting source cloud

◆ set_target_impl()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_target_impl ( const point_cloud_ptr target)
protected

钩子函数:设置目标点云时的处理 / Hook: processing when setting target cloud

◆ set_use_normals()

template<typename DataType >
void toolbox::pcl::four_pcs_registration_t< DataType >::set_use_normals ( bool  use_normals)
inline

设置是否使用法向量信息 / Set whether to use normal information

Parameters
use_normalstrue使用法向量,false不使用 / true to use normals, false otherwise

◆ validate_input_impl()

template<typename DataType >
bool toolbox::pcl::four_pcs_registration_t< DataType >::validate_input_impl ( ) const
protected

额外的输入验证 / Additional input validation

Returns
是否有效 / Whether valid

Friends And Related Symbol Documentation

◆ base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >

template<typename DataType >
friend class base_coarse_registration_t< four_pcs_registration_t< DataType >, DataType >
friend

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