swarm_field_from_tracks — DRIVE 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"))

Verwendung

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]).

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Gleiche Kategorie (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.