Skip to content

feat(kpm): M7 — Hough voting & feature matching in pure Rust #108

@kalwalt

Description

@kalwalt

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

Metadata

Metadata

Assignees

Projects

Status

Ready

Relationships

None yet

Development

No branches or pull requests

Issue actions