cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
iss_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 iss_keypoint_extractor_t
58 : public base_keypoint_extractor_t<iss_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_salient_radius(data_type radius) { m_salient_radius = radius; }
110
117 void set_non_maxima_radius(data_type radius) { m_non_maxima_radius = radius; }
118
125 void set_threshold21(data_type threshold) { m_threshold21 = threshold; }
126
133 void set_threshold32(data_type threshold) { m_threshold32 = threshold; }
134
139 void set_min_neighbors(std::size_t min_neighbors) { m_min_neighbors = min_neighbors; }
140
145 [[nodiscard]] data_type get_salient_radius() const { return m_salient_radius; }
146
151 [[nodiscard]] data_type get_non_maxima_radius() const { return m_non_maxima_radius; }
152
157 [[nodiscard]] data_type get_threshold21() const { return m_threshold21; }
158
163 [[nodiscard]] data_type get_threshold32() const { return m_threshold32; }
164
169 [[nodiscard]] std::size_t get_min_neighbors() const { return m_min_neighbors; }
170
171private:
177 struct ISSInfo
178 {
179 data_type eigenvalue1;
180 data_type eigenvalue2;
181 data_type eigenvalue3;
182 data_type saliency;
183 bool is_valid;
184 };
185
191 ISSInfo compute_iss_response(std::size_t point_idx);
192
197 std::vector<ISSInfo> compute_all_iss_responses();
198
204 indices_vector apply_non_maxima_suppression(const std::vector<ISSInfo>& iss_responses);
205
212 void compute_iss_range(std::vector<ISSInfo>& iss_responses,
213 std::size_t start_idx,
214 std::size_t end_idx);
215
216 // 成员变量 / Member variables
217 bool m_enable_parallel = false;
218 data_type m_salient_radius = static_cast<data_type>(1.0);
219 data_type m_non_maxima_radius = static_cast<data_type>(0.5);
220 data_type m_threshold21 = static_cast<data_type>(0.975);
221 data_type m_threshold32 = static_cast<data_type>(0.975);
222 std::size_t m_min_neighbors = 5;
223
224 point_cloud_ptr m_cloud;
225 knn_type* m_knn = nullptr;
226
230 static constexpr std::size_t k_parallel_threshold = 1000;
231}; // class iss_keypoint_extractor_t
232
233} // namespace toolbox::pcl
234
关键点提取器的基类,使用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
ISS (Intrinsic Shape Signatures) 关键点提取器 / ISS (Intrinsic Shape Signatures) keypoint extractor.
Definition iss_keypoints.hpp:61
data_type get_threshold21() const
获取λ2/λ1阈值 / Get λ2/λ1 threshold
Definition iss_keypoints.hpp:157
void set_salient_radius(data_type radius)
设置显著性半径 / Set saliency radius
Definition iss_keypoints.hpp:109
data_type get_threshold32() const
获取λ3/λ2阈值 / Get λ3/λ2 threshold
Definition iss_keypoints.hpp:163
void set_threshold21(data_type threshold)
设置λ2/λ1阈值 / Set λ2/λ1 threshold
Definition iss_keypoints.hpp:125
typename base_type::indices_vector indices_vector
Definition iss_keypoints.hpp:70
typename base_type::point_cloud point_cloud
Definition iss_keypoints.hpp:68
void set_min_neighbors(std::size_t min_neighbors)
设置最小邻居数量 / Set minimum number of neighbors
Definition iss_keypoints.hpp:139
typename base_type::point_cloud_ptr point_cloud_ptr
Definition iss_keypoints.hpp:69
typename base_type::data_type data_type
Definition iss_keypoints.hpp:66
void set_non_maxima_radius(data_type radius)
设置非极大值抑制半径 / Set non-maxima suppression radius
Definition iss_keypoints.hpp:117
typename base_type::knn_type knn_type
Definition iss_keypoints.hpp:67
data_type get_non_maxima_radius() const
获取非极大值抑制半径 / Get non-maxima suppression radius
Definition iss_keypoints.hpp:151
data_type get_salient_radius() const
获取显著性半径 / Get saliency radius
Definition iss_keypoints.hpp:145
void set_threshold32(data_type threshold)
设置λ3/λ2阈值 / Set λ3/λ2 threshold
Definition iss_keypoints.hpp:133
std::size_t get_min_neighbors() const
获取最小邻居数量 / Get minimum number of neighbors
Definition iss_keypoints.hpp:169
包含点和相关数据的点云类 / A point cloud class containing points and associated data
Definition point.hpp:268
Definition base_correspondence_generator.hpp:18