14 #include <mrpt/containers/yaml.h>
15 #include <mrpt/core/lock_helper.h>
23 const mrpt::containers::yaml& c)
31 mrpt::system::COutputLogger::setLoggerName(
"FilterNormalizeIntensity");
38 MRPT_LOG_DEBUG_STREAM(
"Loading these params:\n" << c);
52 "Input point cloud layer '%s' was not found.",
57 auto* IsPtr = pc.getPointsBufferRef_intensity();
60 IsPtr !=
nullptr && !IsPtr->empty(),
62 "Input point cloud layer '%s' (%s) seems not to have an intensity "
63 "channel or it is empty.",
68 std::optional<float> minI,
maxI;
70 for (
size_t i = 0; i < Is.size(); i++)
72 const float I = Is[i];
74 if (!minI || I < *minI) minI = I;
77 ASSERT_(minI &&
maxI);
89 float delta = *
maxI - *minI;
90 if (delta == 0) delta = 1;
91 const float delta_inv = 1.0f / delta;
93 for (
size_t i = 0; i < Is.size(); i++)
97 I = (I - *minI) * delta_inv;
100 MRPT_LOG_DEBUG_STREAM(
101 "Normalized with minI=" << *minI <<
" maxI=" << *
maxI);