swarm_field_from_tracks — DRIVE swarmflow op

• Data kinds: any × scalar × scalar → table

• Call: 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' (implementation को सीधे call करना हो तो 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', registry से लेना हो तो opsdrive.get("swarm_field_from_tracks"))

उपयोग

ऊपर से देखे frame का क्रम → सदस्यों को detect करना (blob2d के connected component + brightness का centroid) → पड़ोसी frame से mutual nearest neighbor द्वारा जोड़ना → velocity को SPH kernel से grid पर ले जाना।

जोड़ने की शर्त: A के किसी बिंदु का निकटतम पड़ोसी B का बिंदु हो, और उस B बिंदु का निकटतम पड़ोसी भी वही A बिंदु हो (पारस्परिक), और विस्थापन max_disp_px से अधिक न हो (डिफ़ॉल्ट = पहचाने गए बिंदुओं के बीच निकटतम-पड़ोसी दूरी की माध्यिका का 0.45 गुना। एक फ़्रेम की गति इससे अधिक हो तो बिंदु गलत जुड़ते हैं = ट्रैकिंग की सीमा)। सभी फ़्रेमों के जोड़ों के वेग को एक समष्टि में मिलाकर औसत लिया जाता है (स्थिर प्रवाह की मान्यता)। गलत जुड़े जोड़ों का वेग परिमाण के क्रम से भटकता है (मापा गया: समान रूप से बिखेरे गए 1300 बिंदुओं में 2 % जोड़े 1-3 m/s हटे, और ग्रिड की rms त्रुटि U का 16 % हो गई), इसलिए ग्रिड पर ले जाने से पहले उन्हें सामान्यीकृत माध्यिका जाँच (PIV की परंपरा: निकटतम outlier_k वेगों की माध्यिका से विचलन / उस पड़ोस के विचलनों की माध्यिका > outlier_threshold) से हटा दिया जाता है।

Args:

frames: समान आकार के (H, W) फ़्रेमों का क्रम (2 या अधिक)।

res: पिक्सेल का आकार [m/px]।

frame_dt: फ़्रेम अंतराल [s]।

center: छवि के केंद्र के विश्व निर्देशांक [m]।

grid_step: ग्रिड अंतराल [m] (डिफ़ॉल्ट = व्यक्तियों के बीच दूरी का अनुमान)।

h: ग्रिड पर ले जाने वाले कर्नेल का h [m] (डिफ़ॉल्ट = grid_step)।

threshold: द्विआधारीकरण की सीमा (न्यूनतम से अधिकतम के बीच का अनुपात)।

max_disp_px: एक फ़्रेम में गति की ऊपरी सीमा [px]।

min_count: ग्रिड के आधार-क्षेत्र में आवश्यक वेगों की संख्या।

outlier_k: माध्यिका जाँच में प्रयुक्त पड़ोसियों की संख्या (0 = जाँच नहीं)।

outlier_threshold: जाँच की सीमा।

Returns:

वेग-क्षेत्र का dict (module की परिपाटी) + points (M, 2) / point_velocity (M, 2) (जुड़े जोड़ों के मध्यबिंदु और वेग),

n_detected (प्रति फ़्रेम), n_linked, n_outliers (माध्यिका जाँच से हटाए गए जोड़े), n_rejected_blobs,

spacing (व्यक्तियों के बीच दूरी का अनुमान [m])।

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

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

इसी category के (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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.