15 #include <mrpt/containers/yaml.h>
32 "At least one of 'output_layer_low_intensity' or "
33 "'output_layer_low_intensity' or 'output_layer_mid_intensity' must be "
44 MRPT_LOG_DEBUG_STREAM(
"Loading these params:\n" << c);
59 const auto& pc = *pcPtr;
66 pcPtr->GetRuntimeClass()->className);
68 if (outLow) outLow->reserve(outLow->size() + pc.size() / 10);
74 pcPtr->GetRuntimeClass()->className);
76 if (outHigh) outHigh->reserve(outHigh->size() + pc.size() / 10);
82 pcPtr->GetRuntimeClass()->className);
84 if (outMid) outMid->reserve(outMid->size() + pc.size() / 10);
87 outLow || outHigh || outMid,
88 "At least one of 'output_layer_low_intensity' or "
89 "'output_layer_low_intensity' or 'output_layer_mid_intensity' must be "
92 const auto& xs = pc.getPointsBufferRef_x();
95 const auto* ptrI = pc.getPointsBufferRef_intensity();
96 if (!ptrI || ptrI->empty())
99 "Error: this filter needs the input layer '%s' to has an "
105 const auto& Is = *ptrI;
106 ASSERT_EQUAL_(Is.size(), xs.size());
107 const size_t N = xs.size();
109 size_t countLow = 0, countMid = 0, countHigh = 0;
111 for (
size_t i = 0; i < N; i++)
113 const float I = Is[i];
115 mrpt::maps::CPointsMap* trg =
nullptr;
133 if (trg) trg->insertPointFrom(pc, i);
136 MRPT_LOG_DEBUG_STREAM(
137 "[FilterByIntensity] Input points=" << N <<
" low=" << countLow <<
" mid=" << countMid
138 <<
" high=" << countHigh);