Skip to content

Fix success checks for identity and translation registrations - #7608

Open
cola1917 wants to merge 2 commits into
isl-org:mainfrom
cola1917:fix/registration-success-6153
Open

cola1917 wants to merge 2 commits into
isl-org:mainfrom
cola1917:fix/registration-success-6153

Conversation

@cola1917

Copy link
Copy Markdown

Type

Motivation and Context

A rigid transformation's trace depends on rotation, not translation. The existing trace() == 4.0 check rejects successful pure-translation registrations. Replacing it with an exact identity comparison would still reject valid identity alignments.

Description / plan summary

The goal is to distinguish missing correspondences from a valid zero-rotation alignment without changing registration algorithms, public APIs, or benchmark output formats.

  • Use zero fitness to reject missing correspondences in fragment registration, retaining the existing information-matrix overlap threshold.
  • Use positive fitness for the RANSAC benchmark's alignment selection.
  • Remove the unused trace-based success variable in the FGR benchmark, preserving its existing unconditional recording behavior.
  • Explain the acceptance rule in the reconstruction tutorial and add deterministic regression coverage for both registration routes.

Validation

Tested the current-main Python examples (base b6c5e196384ad71e75b6e6f9c5da22d046221f1d) on Linux, CPython 3.12.15, NumPy 2.5.4, and the official open3d-cpu==0.20.0 wheel. This was not a fresh C++ source build.

  • New focused regressions: 10 failed / 20 passed before; 30 passed after. They evaluate real RegistrationResult objects from synthetic geometry and inject the results into example decision paths to avoid stochastic matching obscuring the acceptance check.
  • python -m pytest python/test/pipelines -q: 36 passed.
  • Additional smoke validation with actual CPU FGR and RANSAC optimizers (not mocked): identity, translation, and rotation on 32 synthetic points with known matching descriptors, 6/6 passed, maximum transform error below 6e-16. Four valid results had trace exactly four and were rejected by the old check. This does not benchmark FPFH matching quality.
  • Repository changed-file style check, compileall, and git diff --check passed.

No GPU run, full C++ build, full test suite, real-data reconstruction, or complete documentation build was performed.

Checklist

  • Applied repository code style with the pinned tools and checked changed files.
  • Updated Python example behavior and the corresponding tutorial. No C++ API changes.
  • Added Python regression tests and included test evidence above.
  • I will follow up and update the code if CI fails.
  • Allow edits from maintainers.

AI assistance was used for implementation and validation; the commands and results reported above were executed locally.

Use correspondence fitness instead of transformation trace in reconstruction and RANSAC examples. Preserve the overlap gate and FGR output behavior, and cover valid and failed transforms with regression tests.
@update-docs

update-docs Bot commented Oct 24, 2026

Copy link
Copy Markdown

Thanks for submitting this pull request! The maintainers of this repository would appreciate if you could update the CHANGELOG.md based on your changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wrong check for identity transformation as a result of registration

1 participant