Goal
Port the descriptor matching pipeline from
WebARKitLib/lib/SRC/KPM/FreakMatcher/matchers/
into pure Rust under crates/core/src/kpm/freak/.
This milestone produces three new modules:
| Module |
Content |
freak/hough.rs |
Hough similarity voting — geometric consistency filter |
freak/clustering.rs |
KMedoids + Binary Hierarchical Clustering — vocabulary tree |
freak/matcher.rs |
FeatureStore + FeatureMatcher — descriptor search |
After this milestone, the full descriptor matching pipeline exists in
pure Rust and M8 (DoG detector + FREAK descriptor) can begin.
Sub-issues
File inventory
| C++ file |
Lines |
Prompt |
matchers/hough_similarity_voting.h |
493 |
M7-1 |
matchers/kmedoids.h |
223 |
M7-2 |
matchers/binary_hierarchical_clustering.h |
445 |
M7-2 |
matchers/feature_store.h |
138 |
M7-3 |
matchers/feature_matcher.h |
158 |
M7-3 |
matchers/feature_matcher-inline.h |
450 |
M7-3 |
Total: ~1906 lines of C++.
Rust module layout after M7
crates/core/src/kpm/freak/
mod.rs
math.rs (M6)
homography.rs (M6)
hough.rs ← M7-1
clustering.rs ← M7-2
matcher.rs ← M7-3
pyramid.rs (M8)
detector.rs (M8)
descriptor.rs (M8)
Dependency order
M7-1 (hough.rs) — no M7 deps, start immediately after M6
↓
M7-2 (clustering.rs) — no M7 deps, can run in parallel with M7-1
↓
M7-3 (matcher.rs) — depends on M7-2 (BHC index inside FeatureMatcher)
M7-1 and M7-2 can be worked on in parallel if two contributors are available.
Acceptance criteria
cargo test -p webarkitlib-rs -- kpm::freak::hough \
kpm::freak::clustering \
kpm::freak::matcher
cargo clippy -p webarkitlib-rs -- -D warnings
All tests pass. Zero clippy warnings.
Dual-mode validation gate (run before closing M7-3):
cargo test -p webarkitlib-rs --features dual-mode \
-- test_feature_matcher_output_matches_cpp
Match count within ±2 of C++ baseline on the pinball-demo fixture.
Branch
feat/freak-matching
Goal
Port the descriptor matching pipeline from
WebARKitLib/lib/SRC/KPM/FreakMatcher/matchers/into pure Rust under
crates/core/src/kpm/freak/.This milestone produces three new modules:
freak/hough.rsfreak/clustering.rsfreak/matcher.rsAfter this milestone, the full descriptor matching pipeline exists in
pure Rust and M8 (DoG detector + FREAK descriptor) can begin.
Sub-issues
freak/hough.rsfreak/clustering.rsfreak/matcher.rsFile inventory
matchers/hough_similarity_voting.hmatchers/kmedoids.hmatchers/binary_hierarchical_clustering.hmatchers/feature_store.hmatchers/feature_matcher.hmatchers/feature_matcher-inline.hTotal: ~1906 lines of C++.
Rust module layout after M7
Dependency order
M7-1 and M7-2 can be worked on in parallel if two contributors are available.
Acceptance criteria
cargo test -p webarkitlib-rs -- kpm::freak::hough \ kpm::freak::clustering \ kpm::freak::matcher cargo clippy -p webarkitlib-rs -- -D warningsAll tests pass. Zero clippy warnings.
Dual-mode validation gate (run before closing M7-3):
cargo test -p webarkitlib-rs --features dual-mode \ -- test_feature_matcher_output_matches_cppMatch count within ±2 of C++ baseline on the pinball-demo fixture.
Branch
feat/freak-matching