synth op• Data kinds: none → images (an op determined by its arguments alone — it takes no image or data input)
• Call: import fullseye as fs; fs.ledger.piv_synth_sequence(shape, displacement, n_frames=8, density=0.02, diameter_px=2.5, seed=0, noise_sigma=0.0, intensity=(0.6, 1.0), background=0.0, jitter=0.0) (to call the implementation directly, import pivops; pivops.piv_synth_sequence(shape, displacement, n_frames=8, density=0.02, diameter_px=2.5, seed=0, noise_sigma=0.0, intensity=(0.6, 1.0), background=0.0, jitter=0.0); from the registry, opspiv.get("piv_synth_sequence"))
• Return value through the ledger: fullseye.ledger.piv_synth_sequence(...) returns only the declared out type images (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.piv_synth_sequence.raw(...) or call pivops.piv_synth_sequence directly.
• Underlying return: (frames, truth) -> images
Image sequence in which the same particles are moved repeatedly. Returns (frames, truth).
Whereas piv_synth_pair makes 2 images, this makes a sequence that keeps following 1 flow. Ensemble correlation and temporal statistics can only be verified with this —— calling a set of independent pairs a sequence leaves no correspondence between 2 adjacent images, and the statistics become meaningless (measured: against a mean of 0.73 px the fluctuation RMS was 4.05 px, a number that measured the construction rather than the flow).
Args:
shape: (H, W).
displacement: displacement per 1 frame (same format as piv_synth_pair).
n_frames: number of frames (2 or more).
jitter: standard deviation [px] of the disturbance added to the whole field per frame. 0 means steady flow.
To test temporal statistics (fluctuations, Reynolds stresses) make this greater than 0.
★ It is one disturbance per frame, not an independent disturbance per particle.
Varying it per particle averages it within the window, shrinking it by the square root of N,
and the injected and measured values disagree (measured: 0.15 against an injected 0.3).
That is a property of PIV and not an error, but it is useless for verifying temporal statistics, so here it imitates an unsteady flow itself.
density / diameter_px / seed / noise_sigma / intensity / background:
same as piv_synth_pair.
Returns:
(frames: list of (H, W), truth: (2, H, W)). truth is the mean displacement
per 1 frame.
• piv_displacement family guide
• 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.
• piv_field_analysis_tour — py -3.11 examples/piv_field_analysis_tour.py
images as input)piv_ensemble_correlate · piv_time_statistics
synth)piv_synth_particles · piv_synth_pair
*Provenance: pivops.py — PIV 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.