cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
curvature_keypoints.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cpp-toolbox/cpp-toolbox_export.hpp>
8
9namespace toolbox::pcl
10{
11
56template<typename DataType, typename KNN = kdtree_generic_t<point_t<DataType>, toolbox::metrics::L2Metric<DataType>>>
57class CPP_TOOLBOX_EXPORT curvature_keypoint_extractor_t
58 : public base_keypoint_extractor_t<curvature_keypoint_extractor_t<DataType, KNN>,
59 DataType,
60 KNN>
61{
62public:
64 DataType,
65 KNN>;
67 using knn_type = typename base_type::knn_type;
71
73
77 std::size_t set_input_impl(const point_cloud& cloud);
78 std::size_t set_input_impl(const point_cloud_ptr& cloud);
79
83 std::size_t set_knn_impl(const knn_type& knn);
84
88 std::size_t set_search_radius_impl(data_type radius);
89
93 void enable_parallel_impl(bool enable);
94
98 indices_vector extract_impl();
99 void extract_impl(indices_vector& keypoint_indices);
100 point_cloud extract_keypoints_impl();
101 void extract_keypoints_impl(point_cloud_ptr output);
102
109 void set_curvature_threshold(data_type threshold) { m_curvature_threshold = threshold; }
110
117 void set_min_neighbors(std::size_t min_neighbors) { m_min_neighbors = min_neighbors; }
118
125 void set_non_maxima_radius(data_type radius) { m_non_maxima_radius = radius; }
126
131 [[nodiscard]] data_type get_curvature_threshold() const { return m_curvature_threshold; }
132
137 [[nodiscard]] std::size_t get_min_neighbors() const { return m_min_neighbors; }
138
143 [[nodiscard]] data_type get_non_maxima_radius() const { return m_non_maxima_radius; }
144
145private:
151 struct CurvatureInfo
152 {
153 data_type principal_curvature_1;
154 data_type principal_curvature_2;
155 data_type mean_curvature;
156 data_type gaussian_curvature;
157 data_type curvature_magnitude;
158 };
159
165 CurvatureInfo compute_curvature(std::size_t point_idx);
166
171 std::vector<CurvatureInfo> compute_all_curvatures();
172
178 indices_vector apply_non_maxima_suppression(const std::vector<CurvatureInfo>& curvatures);
179
186 void compute_curvatures_range(std::vector<CurvatureInfo>& curvatures,
187 std::size_t start_idx,
188 std::size_t end_idx);
189
190 // 成员变量 / Member variables
191 bool m_enable_parallel = false;
192 data_type m_search_radius = static_cast<data_type>(1.0);
193 data_type m_curvature_threshold = static_cast<data_type>(0.01);
194 data_type m_non_maxima_radius = static_cast<data_type>(0.5);
195 std::size_t m_min_neighbors = 10;
196
197 point_cloud_ptr m_cloud;
198 knn_type* m_knn = nullptr;
199
203 static constexpr std::size_t k_parallel_threshold = 1000;
204}; // class curvature_keypoint_extractor_t
205
206} // namespace toolbox::pcl
207
关键点提取器的基类,使用CRTP模式实现静态多态 / Base class for keypoint extractors using CRTP pattern for static polymorph...
Definition base_feature_extractor.hpp:44
DataType data_type
Definition base_feature_extractor.hpp:46
KNN knn_type
Definition base_feature_extractor.hpp:47
std::vector< std::size_t > indices_vector
Definition base_feature_extractor.hpp:50
std::shared_ptr< toolbox::types::point_cloud_t< data_type > > point_cloud_ptr
Definition base_feature_extractor.hpp:49
基于曲率的关键点提取器 / Curvature-based keypoint extractor
Definition curvature_keypoints.hpp:61
typename base_type::point_cloud point_cloud
Definition curvature_keypoints.hpp:68
std::size_t get_min_neighbors() const
获取最小邻居数量 / Get minimum number of neighbors
Definition curvature_keypoints.hpp:137
data_type get_curvature_threshold() const
获取曲率阈值 / Get curvature threshold
Definition curvature_keypoints.hpp:131
typename base_type::point_cloud_ptr point_cloud_ptr
Definition curvature_keypoints.hpp:69
void set_non_maxima_radius(data_type radius)
设置非极大值抑制半径 / Set non-maxima suppression radius
Definition curvature_keypoints.hpp:125
void set_curvature_threshold(data_type threshold)
设置曲率阈值 / Set curvature threshold
Definition curvature_keypoints.hpp:109
data_type get_non_maxima_radius() const
获取非极大值抑制半径 / Get non-maxima suppression radius
Definition curvature_keypoints.hpp:143
typename base_type::data_type data_type
Definition curvature_keypoints.hpp:66
void set_min_neighbors(std::size_t min_neighbors)
设置最小邻居数量 / Set minimum number of neighbors
Definition curvature_keypoints.hpp:117
typename base_type::knn_type knn_type
Definition curvature_keypoints.hpp:67
typename base_type::indices_vector indices_vector
Definition curvature_keypoints.hpp:70
包含点和相关数据的点云类 / A point cloud class containing points and associated data
Definition point.hpp:268
Definition base_correspondence_generator.hpp:18