Repository navigation
v1.4.5: LoFTR input padded to its coarse stride, max_features caps BRISK, KAZE and AKAZE - #12
Merged
Merged
Conversation
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.
Summary
Two fixes to the feature detectors, both of which made a configured value mean something other than what it says.
_LoFTRMatcher.matchnow zero-pads both images at the bottom and right (newdl.pad_to_multiple, which leaves pixel coordinates unchanged) and drops matches that fall in the padding.max_featurescaps BRISK, KAZE and AKAZE. These detectors take a response threshold, not a count, and stabilo convertedmax_featuresinto one with linear models fitted at native resolution (stabilo/thresholds/models/). The models ignoreddownsample_ratio, and AKAZE's went negative above about 11k keypoints, so the reference frame kept every keypoint. The detectors now run at their own threshold (brisk_threshold,kaze_threshold,akaze_threshold) and keep themax_featuresstrongest by response (ref_multiplier x max_featuresin the reference frame), as ORB and SIFT already do. The thresholds default to OpenCV's (30, 0.001, 0.001); they were previously fallbacks that the shipped models made unreachable.Output impact
downsample_ratio0.18 (691x389) and from 7.9 to 0.16 px at 0.25 (960x540).Tests
max_features/ref_multiplier x max_featuresat two downsample ratios, the kept keypoints and descriptors equal the uncapped detector's strongest, and a cap above the detected count keeps every keypoint.STABILO_DL_TESTS=1, all 40 DL tests pass.stabiloCLI smoke test passes; the wheel and sdist build and passtwine check.Docs
docs/usage.mdsection 9 describes the cap for every classical detector and the LoFTR padding; the parameter table lists the new threshold defaults.stabilo/cfg/default.yaml, the README feature list andscripts/README.mdno longer describe the threshold models as the source of the budget.scripts/find_threshold_models.pystays as a tool for choosing a threshold.Other
stabilo/thresholds/models/is removed from the package;package-datanow ships**/*.yamlonly.__init__.py,CITATION.cff,.zenodo.json, and the README citation.