3D reconstruction workbench — every stage, 20 samples

Not a results figure: this is the full chain with every tunable quantity exposed, so a defect can be attributed to a stage. Columns: 1 raw · 2 reference · 3 dI = img−ref (×3) · 4 max|dI| · 5 valid mask · 6 LUT bin observed? · 7 gx · 8 gy · 9 |grad| · 10 div(g) = Poisson RHS · 11 depth · 12 depth halo-removed · 13 radial profile vs analytic cap · 14 Open3D mesh. Reproduce: xvfb-run -a -s "-screen 0 1400x1000x24" python -m force_recovery.recon_study glowtact

Three defects the numbers localise

1. Up to 22% of contact pixels land in LUT bins never observed during calibration (column 6, dark = value invented by nearest-neighbour fill). It grows with depth: star 2% → 22% from shallow to deep. Steep rim colours at large indentation are outside the calibrated set, so their gradient is made up. 2. Flat-topped indenters reconstruct as domes, not plateaus. The centre/rim height ratio should be ≈1.0 for a flat punch; measured 1.23–1.42 for star / triangle / quad / B. The sphere's 1.43–1.46 is correct — for a sphere a dome IS the right answer, which is why the same number means different things per row. The interior of a flat contact carries no colour change, so Poisson can only raise it by integrating inward from the rim. 3. The valid mask is halo-dominated (column 5): for star/triangle/quad it is a round blob while column 3 shows the shape crisply. The mask threshold |dI| > 8 admits the diffuse halo, and the halo pedestal then has to be removed downstream (column 12) rather than never being integrated.

Per-sample diagnostics

samplepeak [mm]unobserved LUT centre/rimgrad angle
chance 90°
profile RMS
round z=2.12mm F=4.4N1.600%1.466.8°69 µm
round z=3.21mm F=9.4N2.554%1.435.8°35 µm
round z=3.80mm F=14.8N2.941%1.445.1°105 µm
star z=1.73mm F=3.0N1.612%1.44
star z=2.34mm F=8.0N2.0710%1.33
star z=2.96mm F=11.0N2.0314%1.36
star z=3.53mm F=16.0N2.3022%1.35
triangle z=2.28mm F=4.9N1.405%1.42
triangle z=3.11mm F=9.7N2.059%1.31
triangle z=3.75mm F=14.7N2.6610%1.32
quad z=2.16mm F=3.6N1.194%1.32
quad z=2.94mm F=9.2N1.759%1.24
quad z=3.52mm F=14.2N2.3210%1.23
quad_small z=1.51mm F=3.9N1.437%1.32
quad_small z=2.55mm F=9.2N2.516%1.35
quad_small z=3.47mm F=13.7N2.938%1.35
quad_small z=3.97mm F=17.4N2.6612%1.42
B z=2.91mm F=4.9N1.967%1.39
B z=4.04mm F=10.6N2.836%1.39
B z=4.48mm F=13.7N2.875%1.40

Grad angle and profile RMS are only defined where the indenter is a sphere of known radius (the round family): the LUT gradient sits 5.1–6.8° from the analytic sphere gradient and the radial profile matches the cap to 35–105 µm, so on this sensor the table and the solver are both sound — the defects above are about coverage, mask and flat-top geometry, not about the photometric map being wrong.