Update the coordinate transformation pipeline to prioritize the affine
transformation chain recorded in `transform.json` (original_to_source)
instead of relying on re-calculated geometric parameters.
The previous method relied on re-estimating rotation, center, and
bounding boxes from the bone mask, which led to inaccuracies in screw
pillar mapping (e.g., dropping from 99% to 30-94% in-label accuracy).
The new approach uses the precise inverse affine mapping `o = M^-1 (s - t)`
from the transformation metadata.
A fallback mechanism is maintained for legacy volumes lacking
`transform.json`, which continues to use the re-calculation method.
- Implement `load_transform` and `original_to_source` integration
- Update documentation to reflect the new primary/fallback coordinate chains
- Improve precision of screw parameter mapping to native index space
Introduce a robust coordinate transformation system to manage the relationship
between original CT space and rotated/standardized segmentation spaces.
This includes a new directory hierarchy to separate unrotated crops from
rotated outputs and utility functions for geometric mapping.
Key changes:
- Implement `imaging/transforms.py` to handle bounding box metadata,
affine standardization, and coordinate mapping between spaces.
- Restructure dataset output: unrotated segmentation files (binary, SDF,
ROI, etc.) are now stored in a `<vol>/crop/` subdirectory to distinguish
them from `<vol>/rotated/` aligned versions.
- Add `level_file_path` utility to abstract file discovery across legacy
(top-level) and new (crop-based) directory structures.
- Enhance `seg_bone` to capture and export bounding box metadata
(`bbox2`, `nn_bbox`, `bbox_orig`) into `transform.json`.
- Implement `xfr_cbt_native.py` for mapping screw positions back to
original CT space.
- Update preprocessing and visualization scripts to support the new
directory layout and transformation metadata.
- Improve TinyDB metadata migration logic to prevent accidental corruption
of existing database structures.