Nomicon Fonts

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.

Raw scan crop

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.

Segmentation of the cropThe e in blue, neighbouring letters in red and a grey halo around them.

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.

Edge level of each scanBars show each scan’s edge level minus 0.5. Upright scans are blue, scans at any other angle are red with a lighter fill. The values are in the data table. 000° 0190° 020° 0390° 040° 0590° 060° 0790° 080° 0990° 100° 1190° 120° 1390° 0.500.590.39 scan number and angle

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.

Trace with nodes and control points

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.

The traced e

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.