render_symbol — SYMBOL symbol_capture op

• Data kinds: table → image2d

• Call: import fullseye as fs; fs.ledger.render_symbol(symbol, module_px=4.0, *, quiet=None, bar_height=None, rotate_deg=0.0, tilt_deg=0.0, tilt_axis_deg=0.0, distance_ratio=10.0, offset_px=(0.0, 0.0), ink_gain=0.0, dot=None, dark=0.05, light=0.85, margin_modules=2.0, supersample=4, return_geometry=False) (to call the implementation directly, import symrender; symrender.render_symbol(symbol, module_px=4.0, *, quiet=None, bar_height=None, rotate_deg=0.0, tilt_deg=0.0, tilt_axis_deg=0.0, distance_ratio=10.0, offset_px=(0.0, 0.0), ink_gain=0.0, dot=None, dark=0.05, light=0.85, margin_modules=2.0, supersample=4, return_geometry=False); from the registry, opssymbol.get("render_symbol"))

• GPU: none (CPU reference implementation only)

Usage

Render a symbol (1-D widths or a 2-D module grid) as the reflectance image of a plane (image2d).

> The detailed description below is the original text — the summary and the headings are translated.

Render a symbol as the reflectance image a pinhole camera sees. module_px is the module (X dimension) size in pixels at the symbol centre; rotate_deg turns the symbol in its plane (counter-clockwise on screen), tilt_deg tilts the plane about an in-plane axis at tilt_axis_deg (perspective; the camera sits distance_ratio symbol sizes away, so 10 means mild keystone). ink_gain (modules) widens dark areas (bar width gain, > 0) or narrows them (< 0); dot draws 2-D dark modules as discs of that diameter (modules). Reflectances are dark (ink) and light (substrate); each pixel is the mean of supersample² point samples (area coverage). The canvas holds the symbol, its quiet zone (quiet modules; default 4 for QR and raw grids, 2 for the table from dm_encode unless the table says otherwise; for 1-D the table's own quiet zones and quiet is the margin above and below the bars) and a further margin_modules of substrate.

return_geometry=True returns a table instead: image, homography (plane [u, v, 1] in modules → [col, row, w]), plane_size (modules), module_px.

空の入力(モジュール格子が 0 行)は ValueError。拒否(ValueError): 表に modules も edges も無い、module_px <= 0.5、dark >= light、反射率が [0, 1] の外、|tilt_deg| >= 80、|ink_gain| > 0.9、supersample が 1..16 の外、キャンバスが 4000 画素を超える。

Detailed usage guide

• symbol_reading 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_symbol_package_1d — py -3.11 examples/poc_symbol_package_1d.py

• poc_symbol_part_dpm — py -3.11 examples/poc_symbol_part_dpm.py

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

barcode_scan_profiles · read_barcode1d · qr_locate · qr_sample · qr_read · dm_locate · dm_sample · dm_read

Same category (symbol_capture)

capture_degrade


*Provenance: symrender.py — SYMBOL 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.