- 26 May, 2026 6 commits
-
-
Andrey Filippov authored
After computing per-scene pXpYD arrays, saves a tile-resolution hyperstack <ts>-NADIR-DISPARITY-MAPS.tiff with: - frames = scenes (labelled by timestamp) - slices = pX, pY, D (3 channels) - NaN where scene has no pose or tile has no data Useful for verifying disparity transform coverage before feeding the rendered images into OpenMVS/COLMAP. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
New methods in OpticalFlow.java: - getNadirDisparityMaps(): transforms SfM terrain disparity from the segment reference into each scene's own camera frame using Cuas.transformFromVirtual(). Returns double[][][nscene][ntiles][3]. - renderNadirSequence(): renders each scene from its own position (scene_xyz/atr=ZERO3, ref_scene=scene itself) using per-scene pXpYD from getNadirDisparityMaps(). ERS rolling-shutter velocity corrections are still applied. Output: <ts>-NADIR-MERGED.tiff. Unlike renderSceneSequence() (TERRAIN-DISP), which warps all frames to the reference for zero ground parallax, renderNadirSequence() produces natural-parallax perspective images from each scene's own viewpoint — the correct input format for OpenMVS/COLMAP dense reconstruction. New parameter in IntersceneMatchParameters: - nadir_gen (boolean, default false): checkbox under 'Flat ground' tab, before fgnd_gen_optho. Enables nadir rendering in the existing TERRAIN-DISP pipeline block. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
-
Andrey Filippov authored
Adds filteredResources to the seed template: - regex filter for node_modules/.git/Java LS artifacts (existing on .137) - multiFilter to hide attic/ from Eclipse project explorer and build Copy this to .project on a new machine setup. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
- scripts/lwir_map/lwir_scene_summary.py (was fopen_nc_summary.py) - scripts/lwir_map/lwir_map_overlay.py (was fopen_overlay.py) - scripts/lwir_map/README.md (pipeline doc + known limitations) - Updated catalog.json and scripts/README.md with new names/paths Scripts read imagej-elphel linked LWIR output and generate per-scene TSV + GeoJSON/KML/SVG map overlays for satellite atlas navigation. Not FOPEN-specific; usable for any airplane/drone LWIR acquisition. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
Documents TERRAIN-DISP-MERGED TIFF format, INTERFRAME.corr-xml pose convention, Elphel→COLMAP coordinate conversion, disparity-to-depth formula, and the foliage CLI pipeline (no C++ library linking). Co-authored-by:Claude <claude@elphel.com>
-
- 25 May, 2026 4 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
-
Andrey Filippov authored
Replaces hardcoded `boolean reuse_non_centered = true` with a config parameter. Adds a companion `cuas_reuse_centered` parameter: when true, attempts to load ROUND_TWO_GOOD before starting computation and returns early if found, bypassing both phases. Both default to true — missing files behave as if set to false. Wired into dialog, properties (.corr-xml), and copy() in IntersceneMatchParameters. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
-
- 24 May, 2026 3 commits
-
-
Andrey Filippov authored
-
Andrey Filippov authored
Spawns attic/elphel-agent-tools/bin/cpu_profile_hold.py on startup, which calls power-profiles-daemon HoldProfile('balanced') via DBus. Released automatically via SIGTERM on JVM shutdown. Design: KDE AC default is power-saver; this hold raises the profile to balanced (hardware-driven boost under load) while ImageJ is running, then releases it so the machine drops back to power-saver on exit. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
-
- 23 May, 2026 1 commit
-
-
Andrey Filippov authored
-
- 21 May, 2026 2 commits
-
-
Andrey Filippov authored
Pure-Java prototype CuasRTDetector + RtParams parameters class + CuasRTLib JNA stub (activate when JNA added to pom.xml). No dependencies added; build is clean. See design discussion in attic/imagej-elphel-internal/handoffs/2026-05-21_RealTimeDesign.md. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
-
- 19 May, 2026 1 commit
-
-
Andrey Filippov authored
-
- 17 May, 2026 1 commit
-
-
Andrey Filippov authored
-
- 14 May, 2026 3 commits
-
-
Andrey Filippov authored
corr_offset_eff is now computed after corr_pairs_ref so the upper bound (corr_pairs_ref / corr_offset) is available; lower bound kept at 1. Clamping is flagged in the existing println when it activates. Co-authored-by:Claude <claude@elphel.com>
-
Andrey Filippov authored
-
Andrey Filippov authored
scaling
-
- 12 May, 2026 2 commits
-
-
Andrey Filippov authored
05/11/2026: restore pre-fix amplitude (window fix doubled it)
-
Andrey Filippov authored
-
- 11 May, 2026 1 commit
-
-
Andrey Filippov authored
-
- 09 May, 2026 4 commits
-
-
Andrey Filippov authored
The previous sed replacement of 'tMTF_Bayer.java' matched across the '\t' tab escape in a string literal, producing illegal '\M' escape. Restored \t. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
Copy-paste errors left the wrong filename in the "X.java is free software" line. Fixed with a grep scan across all source files. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
DoubleFHT.java had a copy-paste error in its GPL header (wrong description and wrong filename from MatchSimulatedPattern). Fixed both and added attribution to the ImageJ FHT.java source (Wayne Rasband, NIH, public domain). DoubleGaussianBlur.java already had an in-class attribution comment; added a matching note in the GPL header for consistency. Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
Andrey Filippov authored
All Elphel-authored files in the cuas, ims, mcp, gpu, orthomosaic, tileprocessor, vegetation, calibration, cameras, common, correction, dct, readers, and x3d packages. Dates derived from git log (first and last commit year); mtimes restored with git-restore-mtime before generating copyright year ranges. Third-party files excluded: epfl/Differentials_.java (EPFL code), gpu/JCuda_ImageJ_Example_Plugin.java (JCuda example, (c) Marco Hutter). Co-Authored-By:Claude Sonnet 4.6 <noreply@anthropic.com>
-
- 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 2 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
-