pcod-common v1.0.0
Shared preprocessing and postprocessing for point-cloud object detection
Loading...
Searching...
No Matches
pcod_common::PointPreprocessor Class Reference

#include <point_preprocess.hpp>

Public Member Functions

 PointPreprocessor (const PointPreprocessConfig &config)
 
bool IsPointValid (float x, float y, float z) const
 
void SetZScoreStats (float mean, float stddev)
 
float NormalizePointFeature (float intensity) const
 

Detailed Description

Apply the configured geometric filters and scalar feature normalization.

Definition at line 46 of file point_preprocess.hpp.

Constructor & Destructor Documentation

◆ PointPreprocessor()

pcod_common::PointPreprocessor::PointPreprocessor ( const PointPreprocessConfig & config)
inlineexplicit
Parameters
configInitial preprocessing configuration.

Definition at line 49 of file point_preprocess.hpp.

49: config_(config) {}

Member Function Documentation

◆ IsPointValid()

bool pcod_common::PointPreprocessor::IsPointValid ( float x,
float y,
float z ) const
Parameters
xPoint X.
yPoint Y.
zPoint Z.
Returns
Whether the point passes all filters.

Definition at line 26 of file point_preprocess.cpp.

26 {
27 const bool in_range = (x >= config_.x_min && x < config_.x_max && !std::isnan(x) && y >= config_.y_min && y < config_.y_max &&
28 !std::isnan(y) && z >= config_.z_min && z < config_.z_max && !std::isnan(z));
29 if (!in_range) {
30 return false;
31 }
32
33 if (config_.det_area_remove_outside) {
34 const float delta_x = x - config_.da_cx;
35 const float delta_y = y - config_.da_cy;
36 const float squared_distance_to_center = delta_x * delta_x + delta_y * delta_y;
37 if (squared_distance_to_center > config_.da_radius * config_.da_radius) {
38 return false;
39 }
40 float angle_to_center = std::atan2(delta_y, delta_x);
41 float angle_offset = angle_to_center - config_.da_bearing_rad;
42 while (angle_offset > static_cast<float>(M_PI)) {
43 angle_offset -= static_cast<float>(2.0 * M_PI);
44 }
45 while (angle_offset < static_cast<float>(-M_PI)) {
46 angle_offset += static_cast<float>(2.0 * M_PI);
47 }
48 if (std::abs(angle_offset) > config_.da_fov_rad * 0.5F + 1e-6F) {
49 return false;
50 }
51 }
52
53 if (config_.remove_points_in_zone) {
54 const bool in_nd_zone = (x >= config_.nd_x_min && x <= config_.nd_x_max && y >= config_.nd_y_min && y <= config_.nd_y_max);
55 if (in_nd_zone) {
56 return false;
57 }
58 }
59
60 return true;
61}
bool remove_points_in_zone
Enable rectangular no-detection-zone filtering.
float da_cy
Detection-area center Y.
float x_max
Maximum accepted X coordinate.
bool det_area_remove_outside
Enable radial field-of-view filtering.
float y_min
Minimum accepted Y coordinate.
float z_min
Minimum accepted Z coordinate.
float nd_x_min
No-detection-zone minimum X.
float x_min
Minimum accepted X coordinate.
float da_radius
Detection-area radius.
float z_max
Maximum accepted Z coordinate.
float da_fov_rad
Detection-area angular width in radians.
float nd_y_max
No-detection-zone maximum Y.
float da_bearing_rad
Detection-area center bearing in radians.
float y_max
Maximum accepted Y coordinate.
float da_cx
Detection-area center X.
float nd_x_max
No-detection-zone maximum X.
float nd_y_min
No-detection-zone minimum Y.

References pcod_common::PointPreprocessConfig::da_bearing_rad, pcod_common::PointPreprocessConfig::da_cx, pcod_common::PointPreprocessConfig::da_cy, pcod_common::PointPreprocessConfig::da_fov_rad, pcod_common::PointPreprocessConfig::da_radius, pcod_common::PointPreprocessConfig::det_area_remove_outside, pcod_common::PointPreprocessConfig::nd_x_max, pcod_common::PointPreprocessConfig::nd_x_min, pcod_common::PointPreprocessConfig::nd_y_max, pcod_common::PointPreprocessConfig::nd_y_min, pcod_common::PointPreprocessConfig::remove_points_in_zone, pcod_common::PointPreprocessConfig::x_max, pcod_common::PointPreprocessConfig::x_min, pcod_common::PointPreprocessConfig::y_max, pcod_common::PointPreprocessConfig::y_min, pcod_common::PointPreprocessConfig::z_max, and pcod_common::PointPreprocessConfig::z_min.

Referenced by main().

◆ NormalizePointFeature()

float pcod_common::PointPreprocessor::NormalizePointFeature ( float intensity) const
Parameters
intensityRaw additional feature.
Returns
Normalized and clamped value.

Definition at line 68 of file point_preprocess.cpp.

68 {
70 return intensity;
71 }
73 if (config_.value_threshold <= 0.0F) {
74 return intensity;
75 }
76 const float clipped = std::min(std::max(intensity, 0.0F), config_.value_threshold);
77 return clipped / std::max(config_.value_threshold, config_.epsilon);
78 }
80 const float denom = std::max(config_.max_value - config_.min_value, config_.epsilon);
81 const float scaled = (intensity - config_.min_value) / denom;
82 return std::min(std::max(scaled, 0.0F), 1.0F);
83 }
85 return (intensity - z_score_mean_) / std::max(z_score_std_, config_.epsilon);
86 }
87 return intensity;
88}
float min_value
Minimum for min-max normalization.
float value_threshold
Divisor for value-threshold normalization.
float epsilon
Lower bound for unsafe normalization divisors.
float max_value
Maximum for min-max normalization.
PointFeatureNormalizationType normalization_type
Feature transform.

References pcod_common::PointPreprocessConfig::epsilon, pcod_common::kMinMax, pcod_common::kNone, pcod_common::kValueThreshold, pcod_common::kZScore, pcod_common::PointPreprocessConfig::max_value, pcod_common::PointPreprocessConfig::min_value, pcod_common::PointPreprocessConfig::normalization_type, and pcod_common::PointPreprocessConfig::value_threshold.

Referenced by main().

◆ SetZScoreStats()

void pcod_common::PointPreprocessor::SetZScoreStats ( float mean,
float stddev )
Parameters
meanTraining mean.
stddevTraining standard deviation.

Definition at line 63 of file point_preprocess.cpp.

63 {
64 z_score_mean_ = mean;
65 z_score_std_ = std::abs(stddev) > config_.epsilon ? stddev : config_.epsilon;
66}

References pcod_common::PointPreprocessConfig::epsilon.

Referenced by main().


The documentation for this class was generated from the following files: