illusion_cafe_wall — GENERATIVE illusion op

• Data kinds: none → rgb (an op determined by its arguments alone — it takes no image or data input)

• Call: import fullseye as fs; fs.ledger.illusion_cafe_wall(size: 'int' = 40, rows: 'int' = 8, cols: 'int' = 10, mortar: 'float' = 2.0, shift: 'float' = 0.5) -> 'np.ndarray' (to call the implementation directly, import illusion; illusion.illusion_cafe_wall(size: 'int' = 40, rows: 'int' = 8, cols: 'int' = 10, mortar: 'float' = 2.0, shift: 'float' = 0.5) -> 'np.ndarray'; from the registry, opsgenerative.get("illusion_cafe_wall"))

• GPU: none (CPU reference implementation only)

Usage

Café wall illusion. Although the mortar lines are exactly horizontal, they look tilted.

shift is the checkerboard offset per row (as a fraction of size; row r is shifted by r * shift * size). The checkerboard period is 2 * size, so at an offset of 0 (the tiles of every row line up vertically) and 1.0 (a plain checkerboard, black and white swapped from the row above) the illusion disappears, and it repeats with period 2. The classic observation is that it is strongest around a half-tile offset, 0.5 (Gregory & Heard 1979), and the default is that classic layout. Sweep the offset over 0 to 1 to check it.

Invariant: the centre y of each mortar line is exactly k * size (k = 1..rows-1).

Detailed usage guide

• generative_art 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_calipers_under_illusion — py -3.11 examples/poc_calipers_under_illusion.py

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

—

Same category (illusion)

illusion_muller_lyer · illusion_ponzo · illusion_zollner · illusion_poggendorff · illusion_fraser_spiral · illusion_ebbinghaus · illusion_kanizsa · illusion_checker_shadow


*Provenance: illusion.py — GENERATIVE 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.