feat: add point extraction functions and ICPConfig region

This commit is contained in:
2026-02-10 09:54:54 +00:00
parent c92c334f54
commit 21ceae3d4e
2 changed files with 138 additions and 1 deletions
@@ -0,0 +1,20 @@
## 2026-02-10T09:45:00Z Session bootstrap
- Initial notepad created for full-icp-pipeline execution.
- Baseline code references verified in `aruco/icp_registration.py` and `refine_ground_plane.py`.
## Task 2: Point Extraction Functions
### Learnings
- Open3D's `remove_statistical_outlier` returns a tuple `(pcd, ind)`, where `ind` is the list of indices. We only need the point cloud.
- `estimate_normals` with `KDTreeSearchParamHybrid` is robust for mixed geometry (floor + walls).
- Hybrid extraction strategy:
1. Extract floor band (spatial filter).
2. Extract vertical points (normal-based filter: `abs(normal · floor_normal) < 0.3`).
3. Combine using boolean masks on the original point set to avoid duplicates.
- `extract_scene_points` provides a unified interface for different registration strategies (floor-only vs full-scene).
### Decisions
- Kept `extract_near_floor_band` as a standalone function for backward compatibility and as a helper for `extract_scene_points`.
- Used `mode='floor'` as default to match existing behavior.
- Implemented `preprocess_point_cloud` to encapsulate downsampling and SOR, making the pipeline cleaner.
- Added `region` field to `ICPConfig` to control the extraction mode in future tasks.