Back to report index

Step 5 filteringintensity ab5a38b: AI3D-382 Revert bright-filter number_of_returns until new common release

Miroslav Simko <ms@iolabs.ch> 2026-09-01T11:07:39+02:00

Commit #111 ยท 8 snippets

 .../bright_points_filter.py                        | 23 ++--------------------
 1 file changed, 2 insertions(+), 21 deletions(-)
Importance #1: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -272,19 +272,17 @@
272 points_on_road_file: Path to a '*_road_surface.npz' file containing272 points_on_road_file: Path to a '*_road_surface.npz' file containing
273 arrays: 'points', 'intensity', 'scan_angle', and normally273 arrays: 'points', 'intensity', 'scan_angle', and normally
274 'red', 'green', 'blue'. RGB may be omitted only when274 'red', 'green', 'blue'. RGB may be omitted only when
275 config['allow_missing_rgb'] is True and the selected filter mode275 config['allow_missing_rgb'] is True and the selected filter mode
276 does not depend on color. 'number_of_returns' is optional; when276 does not depend on color.
277 absent it is filled with zeros ("unknown"), never defaulted to 1.
278 output_dir: Optional directory where generated Step 5 artifacts should be277 output_dir: Optional directory where generated Step 5 artifacts should be
279 written. When omitted, outputs are written beside the input file.278 written. When omitted, outputs are written beside the input file.
280279
281 Saves:280 Saves:
282 - '<base>_<filter_mode>.pdf': diagnostic plots (histogram for simple cutoff,281 - '<base>_<filter_mode>.pdf': diagnostic plots (histogram for simple cutoff,
283 slice fits and cutoff curve for angle-based modes).282 slice fits and cutoff curve for angle-based modes).
284 - '<base>_bright_filtered.npz': filtered arrays:283 - '<base>_bright_filtered.npz': filtered arrays:
285 'points', 'scan_angle', 'intensity', 'red', 'green', 'blue',284 'points', 'scan_angle', 'intensity', 'red', 'green', 'blue'.
286 'number_of_returns'.
287 - '<base>_bright_filtered.ply' (optional): written when285 - '<base>_bright_filtered.ply' (optional): written when
288 config['save_bright_points_pcd'] is True. Points colored by intensity (greyscale).286 config['save_bright_points_pcd'] is True. Points colored by intensity (greyscale).
289 - '<stem>_laser_intensity_delta.ply' / '<stem>_laser_intensity_delta_sigma.ply' (optional):287 - '<stem>_laser_intensity_delta.ply' / '<stem>_laser_intensity_delta_sigma.ply' (optional):
290 written when config['save_all_delta_ply'] is True AND filter_mode is 'laser_intensity'.288 written when config['save_all_delta_ply'] is True AND filter_mode is 'laser_intensity'.
Importance #2: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -421,19 +419,8 @@
421 points = data["points"]419 points = data["points"]
422 intensity = data["intensity"]420 intensity = data["intensity"]
423 scan_angle = data["scan_angle"]421 scan_angle = data["scan_angle"]
424422
425 if "number_of_returns" in data_keys:
426 number_of_returns = np.asarray(
427 data["number_of_returns"], dtype=color_intensity_data.NUMBER_OF_RETURNS_DTYPE
428 )
429 else:
430 # Pre-AI3D-382 inputs lack the key; 0 reads as "unknown" per
431 # ColorIntensityData's contract. Never default to 1.
432 number_of_returns = np.zeros(
433 int(points.shape[0]), dtype=color_intensity_data.NUMBER_OF_RETURNS_DTYPE
434 )
435
436 missing_rgb = [key for key in rgb_keys if key not in data_keys]423 missing_rgb = [key for key in rgb_keys if key not in data_keys]
437 if not missing_rgb:424 if not missing_rgb:
438 red = data["red"]425 red = data["red"]
439 green = data["green"]426 green = data["green"]
Importance #3: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -469,9 +456,8 @@
469 green=green,456 green=green,
470 blue=blue,457 blue=blue,
471 intensity=intensity,458 intensity=intensity,
472 scan_angle_rank=scan_angle,459 scan_angle_rank=scan_angle,
473 number_of_returns=number_of_returns,
474 )460 )
475461
476 def _process_with_angle_slice_fitting(462 def _process_with_angle_slice_fitting(
477 self,463 self,
Importance #4: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -640,9 +626,8 @@
640 intensity=color_data.intensity,626 intensity=color_data.intensity,
641 red=color_data.red,627 red=color_data.red,
642 green=color_data.green,628 green=color_data.green,
643 blue=color_data.blue,629 blue=color_data.blue,
644 number_of_returns=color_data.number_of_returns,
645 )630 )
646 return631 return
647632
648 if self.config.get("save_bright_points_pcd", False):633 if self.config.get("save_bright_points_pcd", False):
Importance #5: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -691,9 +676,8 @@
691 intensity=color_data.intensity,676 intensity=color_data.intensity,
692 red=color_data.red,677 red=color_data.red,
693 green=color_data.green,678 green=color_data.green,
694 blue=color_data.blue,679 blue=color_data.blue,
695 number_of_returns=color_data.number_of_returns,
696 )680 )
697681
698 logger.info(682 logger.info(
699 f"Saved filtered data from {points.shape[0]} points to {output_npz}"683 f"Saved filtered data from {points.shape[0]} points to {output_npz}"
Importance #6: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -833,9 +817,8 @@
833 intensity=color_data.intensity,817 intensity=color_data.intensity,
834 red=color_data.red,818 red=color_data.red,
835 green=color_data.green,819 green=color_data.green,
836 blue=color_data.blue,820 blue=color_data.blue,
837 number_of_returns=color_data.number_of_returns,
838 )821 )
839 logger.info(822 logger.info(
840 f"Saved filtered data from {points.shape[0]} points to {output_npz}"823 f"Saved filtered data from {points.shape[0]} points to {output_npz}"
841 )824 )
Importance #7: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -940,9 +923,8 @@
940 intensity=filtered_color_data.intensity,923 intensity=filtered_color_data.intensity,
941 red=filtered_color_data.red,924 red=filtered_color_data.red,
942 green=filtered_color_data.green,925 green=filtered_color_data.green,
943 blue=filtered_color_data.blue,926 blue=filtered_color_data.blue,
944 number_of_returns=filtered_color_data.number_of_returns,
945 )927 )
946 return928 return
947 929
948 # Optionally save PLY file with greyscale intensity coloring930 # Optionally save PLY file with greyscale intensity coloring
Importance #8: src/iolabs_point_cloud_filtering_intensity/bright_points_filter.py @@ -976,9 +958,8 @@
976 intensity=filtered_color_data.intensity,958 intensity=filtered_color_data.intensity,
977 red=filtered_color_data.red,959 red=filtered_color_data.red,
978 green=filtered_color_data.green,960 green=filtered_color_data.green,
979 blue=filtered_color_data.blue,961 blue=filtered_color_data.blue,
980 number_of_returns=filtered_color_data.number_of_returns,
981 )962 )
982 963
983 logger.info(964 logger.info(
984 f"Saved filtered data from {len(filtered_points):,} points to {output_npz}"965 f"Saved filtered data from {len(filtered_points):,} points to {output_npz}"