- 08 May, 2026 3 commits
-
-
Andrey Filippov authored
These four constants described the layout of TDCorrTile.getMismatchVector() return values and had no business being class-level statics in CuasMotion. Moved to local scope in the two methods that use them: getTargetsFromCorr2d and refineMotionVectors. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
Dead method/constant removal (21 methods across 5 files): - CuasMotion: addMotionVectors, clearFailByStrongerNeighbor, cloneTargetsSequence, filterByHorizon, filterMotionScans, findMatchingTarget, getKeyFrameVelocityScale, getTargetImages, getTargetsFromHyperAugment_2025, getVectorFieldHyper, showPxPyDs, subtractTargetSequence, trimSuffix; constants INDX_SPEED, INDX_CONFIDENCE, VF_TOP_TITLES - CorrectionFPN: calculateFPN_old - CuasCenterLma: getAverageRoll - CuasMotionLMA: applyWindowToData, copyMotion, getRR0, getFullParametersVector - CuasTile: setParentIndex, getParentIndex (were already commented out) targetsAnalyzeMCP fixes: - Correct PAR constants (add PAR_PXYAR=-2, shift others) - params array now accepts strings ("pxy","pxyar","vpxy","upxy", or LMA_TITLES names) in addition to integer indices; default remains ["pxy"] - Add missing PAR_PXYAR case (px, py, a, rmse, r) - Add amplitude to PAR_PXY case - Default case uses LMA_TITLES[npar] key instead of String.valueOf(npar) Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
-
- 07 May, 2026 7 commits
-
-
Andrey Filippov authored
- Extract precorr_ra, accum_ra, cuas_gaussian_ra in locateAndFreezeTargetsMulti - Compute fpixels_accum (LPF with cuas_accum_ra) for shiftAndRenderAccumulate in both loops - Compute fpixels_refine (LPF with cuas_precorr_ra) for refineMotionVectors - Both use Gaussian or running-average depending on cuas_gaussian_ra flag - When ra==1, LPF is a no-op (passes fpixels_tum through unchanged) Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
corr_partial_dbg() NPEs on null layers when sequences are skipped (has_centered=false or no valid frame pairs). Fill null slots with empty double[num_tiles][] before calling the visualizer. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
- Add FAIL_PENDING=-1 sentinel constant to CuasMotionLMA - Add initFromMotionSequence(): clones motion entries into target_sequence_multi as sentinels (RSLT_FAIL=FAIL_PENDING, RSLT_CENTERED=CENTERED_NO, RSLT_QSCORE=initial RSLT_MSCORE) - Add syncMotionScoreToSentinels(): keeps sentinel QSCORE current after each getEffectiveStrengthMV - Decouple use_motion/select_new flags in filter5Targets from motion_sequence==null - Add motion==null paths in filter5Targets: prohibit setup and is-max ranking for FAIL_PENDING sentinels - Extend filter5Targets marking step to cover FAIL_PENDING sentinels (use_motion=true, motion==null) - Update extendMotionScan center-detection to accept FAIL_PENDING as valid center state - First loop in locateAndFreezeTargetsMulti: call initFromMotionSequence, syncMotionScoreToSentinels; pass null to filter5Targets; use applyFilter(target_sequence_multi); use getRemain(target_sequence_multi) - getRemain(target_sequence_multi): count FAIL_PENDING+CENTERED_NO in num_noncentered Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
Line 8734 was: select_new = (motion_sequence != null) ? select_new_in : false This caused pass 2 (filter5(null, tsm, false, true, ...)) to enter the !select_new path — finding best existing good tiles instead of untested non-centered tiles — so nothing was ever selected and the centered-mode loop was a no-op. Fix: decouple select_new from motion_sequence null-check; only use_motion is forced false when motion_sequence is null. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
operational because of filter5Targets().
-
Andrey Filippov authored
Add targets_mv / frame_center_mv / corr_offset_mv overloads to correlatePairs() and correlatePair(). When targets_mv is non-null, GpuQuad.setRectilinearMovingTasks() generates per-tile TpTask centers that follow the target at each frame (cx0 + vx*offset_scale), so the GPU correlates tiles centered on the moving object and the result is the residual velocity rather than the full VX displacement. Callers that don't need this pass through the old uniform-grid overload unchanged. Also reverts the wrong "fixed-destination / shifted-read" masking edit from the previous session; the masking was already correct (mask tracks the target per frame) before that edit. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
- Masked frames: replace single-frame display with full fmin..fmax stack (scene_titles used as slice labels; scroll to watch target stay in place) - Source frame display removed (not needed alongside masked stack) - Single-tile corr2d block removed; replaced by full CORR2D multi-slice image after the nseq loop — one slice per keyframe, same tiled layout as *CORR2D.tiff, slice-labeled from scene_titles, uses corr_border_contrast from CLTParameters Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 06 May, 2026 3 commits
-
-
Andrey Filippov authored
- Pre-compute integer-pixel raised-cosine mask kernel once before nseq loop - Allocate fpixels_masked[nframes][width*height] once; clear per nseq with Arrays.fill - Restructure masking: parallel outer loop over frames (nFr via AtomicInteger), inner loop over tiles — no write contention (non-overlapping tile guarantee) - Pre-extract tile center/velocity into arrays before thread launch - Replace new ImagePlus(FloatProcessor) debug calls with ShowDoubleFloatArrays.showArrays() - Fix "centre" -> "center" in comments; naming: nFr for ai.getAndIncrement(), ntile for plain for
-
Andrey Filippov authored
-
Andrey Filippov authored
-
- 05 May, 2026 1 commit
-
-
Andrey Filippov authored
-
- 04 May, 2026 3 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
- 03 May, 2026 1 commit
-
-
Andrey Filippov authored
-
- 01 May, 2026 3 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
- 30 Apr, 2026 4 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
- 28 Apr, 2026 1 commit
-
-
Andrey Filippov authored
-
- 26 Apr, 2026 1 commit
-
-
Andrey Filippov authored
-
- 25 Apr, 2026 5 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-
- 23 Apr, 2026 1 commit
-
-
Andrey Filippov authored
-
- 19 Apr, 2026 1 commit
-
-
Andrey Filippov authored
CLAUDE.md and AGENTS.md are agent operator config, not imagej-elphel project artifacts. They contain machine paths, jump host addresses, and cross-agent setup that must not appear in the public repo. Both are now covered by .git/info/exclude (local clone only). Local files are managed via attic/codex-claude templates. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 17 Apr, 2026 3 commits
-
-
Andrey Filippov authored
These files belong in the private codex-claude repo, not in imagej-elphel. Reverts the file additions from 6821f865; the scripts are preserved on disk in attic/CLAUDE/bin/ and committed to the codex-claude private repo. Co-Authored-By:
Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
- ask_gemini.sh: non-interactive Gemini CLI wrapper (-f for context files, -m flash/pro model shorthand, auto @-reference for PNG/PDF) - dual-opinion.sh: extended with -g/-G flags for optional Gemini third agent; produces 4-section "Triple Opinion Synthesis" when enabled - ask_claude.sh, claude_daemon.sh, dual-opinion.sh, export scripts, backfill_center_ims.py: force-tracked (attic/ is gitignored globally, git add -f used to persist these helper scripts in the repo) - gemini.md: Gemini team integration instructions Gemini CLI setup: npm install -g @google/gemini-cli, GEMINI_API_KEY in ~/.bashrc. Default model gemini-2.5-flash; Pro requires billing enabled on the Google Cloud project backing the API key. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
- Cuas.createCenterClt(): average LLA from sequence scenes and save to center IMS XML file (did_ins_2 only, no EventLogger dependency) - QuadCLTCPU.restoreCenterClt(): load averaged LLA from center IMS file so addUasData() has a valid camera reference position - CuasRanging.addUasData(): log camera ATR, LLA, uas_home_alt, ned_corr before per-sequence loop; add cam_az/cam_tilt/cam_roll columns to TSV - UasLogReader: log ATR and LLA values when set; add getCameraLLA(), getUasHomeAlt(), getNedCorr() accessors - TwoQuadCLT: add comment explaining deferred setCameraLLA() design - CuasMotion: log UAS tile count and px/py/range per sequence Root cause found: camera_atr[0] (azimuth) in .list file is the ErsCorrection Y-frame-rotation angle, not compass bearing — they have opposite signs. Rule: az_list = -(compass_bearing_rad). Confirmed by comparison with working Eagle Mountain 2025 data (+2.7595 for SSW camera). Calibrated Latvia value: 2.0396, 0.0702, 0.0. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 16 Apr, 2026 3 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
-