hatch_field — PRINTPATH npr op

• Data kinds: image2d → image2d

• Call: import fullseye as fs; fs.ledger.hatch_field(image, spacing_px=8.0, sigma=2.0, levels=3, cross_deg=90.0) (to call the implementation directly, import printpath; printpath.hatch_field(image, spacing_px=8.0, sigma=2.0, levels=3, cross_deg=90.0); from the registry, opsprintpath.get("hatch_field"))

Usage

Cross-hatching that follows the picture — direction from the structure tensor.

The stroke direction is the local structure orientation (the existing

`structure_tensor_orientation`: strokes run *along* edges, not across them),

and the number of superposed hatch layers comes from the tone — one layer for

a light grey, up to *levels* for a dark one, each rotated by *cross_deg*.

★Why this earns its place: the direction is checkable against a picture

whose orientation is known by construction (a sine grating at 30° must give

strokes at 30°), and the tone is checkable by blurring the result. The usual

NPR routine offers neither.

Returns an `image2d`: 1 = paper, 0 = ink.

Raises `ValueError`: spacing below 2 px; levels below 1; non-positive

sigma; a non-finite or oversized image.

Limits: a single orientation per pixel, so crossings and junctions (where the

structure tensor is isotropic) get an arbitrary but locally smooth direction —

the coherence, not the orientation, is what says whether to trust it.

Detailed usage guide

• printpath family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_beats_fringes_and_screens — py -3.11 examples/poc_beats_fringes_and_screens.py

Ops the type connects to (they accept image2d as input)

stipple_points_from_image · stipple_energy · stroke_tone_error · halftone_screen · engrave_lines · mosaic_tiles_sites · mosaic_tiles_render · print_layer_defect_map

Same category (npr)

halftone_screen · halftone_moire_period · engrave_lines · mosaic_tiles_sites · mosaic_tiles_render


*Provenance: printpath.py — PRINTPATH operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.