23 namespace PCLSupportTools {
68 template <
typename POINT_CLOUD_TYPE>
70 const std::string &floatPointMemberName=
"intensityReplacement",
71 const bool calculateMedian=
false)
74 const size_t numPoints = pointCloud.points.size();
80 std::vector<float> vals;
81 if (calculateMedian){ vals.resize(numPoints); }
83 for (
size_t c=0; c < numPoints; ++c){
84 const unsigned char *pointBase =
reinterpret_cast<const unsigned char*
>(&(pointCloud.points[c].x));
85 const float fltPntVal = *
reinterpret_cast<const float *
>(pointBase + memberOffset);
86 const double pntVal = fltPntVal;
90 stats.
sumAbsolute += pntVal < 0. ? -pntVal : pntVal;
91 if (calculateMedian){ vals[c] = fltPntVal; }
94 stats.
average = stats.
sum /
static_cast<double>(numPoints);
97 std::sort(vals.begin(), vals.end());
98 stats.
median = vals[numPoints/2];
109 template <
typename POINT_CLOUD_TYPE>
110 inline float getMedian(
const POINT_CLOUD_TYPE &pointCloud,
111 const std::string &floatPointMemberName)
114 const size_t numPoints = pointCloud.points.size();
118 std::vector<float> vals;
119 vals.resize(numPoints);
120 for (
size_t c=0; c < numPoints; ++c){
121 const unsigned char *pointBase =
reinterpret_cast<const unsigned char*
>(&(pointCloud.points[c].x));
122 vals[c] = *
reinterpret_cast<const float *
>(pointBase + memberOffset);
124 std::sort(vals.begin(), vals.end());
125 median = vals[numPoints/2];
Project global and OS specific declarations.
Basic types used in the MeVislab binding of the Point Cloud Library(PCL).
#define ML_SIZE_T_MAX
For convenience the maximum value of size_t without "U" which is probably more the expected naming.