TL TC TR / ML CC MR / BL BC BRT##@ANCHOR — template index plus where it starts| lines | candidate glyphs | min dist | 16px @1.0 | 16px @1.5 | 24px @1.0 | 24px @1.5 |
|---|---|---|---|---|---|---|
| 1 | 36 | 0.259 | 94.5% | 65.7% | 96.6% | 69.7% |
| 2 | 630 | 0.465 | 98.7% | 74.7% | 98.8% | 78.1% |
| 3 | 7,140 | 0.504 | 99.3% | 78.3% | 99.1% | 81.9% |
What changed, and it is the biggest single gain in this whole line of work. Dropping the single-stroke rule. The earlier alphabet required one continuous polyline — no pen lifts — and topped out at 66.7% at severity 1.5. Allowing two disjoint lines reaches 74.7% at 16px and 78.1% at 24px. Two separate strokes placed anywhere in the box separate far better than two joined ones, because a corner constrains where the second segment can go and disjoint lines do not.
On resolution and noise washing out the gains — partly right. 24px beats 16px by 3–4 points at every line count, so resolution helps but modestly, and the ordering never changes. The line count is what moves the number, not the raster.
The indexing is now the point. Twelve templates, nine anchors, 36 legal placements. A character is a
pair of placement indices — two bytes, or T04@TL + T09@TR in readable form. Nothing needs to
store coordinates or curves, the renderer needs twelve line primitives, and a recognizer can score against 36
templates rather than 27 whole glyphs. That is a genuinely different object from a font.
And it drops the channels I was defending last turn. Depth gave +7.6 points, but it needs a grayscale-stable capture path and it degrades under pressure variation. Two disjoint lines give +8.0 points and need nothing but ink. Same gain, no dependency. You were right to push back on it.