slice_thickness_profile — DRIVE cutting op

• Data kinds: rgb × scalar × scalar → table

• Call: import fullseye as fs; fs.ledger.slice_thickness_profile(image, px_per_mm: 'float', board_row: 'float', z_band=None, win: 'int' = 4) -> 'dict' (to call the implementation directly, import cutting; cutting.slice_thickness_profile(image, px_per_mm: 'float', board_row: 'float', z_band=None, win: 'int' = 4) -> 'dict'; from the registry, opsdrive.get("slice_thickness_profile"))

Usage

In the image along the cutting edge, finds per row the subpixel positions of the "food item end face" and the "flat face of the blade"; the difference = slice thickness (mm).

Each pixel is linearly unmixed into fractions of 3 colours (background, food, blade) (2 channels — chroma R − B and luminance — plus sum = 1). The background fraction is a pure step falling 1 → 0 at the end face, and the blade fraction a pure step rising 0 → 1 at the blade face, so the sum inside each window gives the edge position (coverage method). Blur does not change the sum of fractions, so widening the window to ±(3σ + 1) px according to the blur estimate (second moment σ of the end-face step) keeps it unbiased. Even if the slice is thinner than the window, the two steps are separate fractions and do not interfere. Reference colours are taken locally per row (following left–right illumination gradients). The blade decision uses the ratio "where the blade luminance lies between background and food", so it does not depend on the brightness multiplier (gain).

The end face and the blade face should each lie on a straight line: rows deviating by more than 1.5 px are removed, and if more than 30 % deviate, ValueError (it does not silently get it wrong). z_band: restricts the rows used to (z_lo, z_hi) mm (used to exclude the bevel of a single-edged blade). Returns: z_mm, thickness_mm (per row), mean_mm, lean_deg (tilt of the blade face from vertical, atan2), face_line, end_line, n_rows, n_rejected, blur_px.

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_food_cutting_measure — py -3.11 examples/poc_food_cutting_measure.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 (cutting)

cutting_scene · cutting_face_render · cutting_edge_render · cutting_episode_synth · cutting_wrist_mjcf · knife_edge_track · cut_depth_from_side · cut_surface_roughness


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