CLAUDE: FPN second back-propagation iteration (imp.cuas_fpn_iters, default 1 = old behavior)
FPN = mean(scene - backProject(center)) is a fixed point that preserves the
center's own content residual (the rotating ghost): recomputing against the
same contaminated center reproduces the same ghost regardless of rot_period
or photometric vintage (POSE-12 confirmed: 43.1/92.0 unchanged).
Iterate per Andrey's design (internal handoff 2026-07-06):
1. subtract fpn_k from scenes in memory (setApplyFPN, delta-aware)
2. rebuild the center IMAGE from the corrected scenes over integer
rotations - new Cuas.rebuildCenterImageInMemory(): new-average only
(no parent cumulative fold), NOTHING persisted, center_clt and
image_center untouched (the .cuas cumulative is upstream state)
3. back-propagate against the rebuilt center image (swapped in/restored
around the measurement) -> residual dG = the ghost
4. fpn_{k+1} = fpn_k + dG in NEW arrays (scenes hold fpn_k references as
applied-FPN for delta re-apply); prints |dG| RMS/max per iteration
5. cuas_debug saves per-iteration -FPN-DG-ITERn
Gated by new dialog field "FPN back-propagation iterations" next to
"Rotation period"; default 1 keeps the POSE-12 baseline bit-reproducible.
Verify by RT-RENDER horizon/sky pk-pk (43.1/92.0 -> temporal-noise floor).
Data path verified: applyFPN sets hasNewImageData, honored by both
GpuQuad.setBayerImages and GpuQuadJna, so corrected pixels reach the GPU
for the rebuild and the second back-propagation.
Co-Authored-By:
Claude Fable 5 <noreply@anthropic.com>
Showing
Please register or sign in to comment