physarum_transport_image — GRAPH flow op

• Data kinds: image2d × image2d → table

• Call: import fullseye as fs; fs.ledger.physarum_transport_image(a, b, connectivity=4, normalize=True, dt=0.1, max_iters=5000, tol=1e-06, gap_tol=1e-06, snapshots=0) (to call the implementation directly, import physarum_search; physarum_search.physarum_transport_image(a, b, connectivity=4, normalize=True, dt=0.1, max_iters=5000, tol=1e-06, gap_tol=1e-06, snapshots=0); from the registry, opsgraph.get("physarum_transport_image"))

Usage

Earth mover's distance between two mass images by the slime mould's tube dynamics.

Every pixel is a node; neighbouring pixels (connectivity 4 or 8) are joined by a tube of length 1 (sqrt(2) on diagonals), so the ground metric is the grid path length (Manhattan for 4, octile for 8). Mass a enters and mass b leaves: the supply is a - b after both are scaled to unit mass (normalize=True; with False they must already carry the same mass). Dynamics, convergence and the two-sided bound as in graph_physarum_transport; larger images run on the sparse Laplacian with conjugate gradients.

Returns cost (the 1-Wasserstein distance estimate in pixel units, an upper bound), dual_bound (Kantorovich–Rubinstein lower bound), gap, conductance (an image: each pixel's thickest incident tube), flow_field ((H, W, 2): the mean of the flow vectors of the tubes at each pixel, in (row, col) units of mass per unit length, for drawing arrows), potential ((H, W) pressures), iters, converged, gap_converged, history, cost_history, dual_history, and with snapshots = m > 0 also snapshots (m conductance images at evenly spaced iterations, the last one final), snapshot_iters and snapshot_cost (sum_e L_e |Q_e| at those iterations) for watching the tubes form.

Raises ValueError: images not 2-D, finite, non-negative, of the same shape with at least 2 rows and columns, or without mass; unequal masses when normalize=False; connectivity not 4 or 8; snapshots < 0; and as graph_physarum_transport.

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_physarum_transport — py -3.11 examples/poc_physarum_transport.py

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

graph_edge_consensus · graph_core_persistence · tree_morphometry · tree_sholl · tree_run_length

Same category (flow)

graph_physarum_path · physarum_route · graph_physarum_transport


*Provenance: physarum_search.py — GRAPH 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.