Skip to content

Commit 8ea4310

Browse files
kalwaltclaude
andcommitted
doc: update README and ARCHITECTURE with M8 milestone details
Document completion of M8 (KPM image pyramid and feature extraction in pure Rust): - BoxFilterPyramid8u for efficient grayscale pyramid construction - BinomialPyramid32f with scale-space interpolation - DoG detector and orientation assignment - Native Rust FREAK descriptor computation Update short-term goals to clarify M9 integration milestone. This is the final documentation update before the v0.6.0 release. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 716cbdf commit 8ea4310

6 files changed

Lines changed: 22 additions & 6 deletions

File tree

ARCHITECTURE.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ The unified core library containing all AR functionality:
4040
- `freak::hough` — Hough similarity voting (4D bin discretization over translation × angle × scale) for filtering matches by transformation consistency.
4141
- `freak::clustering` — K-Medoids partitioning + Binary Hierarchical Clustering (BHC) vocabulary tree for fast approximate-NN search on 96-byte FREAK descriptors. Hamming distance via 24×32-bit bit-magic. Includes a byte-identical port of C++ `vision::FastRandom` / `vision::ArrayShuffle` so the BHC tree topology matches the C++ baseline given the same seed.
4242
- `freak::matcher``FeatureStore` (points + flat descriptor buffer) and `FeatureMatcher` with three match variants: brute force, BHC-indexed (fast path), and homography-guided (spatial filter via 3×3 inverse + `tr` radius). All three apply the C++ ratio test (default 0.7) and filter by `FeaturePoint::maxima`.
43+
- `freak::image_pyramid` — image pyramid construction via `BoxFilterPyramid8u` (box filtering for 8-bit grayscale) and `BinomialPyramid32f` (32-bit floating-point binomial pyramid with scale-space interpolation).
44+
- `freak::feature_extraction` — keypoint detection via Difference-of-Gaussians (DoG), dominant orientation assignment via circular gradient voting, and FREAK descriptor computation with native Rust implementation of the FREAK binary pattern and bit-pair comparison.
4345
- **Types** (`types`): core data structures (`ARHandle`, `ARParam`, etc.).
4446

