Recogniser for grammar 002: white-balance-robust ink-set matching#2
Merged
Conversation
- measurer registry keyed by structure.type; image measured once per family; 001 band path byte-identical - measure_grid.py: grid module via edge-projection autocorrelation, flat-ink extraction, parent/product separation, overprint residual verification - two-path ink_set match: absolute Lab delta-E vs relationship path that estimates a per-channel white-balance gain (saturation-aware consensus estimator, one-sided scoring of clipped channels) — ink relationships survive casts that destroy absolute values (SI-020, SI-021) - 19 grid tests incl. clipping regression; 107 total green
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.
What
Milestone 2, Phase 6 — grid-family measurers for
iso-002, wired in via a measurer registry keyed bystructure.type(band → cascade measurers, grid → new ones; the image is measured once per family, and 001's behaviour is byte-identical).recogniser/measure_grid.py): grid module by edge-projection autocorrelation (audit 002 §2's own method), flat-ink extraction, parent/product separation via the committed multiply arithmetic, overprint-residual verification (audit §5: verification, not identification), stripe rhythm, coarse primitive-mix classifier (measured but uncommitted per SI-008).ink_setscores as max(absolute, relationship). The relationship path estimates a per-channel diagonal gain from a consensus cluster of sheet/measured ratios, excluding channel observations lost to clipping (≥250 / ≤5), scores clipped channels one-sidedly (measurement loss, not identity mismatch), then re-separates overprint products in corrected space. The estimated gain and clipping report are published in every claim's working.Tests
19 new tests including the clipping regression (exact previously-failing case pinned). Full suite: 107 passed. 001 recogniser tests unchanged except one iso-002 test that asserted the pre-Phase-6 absence of grid measurers, updated to assert the new graceful cross-family behaviour.