bridge op• Data kinds: signal → image
• Call: fullseye.apply(img, "signal_to_img", a=0.5, b=0.5) (the 2-D model is one image plus two scalar knobs a,b∈[0,1])

*The figure is the actual output on a synthetic 128×128 input. Left: input, right: output. Point clouds are drawn as a top-down scatter (brightness = z), 1-D series as a line plot, volumes as the maximum-intensity projection along z, videos as the middle frame, complex images as magnitude; return values that are not pictures are shown as the values themselves.*
Sweeping knob a (0.1 / 0.5 / 0.9, the other knob at its default):
▸ signal_to_img: knob a sweep (docs site)
Sweeping knob b (0.1 / 0.5 / 0.9, the other knob at its default):
▸ signal_to_img: knob b sweep (docs site)
Stages (the ops that come before → this op, left to right):
▸ signal_to_img: stages (docs site)
On other images (synthetic scene / photo / coins. Top row: inputs, bottom row: their outputs. Knobs at default):
▸ signal_to_img: other inputs (docs site)
Turns a 1-D signal into a line plot and back into an image — the entry point for "looking at the sequence you built".
With the outbound bridges (img_to_signal / img_to_projection_profile) a sequence could be made from an image, but there was no registered op to look at that sequence. The only ops that can render a signal into an image were the 2 spectrogram ones, and both draw the spectrum, not the sequence itself. The figure generator draws 1-D as a polyline, but that is an implementation inside the tool, and it cannot be called from fullseye.apply or from Studio. This op fills that gap.
• a → vertical-axis padding pad = 0.30 * a * (data width) (tight at a=0, 30 % padding above and below at a=1). When tight, the end points overlap the frame.
• b → drawing style. points for b < 1/3, polyline for < 2/3, bars above that. ★The order is chosen so that "the default knob 0.5 gives the natural drawing for that type" —— for a sequence the polyline is natural, so the polyline is in the middle.
• The horizontal axis is the index 0..N-1, the vertical axis the data range (+ padding). The axes are closed-form (annotate.axes_transform), so where a value lands in pixels can be computed.
• Returns: (128, 128) float64, dark lines on white ([0,1]). ★A constant sequence opens the collapsed axis by ±0.5 and draws 1 horizontal line in the middle (axes_transform rejects an axis of width 0 with ValueError, so it is opened here). An empty sequence gives a blank sheet.
Where to use: checking the valleys of a projection profile by eye, seeing the effect of the 1-D function family (tb_smooth_funct_1d_gauss / tb_derivate_funct_1d), pasting straight into figures and articles.
• gallery2d_bridge 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.
The program below has been verified to run (same input as the figure). In Studio's help this block becomes buttons that load and run it on the spot.
img_to_signal 0.50 0.50 signal_to_img 0.50 0.50
▸ Load this pipeline · Load & run
• gallery2d_bridge — py -3.11 examples/gallery2d_bridge.py
image as input)identity · gaussian · mean_box · bilateral · unsharp · median · min_filter · max_filter
bridge)img_to_points · img_to_keypoints · img_to_signal · img_to_projection_profile · img_to_counts · img_to_matrix · img_to_video · img_to_volume
*Provenance: ops.py — 2D 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.