4547
### `crates/wasm``webarkitlib-wasm`

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ exclude = [
99
resolver = "2"
1010

1111
[workspace.package]
12-
version = "0.5.1"
12+
version = "0.6.0"
1313
authors = ["kalwalt <github@kalwaltart.it>"]
1414
edition = "2021"
1515
description = "A high-performance, memory-safe Rust port of WebARKitLib (ARToolKit) for native and WASM."

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ Add `webarkitlib-rs` to your `Cargo.toml`:
3838

3939
```toml
4040
[dependencies]
41-
webarkitlib-rs = "0.5"
41+
webarkitlib-rs = "0.6"
4242
```
4343

4444
To enable the C++ FFI backend for KPM (Natural Feature Tracking):
4545

4646
```toml
4747
[dependencies]
48-
webarkitlib-rs = { version = "0.5", features = ["ffi-backend"] }
48+
webarkitlib-rs = { version = "0.6", features = ["ffi-backend"] }
4949
```
5050

5151
> When installing from crates.io, no extra setup is required — the C++
@@ -204,7 +204,7 @@ Enable the `log-helpers` feature and call the bundled initializer once in your b
204204

205205
```toml
206206
[dependencies]
207-
webarkitlib-rs = { version = "0.5", features = ["log-helpers"] }
207+
webarkitlib-rs = { version = "0.6", features = ["log-helpers"] }
208208
```
209209

210210
```rust
@@ -338,8 +338,15 @@ The workspace contains two crates:
338338
- K-Medoids clustering + Binary Hierarchical Clustering vocabulary tree, including a byte-identical `FastRandom` / `ArrayShuffle` PRNG port — 889 LOC
339339
- `FeatureStore` + `FeatureMatcher` with three match variants (brute, BHC-indexed, homography-guided), C++-faithful ratio test (default 0.7), and `maxima` filtering — 1167 LOC
340340
- **Dual-mode FFI tests run in CI on Linux / macOS / Windows** with sorted-pair equality vs the C++ baseline for brute/indexed/guided matchers (the M7 milestone validation gate). Surfaced and fixed three latent cross-platform issues: macOS `libc++` linking, GCC `<limits>` include order, and ARM64 FMA tolerance in M6-2 solvers.
341+
- **M8 -- KPM image pyramid & feature extraction in pure Rust** (4 steps):
342+
- **Step 1**: `BoxFilterPyramid8u` — box filtering for efficient 8-bit grayscale pyramid construction
343+
- **Step 2**: `interpolate.h` + `BinomialPyramid32f` — binomial pyramid and interpolation utilities for scale-space analysis
344+
- **Step 3**: `DoG detector` + `OrientationAssignment` — difference-of-Gaussians keypoint detection and dominant orientation estimation
345+
- **Step 4**: `FREAK descriptor` + `Keyframe` — native Rust FREAK descriptor computation and keyframe pipeline
346+
- Completes the KPM feature extraction and image pyramid components in pure Rust
341347
342348
### 🎯 Short-term Goals (toward v1.0.0)
349+
- **M9 -- Integrate pure-Rust KPM pipeline**: Wire M8 image pyramid and feature extraction components with M7 matching for end-to-end native Rust NFT support.
343350
- **Complete KPM in idiomatic Rust**: Port the remaining KPM feature extraction and matching logic to pure Rust, removing the C++ FFI dependency, and ship a working end-to-end NFT example.
344351
- **Enhanced Documentation**: Expand API reference with complete module-level docs, integration walkthroughs for JS/TS, and detailed usage examples.
345352
- **WASM Memory Management**: Improve resource cleanup when switching engines or markers in long-running browser sessions.

crates/wasm/pkg/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,15 @@ The workspace contains two crates:
338338
- K-Medoids clustering + Binary Hierarchical Clustering vocabulary tree, including a byte-identical `FastRandom` / `ArrayShuffle` PRNG port — 889 LOC
339339
- `FeatureStore` + `FeatureMatcher` with three match variants (brute, BHC-indexed, homography-guided), C++-faithful ratio test (default 0.7), and `maxima` filtering — 1167 LOC
340340
- **Dual-mode FFI tests run in CI on Linux / macOS / Windows** with sorted-pair equality vs the C++ baseline for brute/indexed/guided matchers (the M7 milestone validation gate). Surfaced and fixed three latent cross-platform issues: macOS `libc++` linking, GCC `<limits>` include order, and ARM64 FMA tolerance in M6-2 solvers.
341+
- **M8 -- KPM image pyramid & feature extraction in pure Rust** (4 steps):
342+
- **Step 1**: `BoxFilterPyramid8u` — box filtering for efficient 8-bit grayscale pyramid construction
343+
- **Step 2**: `interpolate.h` + `BinomialPyramid32f` — binomial pyramid and interpolation utilities for scale-space analysis
344+
- **Step 3**: `DoG detector` + `OrientationAssignment` — difference-of-Gaussians keypoint detection and dominant orientation estimation
345+
- **Step 4**: `FREAK descriptor` + `Keyframe` — native Rust FREAK descriptor computation and keyframe pipeline
346+
- Completes the KPM feature extraction and image pyramid components in pure Rust
341347
342348
### 🎯 Short-term Goals (toward v1.0.0)
349+
- **M9 -- Integrate pure-Rust KPM pipeline**: Wire M8 image pyramid and feature extraction components with M7 matching for end-to-end native Rust NFT support.
343350
- **Complete KPM in idiomatic Rust**: Port the remaining KPM feature extraction and matching logic to pure Rust, removing the C++ FFI dependency, and ship a working end-to-end NFT example.
344351
- **Enhanced Documentation**: Expand API reference with complete module-level docs, integration walkthroughs for JS/TS, and detailed usage examples.
345352
- **WASM Memory Management**: Improve resource cleanup when switching engines or markers in long-running browser sessions.

crates/wasm/pkg/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"kalwalt \u003cgithub@kalwaltart.it\u003e"
66
],
77
"description": "A high-performance, memory-safe Rust port of WebARKitLib (ARToolKit) for native and WASM.",
8-
"version": "0.5.1",
8+
"version": "0.6.0",
99
"license": "LGPL-3.0-or-later",
1010
"repository": {
1111
"type": "git",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "webarkitlib-rs",
3-
"version": "0.5.1",
3+
"version": "0.6.0",
44
"description": "Port of WebARKitLib (ARToolKit) to Rust and WASM",
55
"private": true,
66
"scripts": {

0 commit comments

Comments
 (0)