Add CorrespondenceCheckerBasedOnRotation for orientation-constrained RANSAC#7461
Add CorrespondenceCheckerBasedOnRotation for orientation-constrained RANSAC#7461jGiltinan wants to merge 10 commits intoisl-org:mainfrom
Conversation
|
Thanks for submitting this pull request! The maintainers of this repository would appreciate if you could update the CHANGELOG.md based on your changes. |
There was a problem hiding this comment.
Pull request overview
This PR adds a new RANSAC correspondence checker that rejects hypotheses whose estimated rotation exceeds per-axis tolerances, enabling orientation priors for structured scanning/registration scenarios.
Changes:
- Introduces
CorrespondenceCheckerBasedOnSourceRotationin C++ and exposes it via pybind. - Adds Python-facing API/docs and
__repr__for configuring per-axis rotation thresholds. - Updates RANSAC documentation to list the new checker and adds a changelog entry.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| cpp/pybind/pipelines/registration/registration.cpp | Binds the new correspondence checker into the Python registration module and updates parameter docs. |
| cpp/open3d/pipelines/registration/CorrespondenceChecker.h | Declares the new checker class and its public API/docs. |
| cpp/open3d/pipelines/registration/CorrespondenceChecker.cpp | Implements the rotation-threshold check against the estimated transform. |
| CHANGELOG.md | Notes the addition of the new rotation-based checker. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Corrected checker name
|
I have resolved the comments on documentation, thank you for running those checks. As those were straightforward, I marked them as resolved. I did mark the comment on the euler angle vs angle-axis rotation as resolved, as it was resolved to my idea of the checker. However, it is important for the reviewer to review that section to make sure the intended functionality is clear and is appropriate for merging into the library. |
Type
Motivation and Context
In structured environments, such as an overhead laser profiler mounted on an X-Y gantry or fixed above a conveyor belt, objects rest on an approximately flat surface. Their rotation about the Z-axis is unknown, but their orientation about the X and Y axes is physically constrained to within a small tolerance by gravity and the surface they rest on.
Existing Open3D correspondence checkers operate purely on local point geometry (edge lengths, point-to-point distance, surface normals). They have no mechanism to encode this kind of global orientation prior. As a result, RANSAC wastes iterations validating physically impossible, tilted or inverted orientations, and can become trapped in catastrophically wrong local minima, producing correct-looking local geometry fits that are globally flipped or upside-down which causes ICP to diverge.
Checklist:
python util/check_style.py --applyto apply Open3D code styleto my code.
updated accordingly.
results (e.g. screenshots or numbers) here.
Description
This PR introduces CorrespondenceCheckerBasedOnRotation, a new correspondence checker that allows developers to independently constrain the allowed rotation of a RANSAC hypothesis about any of the three Cartesian axes (X, Y, Z). Each axis is configured with a tolerance in radians. A value of -1 (the default) disables the check for that axis, making the checker flexible for a wide variety of structured scanning applications.
Example use:
The motivating case, along with sample results is summarized in a video: https://youtu.be/VuRbrNXATr8
For the benchmark results, the checker was tested on 3DBenchy registered against a synthetic laser scan, over 5 deterministic random seeds, single-threaded for determinism.
Key observations:
The code for the benchmark results is located at: https://github.com/jGiltinan/Open3D-Demonstrations