marker_divergence — DRIVE tactorque op

• Data kinds: matrix × matrix × scalar → table

• Call: import fullseye as fs; fs.ledger.marker_divergence(pts, u, radius: 'float', min_neighbors: 'int' = 4, k_max: 'int' = 24) -> 'dict' (to call the implementation directly, import tactorque; tactorque.marker_divergence(pts, u, radius: 'float', min_neighbors: 'int' = 4, k_max: 'int' = 24) -> 'dict'; from the registry, opsdrive.get("marker_divergence"))

Usage

Per-point divergence div = ∂ux/∂x + ∂uy/∂y and curl curl = ∂uy/∂x − ∂ux/∂y from scattered markers pts (N, 2) and displacements u (N, 2) (unit = unit of u ÷ unit of pts). Fits a plane c0 + c1 x + c2 y by least squares to the points within the neighborhood radius radius (at most k_max points) (on a regular grid with a radius of 1.01 pitch this equals the 5-point central difference and agrees with sceneflow.flow_divergence to 1e-15; with a radius of 1.5 pitch the 9 points give a row-averaged difference that differs by 11 % at the border, measured). Solves the normal equations for all points in one batch. Points with fewer than min_neighbors neighbors or with singular (collinear) normal equations get valid = False and div/curl = nan (fail-closed: never silently 0). The same op works for scattered FEM nodes. Raises ValueError: pts/u is not (N, 2), shapes differ, radius ≤ 0, N < min_neighbors.

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_tactile_dipole_torque — py -3.11 examples/poc_tactile_dipole_torque.py

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

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

Same category (tactorque)

punch_pressure · punch_surface_uz · hertz_pressure_shifted · ellipse_pressure_shifted · pressure_first_moment · boussinesq_kernel · boussinesq_surface_displacement · surface_divergence_closed_form


*Provenance: tactorque.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.