You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Another feature of this node is that it calculates visibility score based on outlier pointcloud and publish score as a topic.
14
+
15
+
### visibility score calculation algorithm
16
+
17
+
The pointcloud is divided into vertical bins (rings) and horizontal bins (azimuth divisions).
18
+
The algorithm starts by splitting the input point cloud into separate rings based on the ring value of each point. Then, for each ring, it iterates through the points and calculates the frequency of points within each horizontal bin. The frequency is determined by incrementing a counter for the corresponding bin based on the point's azimuth value.
19
+
The frequency values are stored in a frequency image matrix, where each cell represents a specific ring and azimuth bin. After calculating the frequency image, the algorithm applies a noise threshold to create a binary image. Points with frequency values above the noise threshold are considered valid, while points below the threshold are considered noise.
20
+
Finally, the algorithm calculates the visibility score by counting the number of non-zero pixels in the frequency image and dividing it by the total number of pixels (vertical bins multiplied by horizontal bins).
21
+
22
+
```plantuml
23
+
@startuml
24
+
start
25
+
26
+
:Convert input point cloud to PCL format;
27
+
28
+
:Initialize vertical and horizontal bins;
29
+
30
+
:Split point cloud into rings;
31
+
32
+
while (For each ring) is (not empty)
33
+
:Calculate frequency of points in each azimuth bin;
34
+
:Update frequency image matrix;
35
+
endwhile
36
+
37
+
:Apply noise threshold to create binary image;
38
+
39
+
:Count non-zero pixels in frequency image;
40
+
41
+
:Calculate visibility score as complement of filled pixel ratio;
42
+
43
+
stop
44
+
@enduml
45
+
```
46
+
13
47
## Inputs / Outputs
14
48
15
49
This implementation inherits `pointcloud_preprocessor::Filter` class, please refer [README](../README.md).
|`max_points_num_per_ring`| size_t | 4000 | Set this value large enough such that `HFoV / resolution < max_points_num_per_ring`|
32
-
|`publish_outlier_pointcloud`| bool | false | Flag to publish outlier pointcloud. Due to performance concerns, please set to false during experiments. |
|`max_points_num_per_ring`| size_t | 4000 | Set this value large enough such that `HFoV / resolution < max_points_num_per_ring`|
66
+
|`publish_outlier_pointcloud`| bool | false | Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments. |
67
+
|`min_azimuth_deg`| float | 0.0 | The left limit of azimuth for visibility score calculation |
68
+
|`max_azimuth_deg`| float | 360.0 | The right limit of azimuth for visibility score calculation |
69
+
|`max_distance`| float | 12.0 | The limit distance for visibility score calculation |
70
+
|`vertical_bins`| int | 128 | The number of vertical bin for visibility histogram |
71
+
|`horizontal_bins`| int | 36 | The number of horizontal bin for visibility histogram |
72
+
|`noise_threshold`| int | 2 | The threshold value for distinguishing noise from valid points in the frequency image |
Copy file name to clipboardexpand all lines: sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp
0 commit comments