npr op• Data kinds: image2d → pairs
• Call: import fullseye as fs; fs.ledger.mosaic_tiles_sites(image, n_tiles=400, iterations=12, seed=0, weighted=True) (to call the implementation directly, import printpath; printpath.mosaic_tiles_sites(image, n_tiles=400, iterations=12, seed=0, weighted=True); from the registry, opsprintpath.get("mosaic_tiles_sites"))
Lloyd's iteration on an image — the tile centres of a mosaic.
Places *n_tiles* sites and moves each to the centroid of the pixels it owns, weighted by local contrast when *weighted* (so detail gets smaller tiles).
★Why this earns its place: Lloyd's iteration is a descent — the quantisation energy cannot increase — and that is a property of the algorithm, not of the picture. The energy is *not* reported here on purpose: the existing stipple_energy measures it from the sites, so the monotonicity can be checked by an op that did not produce them. Measuring your own descent with your own number proves nothing.
Returns pairs: the site coordinates (row, col).
Raises ValueError: fewer than 4 tiles or more tiles than pixels; negative iterations; a non-finite or oversized image.
• 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.
• poc_beats_fringes_and_screens — py -3.11 examples/poc_beats_fringes_and_screens.py
pairs as input)stipple_energy · stroke_tour_closed · mst_length · stroke_resample_closed · stroke_tone_error · mosaic_tiles_render
npr)halftone_screen · halftone_moire_period · engrave_lines · hatch_field · 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.