swarmflow op• Datenarten: any × scalar × scalar → table
• Aufruf: import fullseye as fs; fs.ledger.swarm_field_from_tracks(frames, res: 'float', frame_dt: 'float', center=(0.0, 0.0), grid_step=None, h=None, threshold: 'float' = 0.3, max_disp_px=None, min_count: 'int' = 3, outlier_k: 'int' = 12, outlier_threshold: 'float' = 3.0) -> 'dict' (die Implementierung direkt: import swarmflow; swarmflow.swarm_field_from_tracks(frames, res: 'float', frame_dt: 'float', center=(0.0, 0.0), grid_step=None, h=None, threshold: 'float' = 0.3, max_disp_px=None, min_count: 'int' = 3, outlier_k: 'int' = 12, outlier_threshold: 'float' = 3.0) -> 'dict'; aus dem Register: opsdrive.get("swarm_field_from_tracks"))
Frame-Folge in Draufsicht → Individuen erkennen (Zusammenhangskomponenten von blob2d + Helligkeitsschwerpunkt) → mit dem Nachbarframe über gegenseitig nächste Nachbarn verknüpfen → Geschwindigkeiten mit dem SPH-Kern aufs Gitter übertragen.
Verknüpfungsbedingung: Der nächste Nachbar eines Punktes in A ist ein Punkt in B, und der nächste Nachbar dieses B-Punktes ist ebenfalls der A-Punkt (gegenseitig), und die Verschiebung ist höchstens max_disp_px (Standard = das 0,45-Fache des Medians der Nächste-Nachbar-Abstände zwischen den erkannten Punkten. Überschreitet die Bewegung eines Frames dies, werden Punkte verwechselt = Grenze des Trackings). Die Geschwindigkeiten der Paare aller Frames werden zu einer Population zusammengefasst und gemittelt (Annahme stationärer Strömung). Verwechselte Paare weichen in der Geschwindigkeit um eine Größenordnung ab (gemessen: bei 1300 gleichmäßig verteilten Punkten wichen 2 % der Paare um 1-3 m/s ab, und der rms-Fehler des Gitters betrug 16 % von U), daher werden sie vor der Übertragung auf das Gitter durch einen normierten Mediantest verworfen (PIV-Praxis: Abweichung vom Median der Geschwindigkeiten der outlier_k nächsten / Median der Abweichungen dieser Nachbarschaft > outlier_threshold).
Args:
frames: Folge von (H, W)-Frames gleicher Größe (2 oder mehr).
res: Pixelgröße [m/px].
frame_dt: Frame-Intervall [s].
center: Weltkoordinaten der Bildmitte [m].
grid_step: Gitterabstand [m] (Standard = geschätzter Abstand der Individuen).
h: h des Kerns für die Übertragung auf das Gitter [m] (Standard = grid_step).
threshold: Binarisierungsschwelle (Anteil zwischen Minimum und Maximum).
max_disp_px: Obergrenze der Bewegung in einem Frame [px].
min_count: Anzahl der Geschwindigkeiten, die im Träger einer Gitterzelle benötigt wird.
outlier_k: Anzahl der Nachbarn für den Mediantest (0 = kein Test).
outlier_threshold: Schwelle des Tests.
Returns:
Geschwindigkeitsfeld-dict (Modulkonvention) + points (M, 2) / point_velocity (M, 2) (Mittelpunkte und Geschwindigkeiten der verknüpften Paare),
n_detected (pro Frame), n_linked, n_outliers (durch den Mediantest verworfene Paare), n_rejected_blobs,
spacing (geschätzter Abstand der Individuen [m]).
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py
table als Eingabe)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
swarmflow)sph_kernel · sph_density_pressure · swarm_simulate · swarm_render_overhead · swarm_field_from_piv · potential_flow_cylinder · velocity_deficit_map · stagnation_from_centerline
*Provenance: swarmflow.py — DRIVE Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.