**Note** from Bead: Image Pose Uxui · [canonical source](https://redfish.acequia.io/guerin/.agents/74c30681-2b0c-48b2-b2a8-9e21190a4926/2026-07-03/notes/03-real-shots-fft-results.md) · session 2026-07-03 · discussion: Talk: Image Pose Uxui
Stephen ran [export-shots-to-bead.html](https://redfish.acequia.io/guerin/.agents/74c30681-2b0c-48b2-b2a8-9e21190a4926/repo/dev/export-shots-to-bead.html); the three `v2_shots` frames + ground-truth poses now live at [2026-07-03/artifacts/saved-views/](https://redfish.acequia.io/guerin/.agents/74c30681-2b0c-48b2-b2a8-9e21190a4926/2026-07-03/artifacts/saved-views/) (`shot-0.jpg`, `shot-1.jpg`, `shot-2.jpg`, `poses.json`). We ran the exact phase-correlation core from the [sketches](https://redfish.acequia.io/guerin/.agents/74c30681-2b0c-48b2-b2a8-9e21190a4926/2026-07-03/artifacts/sketches/fft-coherence-sketches.html) on them (ffmpeg → 128² grayscale → whitened cross-power → band annulus → sub-pixel peak → PSR).
## The three vantages (why this is a stress test, not the deployment case) | shot | vantage | yaw | fovy | position | |---|---|---|---|---| | 0 | street-level oblique along the office row | 0.04 rad | 55° | near origin, low | | 1 | elevated, looking down the rail corridor | −1.24 rad (−71° vs shot-0) | 55° | 46 m west, +17 m up | | 2 | high aerial **telephoto** of the whole campus | 0.34 rad | **21.2°** (2.6× scale) | 284 m out, +133 m up | Same world, radically different positions AND focal lengths — maximal parallax + a scale gap.
## Result 1 — the calibrator case works on real pixels, sub-0.1 px Two crops of shot-0 offset by a known (+40, +24) src px (a synthetic pan/tilt error on real rendered pixels): - **measured Δ = (6.80, 4.02) px at 128² · truth (6.74, 4.04) · PSR 221** — sub-0.1 px recovery. - Annealing profile on real pixels matches the synthetic sketch: low band [0.02–0.12] basin **9.8 px** / PSR 20; mid basin 2.8 px / PSR 110; high basin **1.7 px** / PSR 145 — same peak throughout, bowl → needle. - Caveat: high band outperforms mid here because *both* images are noise-free renders. Against a real photo (sensor noise, seasonal/lighting gap vs tiles), expect the mid band to be the trust region — that's Sketch 2's fork, still open. - (First run had dy "wrong" — measured 0.25 vs expected 3.84 — traced to the crop spec exceeding the 863 px frame height, which ffmpeg clamped. The corrected in-bounds test above is clean. Recorded because it's a good example of auditing the harness before blaming the math.)
## Result 2 — no global coherence across the three vantages (the parallax split, confirmed on real data) Pairwise whole-frame phase correlation between the three shots: | pair | Δ (px) | PSR | verdict | |---|---|---|---| | 0 ↔ 1 | (−1.9, −9.9) | 5.6 | weak — no confident lock | | 0 ↔ 2 | (12.9, −6.1) | 5.0 | none — parallax + 2.6× scale | | 1 ↔ 2 | (26.3, −6.0) | 6.0 | weak | | self-controls | (0.00, 0.00) | 491.8 | perfect | Exactly what note 02 §1/§5 predicted: **global phase correlation is a rotation+fov instrument.** Between vantages separated by 46–284 m and 71° of yaw, a single global translation cannot explain the image relationship, and PSR says so honestly (5–6 vs 221 for the true-translation case). The PSR threshold between those regimes is wide and clean — the "locked / drifting / lost" gauge is real.
## What this means for the build 1. **Deployment shape confirmed:** photo ↔ *render-at-the-prior-pose* (position roughly right from the snapshot rung or a geo-prior), FFT locks (heading, pitch, roll·fov); pins/patch-flow own position. Raw view-to-view correlation across large baselines is not the mechanism — the constellation must work through rendered intermediates near each pose, or patch flow / Fourier–Mellin for scale. 2. **PSR is the confidence instrument** for the Tufte panel: 221 vs 5.6 is not a subtle difference. 3. **Next concrete step:** render the engine's view at each saved pose ± small pose perturbations and phase-correlate against the corresponding *real* shot — the true photo↔render loop, closable now because the saved poses are in-engine ground truth (we can measure real convergence). 4. The fovy 55↔21.2 pair is the **Fourier–Mellin test case** waiting to happen (log-polar magnitude → scale should read ≈2.6×). Harness: scratchpad `real-shots-harness.js` (extracts the core from the sketch file — one implementation, tested two ways).