FilterNormalizeIntensity.cpp
Go to the documentation of this file.
1 /* -------------------------------------------------------------------------
2  * A repertory of multi primitive-to-primitive (MP2P) ICP algorithms in C++
3  * Copyright (C) 2018-2024 Jose Luis Blanco, University of Almeria
4  * See LICENSE for license information.
5  * ------------------------------------------------------------------------- */
14 #include <mrpt/containers/yaml.h>
15 #include <mrpt/core/lock_helper.h>
16 
18  FilterNormalizeIntensity, mp2p_icp_filters::FilterBase, mp2p_icp_filters)
19 
20 using namespace mp2p_icp_filters;
21 
23  const mrpt::containers::yaml& c)
24 {
25  MCP_LOAD_REQ(c, pointcloud_layer);
26  MCP_LOAD_OPT(c, remember_intensity_range);
27 }
28 
30 {
31  mrpt::system::COutputLogger::setLoggerName("FilterNormalizeIntensity");
32 }
33 
34 void FilterNormalizeIntensity::initialize(const mrpt::containers::yaml& c)
35 {
36  MRPT_START
37 
38  MRPT_LOG_DEBUG_STREAM("Loading these params:\n" << c);
40 
41  MRPT_END
42 }
43 
45 {
46  MRPT_START
47 
48  // In/out:
49  auto pcPtr = inOut.point_layer(params_.pointcloud_layer);
50  ASSERTMSG_(
51  pcPtr, mrpt::format(
52  "Input point cloud layer '%s' was not found.",
53  params_.pointcloud_layer.c_str()));
54 
55  auto& pc = *pcPtr;
56 
57  auto* IsPtr = pc.getPointsBufferRef_intensity();
58 
59  ASSERTMSG_(
60  IsPtr != nullptr && !IsPtr->empty(),
61  mrpt::format(
62  "Input point cloud layer '%s' (%s) seems not to have an intensity "
63  "channel or it is empty.",
64  params_.pointcloud_layer.c_str(), pc.GetRuntimeClass()->className));
65 
66  auto& Is = *IsPtr;
67 
68  std::optional<float> minI, maxI;
69 
70  for (size_t i = 0; i < Is.size(); i++)
71  {
72  const float I = Is[i];
73 
74  if (!minI || I < *minI) minI = I;
75  if (!maxI || I > *maxI) maxI = I;
76  }
77  ASSERT_(minI && maxI);
78 
79  // Merge with range memory?
81  {
82  auto lck = mrpt::lockHelper(minMaxMtx_);
83  if (!minI_ || *minI < *minI_) minI_ = *minI;
84  if (!maxI_ || *maxI > *maxI_) maxI_ = *maxI;
85  minI = *minI_;
86  maxI = *maxI_;
87  }
88 
89  float delta = *maxI - *minI;
90  if (delta == 0) delta = 1;
91  const float delta_inv = 1.0f / delta;
92 
93  for (size_t i = 0; i < Is.size(); i++)
94  {
95  float& I = Is[i];
96 
97  I = (I - *minI) * delta_inv;
98  }
99 
100  MRPT_LOG_DEBUG_STREAM(
101  "Normalized with minI=" << *minI << " maxI=" << *maxI);
102 
103  MRPT_END
104 }
IMPLEMENTS_MRPT_OBJECT
IMPLEMENTS_MRPT_OBJECT(FilterNormalizeIntensity, mp2p_icp_filters::FilterBase, mp2p_icp_filters) using namespace mp2p_icp_filters
mp2p_icp_filters::FilterNormalizeIntensity::minI_
std::optional< float > minI_
Definition: FilterNormalizeIntensity.h:61
mp2p_icp_filters::FilterNormalizeIntensity::Parameters::load_from_yaml
void load_from_yaml(const mrpt::containers::yaml &c)
Definition: FilterNormalizeIntensity.cpp:22
mp2p_icp_filters::FilterNormalizeIntensity::filter
void filter(mp2p_icp::metric_map_t &inOut) const override
Definition: FilterNormalizeIntensity.cpp:44
mp2p_icp_filters::FilterNormalizeIntensity::FilterNormalizeIntensity
FilterNormalizeIntensity()
Definition: FilterNormalizeIntensity.cpp:29
mp2p_icp_filters::FilterNormalizeIntensity::maxI_
std::optional< float > maxI_
Definition: FilterNormalizeIntensity.h:61
mp2p_icp_filters::FilterNormalizeIntensity::params_
Parameters params_
Definition: FilterNormalizeIntensity.h:58
FilterNormalizeIntensity.h
Normalizes the intensity channel of a point cloud layer.
mp2p_icp_filters::FilterBase
Definition: FilterBase.h:46
mp2p_icp::metric_map_t::point_layer
mrpt::maps::CPointsMap::Ptr point_layer(const layer_name_t &name) const
Definition: metricmap.cpp:629
mp2p_icp_filters::FilterNormalizeIntensity::Parameters::remember_intensity_range
bool remember_intensity_range
Definition: FilterNormalizeIntensity.h:54
mp2p_icp_filters::FilterNormalizeIntensity::minMaxMtx_
std::mutex minMaxMtx_
Definition: FilterNormalizeIntensity.h:62
mp2p_icp_filters::FilterNormalizeIntensity::initialize
void initialize(const mrpt::containers::yaml &c) override
Definition: FilterNormalizeIntensity.cpp:34
mp2p_icp::metric_map_t
Generic container of pointcloud(s), extracted features and other maps.
Definition: metricmap.h:49
maxI
static const Index maxI
Definition: python/nabo.cpp:18
mp2p_icp_filters
Definition: FilterAdjustTimestamps.h:19
mp2p_icp_filters::FilterNormalizeIntensity::Parameters::pointcloud_layer
std::string pointcloud_layer
Definition: FilterNormalizeIntensity.h:52


mp2p_icp
Author(s):
autogenerated on Thu Oct 17 2024 02:45:33