synthesize_fringes — 3D structured_light op

• Data kinds: image2d → images

• Call: import fullseye as fs; fs.ledger.synthesize_fringes(height, n_steps=4, freq=1.0, phase_gain=1.0, bias=0.5, amplitude=0.5, axis=1, noise=0.0, seed=None, return_phase=False) (to call the implementation directly, import fringe; fringe.synthesize_fringes(height, n_steps=4, freq=1.0, phase_gain=1.0, bias=0.5, amplitude=0.5, axis=1, noise=0.0, seed=None, return_phase=False); from the registry, ops3d.get("synthesize_fringes"))

• Return value through the ledger: fullseye.ledger.synthesize_fringes(...) returns only the declared out type images (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.synthesize_fringes.raw(...) or call fringe.synthesize_fringes directly.

Usage

Synthesise an N-step phase-shifted fringe image series from a known height map (for tests and sample generation).

Model: total phase φ(x,y) = φ_carrier + phase_gain·height. The carrier φ_carrier is a linear ramp across the field of view (freq periods). Each frame is I_n = bias + amplitude·cos(φ - δ_n), δ_n = 2πn/N. With this sign convention wrapped_phase(...) recovers the total phase φ as is.

height: 2D array (height field of the measured object, arbitrary units).

n_steps: number of phase-shift images N (>=3).

freq: number of carrier periods across the field-of-view width (number of fringes). 0 means no carrier (height only).

phase_gain: height→phase conversion gain (rad/unit). Corresponds to the decoder's calibration k = 1/phase_gain.

bias: mean luminance a (default 0.5).

amplitude: fringe amplitude b (default 0.5). Natural when bias±amplitude stays within [0,1].

axis: direction of the carrier (1 = along the column direction x, the default; 0 = row direction y).

noise: standard deviation of the added Gaussian noise (0 = noise-free).

seed: random seed for the noise.

return_phase: if True, returns (images, total_phase) (for tests and debugging).

Returns: (N, H, W) float array (clipped to the range [0,1]). With return_phase=True, also the phase.

Background guides (the physics and conventions behind this op)

• depth_sensors — Depth sensors — ranging principles, real-device figures, how dropouts appear

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.

Runnable examples (verified samples that actually call this op)

• structured_light — py -3.11 examples_3d/structured_light.py

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

fuse_to_voxel · photometric_stereo · wrapped_phase · graycode_decode · decode_fringe · carve · visual_hull

Same category (structured_light)

wrapped_phase · unwrap_phase_2d · graycode_decode · decode_fringe · absolute_phase · triangulate_column


*Provenance: fringe.py — 3D 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.