From scan to glyph
Cleaning
Ten steps take a halftone-printed letter in a 1200 ppi scan to a traced shape. Each step shows the real data for one printed e.
The crops on this page are a few letters of rules text from Reef Worm, scans scan__002 and scan__003, shown at scanner resolution so the pixels are visible. The scans themselves are not published.
1
Raw scan
Native 1200 ppi greyscale, one pixel is 21.2 µm. The card was scanned upright. The e sits among its neighbours and the surface is halftone-printed, so edges look dotted.
Crop of Reef Worm rules text, 240 × 144 px.
Red bar: 200 µm
2
Isolate the glyph
Blue is this e, one connected component. Red is neighbouring ink. Grey is a 3 px exclusion halo so a neighbour’s ink cannot leak into this glyph’s edges.
3
Tone to ink coverage
Scan levels (paper 213, ink 32) map to coverage from 0 to 1. Left: linear coverage, with the paper texture visible. Right: texture below 0.25 suppressed, half of the edge kept, neighbours masked.
linear coverage
cleaned
4
Rectify and upsample 4×
The scan’s measured tilt (-0.02°) is removed, the card is scaled to one common size and aspect, and the coverage is upsampled on a 4× grid, where one grid pixel is 5.3 µm. Edges can now fall between the original pixels.
The scanner blur is wider than the pixel, so this places edges but does not add detail.
native pixels ×4
rectified, cubic 4× grid
Red bar: 100 µm. Both images are at the same scale.
5
Register to sub-pixel
6 e’s from 6 different cards at the 0.5 edge. Left: aligned by centre of mass only. Right: after sub-pixel registration. This panel registers these 6 on their own, the stack registers all of them.
- Altaïr
- Reef Worm
- Lunar Rejection
- Halcyon Glaze
- Aethersnipe
- Patron Wizard
centre of mass only
after registration
6
Pool views at two angles
The same physical e scanned at 0° and 90° is sampled on a different pixel grid. Averaging the pair cuts scan noise by √2. This pair differs by 7.8 µm edge RMS. Over all pairs, a single scan is about 7.5 µm and a pair mean about 5.3 µm.
scan at 0°
scan at 90°
mean of the two
|difference| × 2.5
7
Normalise the edge level
Each scan’s tone curve puts the ink edge at a different coverage. The bars show the level that gives the same ink area for the same glyph, from 0.40 to 0.56 over 14 scans, where 0.50 would be no change. Levels are shifted so every scan gives the same area.
8
Stack 107 printed e’s
The mean over 107 independent glyphs from 7 cards (left) and the pixel-to-pixel spread between them (right), which concentrates on the edges. Outliers are dropped by a leave-one-out overlap test first.
mean coverage
pixel-to-pixel spread
9
Trace to Bézier curves
The 0.5 contour is fitted with cubic Béziers by potrace: 35 nodes for this glyph. Squares are nodes, blue dots are control points. The curve smooths pixel noise but keeps the printed shape.
10
The final glyph
The traced printed shape. Against the designed font, fitted by size and position only, its edge RMS is 5.20 µm and IoU 0.973. The print sits about 13 µm outside the design on each edge. This ink spread is relative to the pooled edge level, not an absolute measurement.
Red bar: 100 µm
Also applied: the scanner was checked with a printed calibration target, earlier autorotated scans left out, and the views of one printed glyph at different angles counted as one instance.