tacslip op• Data kinds: matrix × matrix × scalar → table
• Call: import fullseye as fs; fs.ledger.marker_match_grow(p0, p1, pitch_px: 'float', seed_tol: 'float' = 0.25, tols=(0.2, 0.3, 0.45), nb_r: 'float' = 1.6, border: 'float' = 2.0, max_iter: 'int' = 80) -> 'dict' (to call the implementation directly, import tacslip; tacslip.marker_match_grow(p0, p1, pitch_px: 'float', seed_tol: 'float' = 0.25, tols=(0.2, 0.3, 0.45), nb_r: 'float' = 1.6, border: 'float' = 2.0, max_iter: 'int' = 80) -> 'dict'; from the registry, opsdrive.get("marker_match_grow"))
Finds the correspondence between reference markers p0 and loaded markers p1 (each (N, 2) [px]) by growing it through continuity. Returns i0, i1 (index arrays of the correspondence) and matched.
On a regular grid, once |u| exceeds pitch/2, both nearest-neighbour and correlation jump to the adjacent marker (measured: on an 8 px grid, PIV reads a 5 px shift as −3 px). Seeds = markers on the border (within border·pitch) of p0's bounding rectangle whose prediction-free nearest neighbour is within seed_tol·pitch and whose second nearest is farther than 0.75 pitch (the physical premise that "contact is inside the field of view and the border is far field = small displacement". Seeding everywhere produced 27 false seeds jumped by one pitch, because the core displacement of 6.4 px is 1.6 px from the neighbouring reference position). After that, for each unmatched marker, the mean displacement of 2 or more already-matched points within nb_r·pitch is used as the prediction and the nearest neighbour within tol·pitch is taken, with tol relaxed stepwise from a small value. Each p1 is used only once. Raises ValueError: p0/p1 not (N, 2), pitch_px ≤ 0.
Empty input (p0 with 0 elements) raises ValueError.
• 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.
• gallery_drive_soil_tactile — py -3.11 examples/gallery_drive_soil_tactile.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
tacslip)mindlin_partial_slip · mindlin_traction · hertz_surface_ur · hertzian_tangential_inner · cerruti_kernel · cerruti_surface_displacement · membrane_shear_field · membrane_markers
*Provenance: tacslip.py — DRIVE 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.