1. 27 May, 2026 3 commits
    • Andrey Filippov's avatar
      CLAUDE: Dual-pass nadir rendering (original + rectilinear) · 00c33f1a
      Andrey Filippov authored
      Update calling code in OpticalFlow.java to compute nadir_pXpYD once and
      render two passes when either nadir_gen or nadir_undistort is enabled:
      - nadir_gen=true  → renderNadirSequence(..., false) → *-NADIR-MERGED
      - nadir_undistort=true → renderNadirSequence(..., true)  → *-NADIR-MERGED-RECTILINEAR
      
      The nadir_pXpYD array is deep-copied per scene for the undistort pass so
      the original sensor-coordinate data is preserved for the non-undistorted pass.
      Co-authored-by: 's avatarClaude <claude@elphel.com>
      00c33f1a
    • Andrey Filippov's avatar
      CLAUDE: Add nadir_undistort parameter — rectilinear nadir images for COLMAP PINHOLE · 09d21774
      Andrey Filippov authored
      Add nadir_undistort (boolean, default true) to IntersceneMatchParameters
      at all 6 required locations (field, dialog, read, save, load, clone).
      
      When enabled, renderNadirSequence() undistorts the pX,pY coordinates of
      each scene's nadir disparity map before calling renderGPUFromDSI(), so the
      rendered NADIR-MERGED TIFF images are rectilinear (pinhole projection)
      rather than retaining the sensor's native radial distortion.
      
      Analysis of the Boson 640 calibration (lwir16-06-72-00.calib-tiff) showed:
      - True distortion polynomial terms: < 1 px magnitude across the full image
      - The dominant issue was d = K0 = 1.00997 (a ~1% focal-length constant offset)
        which, when modeled as PINHOLE with the nominal focal length, curves the
        ground plane into the 'Little Prince planet' sphere effect seen in Blender
      - With nadir_undistort=true, COLMAP can use a pure PINHOLE model with the
        correct effective focal length (f * d = 1121.8 px instead of 1110.8 px)
      
      The undistortPxPy() helper mirrors getWorldCoordinates() in GeometryCorrection:
        rD_mm = ||(pX-cx, pY-cy)|| * pixelSize_mm
        factor = getRByRDist(rD_mm / distortionRadius)
        pX_rect = (pX - cx) * factor + cx
      Co-authored-by: 's avatarClaude <claude@elphel.com>
      09d21774
    • Andrey Filippov's avatar
      CLAUDE: Add nadir_um_en/sigma/weight parameters for SIFT-tuned UM on nadir renders · 11c8998d
      Andrey Filippov authored
      Add three dedicated unsharp-mask parameters to IntersceneMatchParameters:
        nadir_um_en     (boolean, default false) - enable UM on nadir images
        nadir_um_sigma  (double,  default 2.0)   - Gaussian sigma in pixels
        nadir_um_weight (double,  default 1.0)   - blend weight (1.0 = 100%)
      
      These are separate from the existing um_sigma/weight and terr_um_* / cuas_rng_um_*
      parameters so they can be independently tuned for SIFT feature extraction.
      LWIR nadir images with UM sigma=2 go from ~500 to ~5000 SIFT keypoints/frame.
      
      Updated all 6 required locations: field declarations, dialog, dialog-read,
      save, load, and clone.
      
      Applied the filter in renderNadirSequence() using the existing applyUM()
      helper, matching the renderSceneSequence() pattern.
      Co-authored-by: 's avatarClaude <claude@elphel.com>
      11c8998d
  2. 26 May, 2026 7 commits
    • Andrey Filippov's avatar
      CLAUDE: Add transposeJagged() utility to ShowDoubleFloatArrays; refactor getNadirDisparityMaps() · 2e1c69b0
      Andrey Filippov authored
      Add ShowDoubleFloatArrays.transposeJagged(double[][][], int n_comp, int n_inner)
      which converts the common [outer][inner][comp] layout (with null outer or inner
      entries) to [outer][comp][inner] substituting NaN for nulls.  This pattern
      appeared inline in getNadirDisparityMaps() and recurs in other tile-processing
      code.
      
      Refactor getNadirDisparityMaps() to replace the 12-line inline transpose loop
      with a single call to the new utility, keeping the same semantics.
      Co-authored-by: 's avatarClaude <claude@elphel.com>
      2e1c69b0
    • Andrey Filippov's avatar
      CLAUDE: Save NADIR-DISPARITY-MAPS hyperstack from getNadirDisparityMaps() · 72a8b1df
      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: 's avatarClaude <claude@elphel.com>
      72a8b1df
    • Andrey Filippov's avatar
      CLAUDE: Add getNadirDisparityMaps() and renderNadirSequence() for OpenMVS · f455f79f
      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: 's avatarClaude <claude@elphel.com>
      f455f79f
    • Andrey Filippov's avatar
      several typos · 5477b6bc
      Andrey Filippov authored
      5477b6bc
    • Andrey Filippov's avatar
      CLAUDE: Update eclipse_project_setup/.project — add attic filter · 9812ffc0
      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: 's avatarClaude <claude@elphel.com>
      9812ffc0
    • Andrey Filippov's avatar
      CLAUDE: Add lwir_map scripts (renamed from fopen_nc_summary/fopen_overlay) · f0e7dc49
      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: 's avatarClaude <claude@elphel.com>
      f0e7dc49
    • Andrey Filippov's avatar
      CLAUDE: Add OpenMVS 3D reconstruction section to project-details.md · 1579c9b3
      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: 's avatarClaude <claude@elphel.com>
      1579c9b3
  3. 25 May, 2026 4 commits
  4. 24 May, 2026 3 commits
  5. 23 May, 2026 1 commit
  6. 21 May, 2026 2 commits
  7. 19 May, 2026 1 commit
  8. 17 May, 2026 1 commit
  9. 14 May, 2026 3 commits
  10. 12 May, 2026 2 commits
  11. 11 May, 2026 1 commit
  12. 09 May, 2026 4 commits
  13. 08 May, 2026 3 commits
    • Andrey Filippov's avatar
      Claude: Demote INDX_VX/VY/STRENGTH/FRAC to method-local constants · 0868da8a
      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: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      0868da8a
    • Andrey Filippov's avatar
      Claude: Remove dead code from cuas package + fix targetsAnalyzeMCP · 115acc78
      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: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      115acc78
    • Andrey Filippov's avatar
      debugging · 5defee61
      Andrey Filippov authored
      5defee61
  14. 07 May, 2026 5 commits