finalbooleancentered,// accum_data was centered, use target_sequence[][][CuasMotionLMA.RSLT_X], target_sequence[][][CuasMotionLMA.RSLT_Y] (if not NaN)
finaldoubleboost_exposure,// scale number of accumulated pairs (virtual tracking camera exposure time)
finaldoubleexposure_boost_factor,// RSLT_A *= pow(boost_exposure, factor); 0.5=sqrt, 0=no scale // By Claude on 05/24/2026
finaldouble[][][]probed_sequence,// contains vector_fields data, single target per tile
finalfloat[][]accum_data,// should be around 0, no low-freq
finaldoublelmax_fraction,// 0.7; // Check if local maximum is separated from the surrounding by this fraction of the maximum value
...
...
@@ -5944,6 +5969,9 @@ public class CuasMotion {
finalfloat[][]accum_debug,
finalQuadCLTparentCLT,// debug only, maybe null in other cases
finalintdebugLevel){
// Increase relative amplitude of the boosted-exposure maximum to win against non-boosted.
// Why is it needed - compensate blur from mis-registration?
doublescale_rslt_a=Math.pow(boost_exposure,exposure_boost_factor);// By Claude on 05/24/2026
// Will not set [RSLT_FAIL] = FAIL_NONE, but it is not final before
// apply masking in centered mode
// final int min_keep = 2; // Keep at least this number of (preliminary) best candidates
...
...
@@ -6310,6 +6338,9 @@ public class CuasMotion {
if(rslt>=0){
cuasMotionLMA.setResult(target);
target[CuasMotionLMA.RSLT_A]*=scale_rslt_a;
// keep [CuasMotionLMA.RSLT_RMS_A]
if(dbg_img){// UM-blured-scaled
dbg_stack[10]=cuasMotionLMA.getFx();
dbg_stack[11]=cuasMotionLMA.getLastYMinusFx();
...
...
@@ -9132,6 +9163,7 @@ public class CuasMotion {
niter,// final int when, // set if >=0 for failures
centered,// final boolean centered,
boost_accum_pairs,// final double boost_exposure,
clt_parameters.imp.cuas_exposure_boost_factor,// final double exposure_boost_factor, // By Claude on 05/24/2026
targets_nonoverlap,// final double [][][] vector_fields, // centers
fpixels_accumulated,// final double [][] accum_data, // should be around 0, no low-freq
lmax_fraction,// final double cuas_lmax_fraction, // 0.7; // Check if local maximum is separated from tye surrounding by this fraction of the maximum value
publicdoublecuas_boost_slow=4.0;// if >1 and the motion vector is below tile_size/cuas_boost_slow, scale corr_pairs
publicdoublecuas_boost_mv_lim=1.8;// Do not boost if motion vector faster than this (before in code equiv 1.8 pix)
publicdoublecuas_boost_accum=4.0;// if >1 increase tracking camera exposure (TODO: conditional / compete)
publicdoublecuas_exposure_boost_factor=0.5;// exponent: RSLT_A *= pow(boost_exposure, factor); 0.5=sqrt, 0=disabled, 1=linear // By Claude on 05/24/2026
publicbooleancuas_phase1_base=true;// Accumulate non-centered targets with base "exposure"
publicbooleancuas_phase1_boosted=true;// Accumulate non-centered targets with boosted "exposure"
...
...
@@ -2725,6 +2726,8 @@ min_str_neib_fpn 0.35
"Do not boost if motion vector faster than this (before in code equiv 1.8 pix).");
gd.addNumericField("Increase tracking camera exposure",this.cuas_boost_accum,5,8,"",
"If >1 increase tracking camera exposure (later - conditional).");
if(properties.getProperty(prefix+"cuas_exposure_boost_factor")!=null)this.cuas_exposure_boost_factor=Double.parseDouble(properties.getProperty(prefix+"cuas_exposure_boost_factor"));// By Claude on 05/24/2026