42 #include <pcl/ml/feature_handler.h>
43 #include <pcl/ml/ferns/fern.h>
44 #include <pcl/ml/stats_estimator.h>
48 template <
class FeatureType,
57 template <
class FeatureType,
66 template <
class FeatureType,
77 std::vector<ExampleIndex>& examples,
78 std::vector<LabelType>& label_data)
80 const std::size_t num_of_examples = examples.size();
84 label_data.resize(num_of_examples);
86 std::vector<std::vector<float>> results(num_of_features);
87 std::vector<std::vector<unsigned char>> flags(num_of_features);
88 std::vector<std::vector<unsigned char>> branch_indices(num_of_features);
90 for (std::size_t feature_index = 0; feature_index < num_of_features;
92 results[feature_index].reserve(num_of_examples);
93 flags[feature_index].reserve(num_of_examples);
94 branch_indices[feature_index].reserve(num_of_examples);
99 results[feature_index],
100 flags[feature_index]);
102 flags[feature_index],
104 branch_indices[feature_index]);
107 for (std::size_t example_index = 0; example_index < num_of_examples;
109 std::size_t node_index = 0;
110 for (std::size_t feature_index = 0; feature_index < num_of_features;
112 node_index *= num_of_branches;
113 node_index += branch_indices[feature_index][example_index];
116 label_data[example_index] = stats_estimator.
getLabelOfNode(fern[node_index]);
120 template <
class FeatureType,
133 std::vector<ExampleIndex>& examples,
134 std::vector<LabelType>& label_data)
136 const std::size_t num_of_examples = examples.size();
140 std::vector<std::vector<float>> results(num_of_features);
141 std::vector<std::vector<unsigned char>> flags(num_of_features);
142 std::vector<std::vector<unsigned char>> branch_indices(num_of_features);
144 for (std::size_t feature_index = 0; feature_index < num_of_features;
146 results[feature_index].reserve(num_of_examples);
147 flags[feature_index].reserve(num_of_examples);
148 branch_indices[feature_index].reserve(num_of_examples);
153 results[feature_index],
154 flags[feature_index]);
156 flags[feature_index],
158 branch_indices[feature_index]);
161 for (std::size_t example_index = 0; example_index < num_of_examples;
163 std::size_t node_index = 0;
164 for (std::size_t feature_index = 0; feature_index < num_of_features;
166 node_index *= num_of_branches;
167 node_index += branch_indices[feature_index][example_index];
170 label_data[example_index] = stats_estimator.
getLabelOfNode(fern[node_index]);
174 template <
class FeatureType,
185 std::vector<ExampleIndex>& examples,
186 std::vector<NodeType*>& nodes)
188 const std::size_t num_of_examples = examples.size();
192 nodes.reserve(num_of_examples);
194 std::vector<std::vector<float>> results(num_of_features);
195 std::vector<std::vector<unsigned char>> flags(num_of_features);
196 std::vector<std::vector<unsigned char>> branch_indices(num_of_features);
198 for (std::size_t feature_index = 0; feature_index < num_of_features;
200 results[feature_index].reserve(num_of_examples);
201 flags[feature_index].reserve(num_of_examples);
202 branch_indices[feature_index].reserve(num_of_examples);
207 results[feature_index],
208 flags[feature_index]);
210 flags[feature_index],
212 branch_indices[feature_index]);
215 for (std::size_t example_index = 0; example_index < num_of_examples;
217 std::size_t node_index = 0;
218 for (std::size_t feature_index = 0; feature_index < num_of_features;
220 node_index *= num_of_branches;
221 node_index += branch_indices[feature_index][example_index];
224 nodes.push_back(&(fern[node_index]));