Repository navigation
Add geometricFilterFromPoses to build filters from known poses - #2201
Merged
Merged
Conversation
servantftransperfect
requested review from
CedricThebault,
cbentejac and
fabiencastan
October 12, 2026 10:09
servantftransperfect
force-pushed
the
dev/filterFromSfmData
branch
2 times, most recently
from
October 14, 2026 16:15
eca8cb8 to
beef0ef
Compare
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Degenerate poses and Equidistant-camera filters can incorrectly reject valid matches.
2 open findings
What changed in this PR
Adds pose-based geometric filter generation and integrates it with the existing match-filtering pipeline.
Changes:
- Adds the executable and Meshroom node for generating fundamental matrices from known poses.
- Loads filters across all chunks and applies them to undistorted coordinates.
- Updates build configuration, node versions, and SWIG include ordering.
| File | Description |
|---|---|
main_geometricFilterFromPoses.cpp |
Generates pose-derived filters. |
main_geometricFilterApplying.cpp |
Loads all filter files and undistorts points. |
CMakeLists.txt |
Builds the new executable. |
Camera.i |
Corrects SWIG include ordering. |
GeometricFilterFromPoses.py |
Defines the new Meshroom node. |
GeometricFilterApplying.py |
Updates the node version. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
servantftransperfect
force-pushed
the
dev/filterFromSfmData
branch
from
October 15, 2026 09:47
beef0ef to
78ea43c
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oAngle Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
servantftransperfect
force-pushed
the
dev/filterFromSfmData
branch
from
October 15, 2026 10:38
78ea43c to
60cae00
Compare
Test inliers with an error matching the filter type: epipolar distance on undistorted pixels for fundamental matrices (pinhole only), angular errors on bearing vectors for essential and rotation matrices. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
servantftransperfect
force-pushed
the
dev/filterFromSfmData
branch
from
October 15, 2026 10:48
60cae00 to
c5f56aa
Compare
CedricThebault
approved these changes
Oct 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Description
Adds a way to geometrically filter matches using known camera poses rather than models estimated from the matches. This is useful when poses are already available (for example from a previous reconstruction or an external tracking system) and we want to remove matches that don't fit them.
The new
geometricFilterFromPosessoftware builds one filter for each pair of posed views. Its output uses the same format asgeometricFilterEstimating, sogeometricFilterApplyingcan consume it without any other change to the pipeline.Features list
rotation_matrixgeometric filter type (EGeometricFilterType::ROTATION_MATRIX). This is a pure rotation model,bJ = R bI, used for pairs whose baseline is too small for reliable epipolar geometry. It can't be estimated from matches, sofeatureMatchingrejects it with an explicit error.aliceVision_geometricFilterFromPosesand its Meshroom nodeGeometricFilterFromPoses:E = [t]x R(withtnormalized), defined on bearing vectors, so it works with any camera model;|t| < minBaselineRatio * sceneScale. The scene scale is the median distance from the camera centers to their centroid.matches_0.jsonto the output folder.--threshold(pixels, default 4) and--minBaselineRatio(default 1e-3).geometricFilterApplying(v1.1):matches_*.jsonfile in the filters folder, then keeps only the pairs handled by the current chunk. Filter chunks no longer need to line up with the matching chunks.fundamental_matrix: epipolar distance on undistorted pixels, for pinhole cameras only;essential_matrix: angular epipolar error on bearing vectors;rotation_matrix: angle betweenR bIandbJ.Implementation remarks
geometricFilterFromPosesbuilds every pair of posed views (O(N²)). The filters are small, but very large scenes will produce a large JSON file.GeometricFilterFromPosesnode doesn't exposeminBaselineRatioyet, so it uses the default.