Releases: GEOINT/grdl
Releases · GEOINT/grdl
v0.4.3
New readers / metadata
- EO NITF: parse CSEPHA (commercial ephemeris) and RSMGGA (RSM ground-to-image grid) TREs per STDI-0002; add
CSEPHAMetadata,RSMGGAMetadata,RSMGGAGridPlane,RSMSegmentGrid(withsegment_for_pixel()helper) - EO NITF geolocation:
create_geolocation()factory now prefers RSM over RPC when both TREs are present - NISAR: extract the Doppler centroid 2-D LUT (zero-Doppler time × slant range) from RSLC processingInformation per JPL D-102268
- CRSD: typed
CRSDMetadata,CRSDChannelParameters,CRSDDwellPolynomialSet,CRSDReferenceGeometry, wired throughCRSDReader(parses DwellPolynomials, channel parameters, Doppler rate slopes, reference geometry)
Performance
- RPC/RSM ground-to-image inversion: closed-form analytic Jacobian replaces finite differences. Halves per-iteration evaluator cost, removes step-size tuning, eliminates cancellation error
- Orthorectifier: batched output-grid iteration with per-batch DEM pre-sample (configurable via
orthorectify(batch_size=...)orOrthoBuilder.with_batch_size(), default 2,000,000 points). Caps peak memory on large grids and stops the inverse projection from re-querying the DEM on every Newton iteration
Detection
ImageDetector.detect()andCFARDetector.detect()accept a newvalid_maskkeyword for ROI cueing. CFAR background statistics remain computed from the full image so the adaptive noise floor stays physically meaningful; only the final candidate set is gatedDetectionSet.filter_by_region(shape, geolocation, mode=...)— centroid / intersects / contained spatial post-filter. Shape is duck-typed on.to_pixels(geolocation), so no hard dependency on external modules
Fixes
SICDGeolocation: explicit per-point height arrays now take precedence over DEM lookup (array → DEM → default_hae). The previous DEM-first ordering silently overrode caller-provided heights and re-queried the DEM on every inverse callCOAProjection: RGAZCOMP now raises on missingRgAzCompsection and derivesAzSFfromKazPolyevaluated at SCP COA time whenAzSFis absent (SICD Vol3 §4.3 / Vol1 §15)Geolocation.latlon_to_imageABC: base-class fast path now honors array heights, short-circuiting DEM lookup consistently with the subclasses
Convenience
ImageReader.read_band(index)— 2-D single-band read that normalizes(bands, rows, cols)vs(rows, cols, bands)layouts
v0.4.2
New readers
- Sentinel-1 L0 RAW — SAFE product parsing and burst decoding (
2326e53) - EO NITF — full TRE suite (RPC00B, multi-segment RSMPCA, RSMIDA, CSEXRA, USE00A, ICHIPB, BLOCKA, AIMIDB, STDIDC, PIAIMC), parallel IO (
b8f4c66)
SAR readers — multi-pol
- Multi-pol CYX data cube support across SAR readers (
65c6fd8) - Channel-aware metadata propagation through SAR processing pipeline (
9a50d84) StokesVectorandKennaughMatrixpolarimetric matrix products (a044b51)- Readers now return metadata alongside array data (
4f76045) from_reader()convenience constructor (9daeb7b)
Geolocation
- Unified DEM height resolution and NaN fill across all geolocation types (
3c8437c)
Image processing
DataTypeenum for typed workflow edges (5a10a86)
Fixes
- Per-thread dataset handles for parallel band read + chunked parallel read (concurrency bug —
16518e5) - Compression bug (
1361c2f)
Docs / examples
- SICD orthorectification example with slant-range vs. orthorectified PNGs in README (
cbfb14b) - NISAR Pauli decomposition example (
a95392e) - Sentinel-1 H/Alpha decomposition example (
ccb18c4) - Markdown files now shipped in the PyPI sdist (
711f169)
Maintenance
- Author email replaced with GitHub noreply across source headers + PyPI metadata (
be0578a,93e5b0b)
v0.4.1
What's Changed
Security
- Fix zip path traversal in
remote_utils.py— validates member paths before extraction - Fix OData query injection in Sentinel-1/Sentinel-2 catalog modules — input validation on string and bbox parameters
Bug Fixes
- Add sarpy runtime fallback to
SIDDReaderwhen sarkit fails to parse a file - Fix
get_shape()return type annotations in 8 readers to match ABC contract (Tuple[int, ...])
API Improvements
- Export
EONITFMetadata,RPCCoefficients,RSMIdentification,RSMCoefficientsfromgrdl.IO.models - Export all 7 writers (
GeoTIFFWriter,HDF5Writer,NITFWriter,NumpyWriter,PngWriter,SICDWriter,SIDDWriter) fromgrdl.IO - Export
EONITFReaderandSentinel1SLCReaderfromgrdl.IO
New Modules
grdl.discovery— file scanning, metadata catalog, and synthesisgrdl.geolocation._numba_projection— numba-accelerated R/Rdot projectionTiledGeoTIFFDEM— multi-tile GeoTIFF DEM with LRU cacheUTMGrid,WebMercatorGrid— new ortho output gridsChipGeolocation— offset wrapper for chipped images
Documentation
- Updated IO README and ARCHITECTURE for all 7 catalog implementations, SIDD fallback, EONITFReader, SIDDWriter
- Added READMEs for geolocation, interpolation, data_prep, coregistration, transforms, ortho, discovery modules
- Added top-level ARCHITECTURE.md
v0.4.0
What's New
Breaking Changes
- Geolocation API refactored to (N, M) stacked ndarray convention —
image_to_latlonreturns(N, 3),latlon_to_imageaccepts(N, 3)with embedded height and returns(N, 2). Scalar shorthand with tuple unpacking preserved. - Coordinate utilities refactored —
geodetic_to_ecef,ecef_to_geodetic,geodetic_to_enu,enu_to_geodeticall use(N, 3)stacked arrays.
New Features
TiledGeoTIFFDEM— multi-tile DEM support (FABDEM, SRTM, Copernicus) with cross-tile interpolation and LRU cacheUTMGrid— UTM projection output grid for orthorectificationWebMercatorGrid— Web Mercator output grid for orthorectification_handles_dem_internallyflag prevents double DEM iteration in SICD/SIDD R/Rdot_latlon_to_image_with_demwrapper for consistent inverse DEM handling- Per-point DEM iteration replaces old mean-height approach
Documentation
- New geolocation/README.md with full use-case examples for every modality
- New READMEs for data_prep, interpolation, coregistration, transforms modules
- Updated ARCHITECTURE.md, README.md, CLAUDE.md for stacked ndarray convention
v0.3.0
What's New
- OrthoBuilder — renamed from
OrthoPipeline, fluent builder API withOutputGridProtocol,apply_from_reader, tiled processing viasub_grid() - Geolocation ARCHITECTURE.md — full module documentation covering class hierarchy, data flow, backend selection, DEM refinement
- Ortho ARCHITECTURE.md + README.md — ortho subpackage documentation
- SIDD geolocation — R/Rdot refinement, cylindrical/geographic projection fixes
- RSM geolocation — Newton-Raphson iteration improvements
- Plotly examples — all ortho examples migrated from matplotlib to plotly
- New example —
compare_sidd_ortho.pyfor dual-SIDD ortho comparison - Packaging —
.mdfiles (CLAUDE.md, ARCHITECTURE.md, etc.) now included in PyPI distribution
32 files changed, +2,528 / -706
v0.2.1
What's New
- ENU Orthorectification — Local East-North-Up grids in meters via
ENUGridandOrthoPipeline.with_enu_grid() - Accelerated Resampling — Multi-backend dispatch: numba (JIT parallel) > torch GPU > torch CPU > scipy parallel > scipy
- Parallel Coordinate Mapping — ThreadPoolExecutor row-strip chunking for grids >1M pixels
- Geodetic Coordinate Utilities — ECEF, ENU conversions in
geolocation.coordinates - Updated Example Scripts — All ortho examples now use
ChipExtractor, FABDEM auto-discovery, acceleration display, and timing breakdowns - New SIDD & Combined Examples —
ortho_sidd.pyandortho_combined.py(auto-detects SICD vs SIDD)
v0.2.0
What's New
- SIDD Geolocation —
SIDDGeolocationwith polynomial and planar projection support - GDAL Fallback Reader —
GDALFallbackReaderopens any GDAL-supported raster with automatic modality classification (SAR, EO, IR, MSI, HSI) - Invasive Probe Reader —
InvasiveProbeReaderperforms deep non-cooperative file probing (magic bytes, HDF5 tree walking, ENVI headers, NetCDF, FITS, binary structure analysis) - Universal File Opener —
open_any()with 5-phase cascade: specialized readers → base format readers → GDAL fallback → retry → invasive probing - Comprehensive test coverage for all new modules
v0.1.2 GEOINT Rapid Development Library
Updates for compatibility with new GRDK release
v.0.1.1
v0.1.0 release
initial release! Hello World!