The calibration-free solve reads each colour channel as one LED
direction — dIk/Iref ≈ gxcos θk
+ gysin θk. So a channel permutation does not tint
an image, it rotates the whole recovered gradient field.
Sparsh's frames reach us with R and B exchanged. It was found by scoring the depth stage on its own: its two reconstructions of the same contact correlated at −0.13, against 0.69–0.83 on every other dataset, and both rendered a round sphere press wrongly in orthogonal directions.
For a sphere the surface gradient points radially outward, so the dipole direction of each channel's difference is that channel's LED azimuth. Thirty sphere presses per sensor:
| rest hue | R | G | B | |
|---|---|---|---|---|
| our Mini | 172.1° | 259.2° | 5.1° | 51.1° |
| Sparsh, as-is | 42.1° | 75.7° | 4.3° | 259.8° |
| Sparsh, R↔B | 197.9° | 259.8° | 4.3° | 75.7° |
Swapped, R and G land within 1° of ours. A different gel tint cannot align LED azimuths; a channel-order difference does exactly that.
Force ρ on Sparsh was 0.909 before the fix and 0.894 after; the LUT gained 0.822 → 0.894. Contact size tracks force whatever the shape does, so a ρ cannot see a geometry this wrong. That is the argument for scoring image→depth separately from depth→newtons.
A correction of ours: a six-permutation search first put Sparsh's best at (90,330,210) and that was written up as “LED wiring differs per sensor”. It is the same fact said uselessly — (90,330,210) is (210,330,90) with R and B exchanged. The azimuths never differed.