Skip to main content

Pairwise raster coregistration for geospatial imagery

Project description

Coregix

PyPI PyPI Downloads Docker Pulls Tests Docs Contributors License

Coregix provides pairwise raster coregistration for geospatial imagery.

Coregix coregisters a source raster to a reference raster while preserving geospatial metadata and multi-band outputs. By default, it estimates a translation followed by a rigid transform using mutual-information optimization, then applies the resulting transform to produce a coregistered GeoTIFF.

Current scope:

  • pairwise GeoTIFF coregistration CLI and Python API
  • edge-proxy registration for cross-sensor structural alignment
  • chunked transform application for large source rasters
  • optional postprocess trimming of invalid edge artifacts

Install

Conda environment

conda env create -f environment.yml
conda activate coregix

This installs the runtime stack and the package in editable mode.

Editable install into an existing environment

pip install -e .

The installed CLI entrypoint is:

align-image-pair --help

You can also run the module directly:

python -m coregix.cli.align_image_pair --help

Docker

Build the image from the repository root:

docker build -t coregix .

Release images are published to Docker Hub as iosefa/coregix.

Run the CLI with a mounted data directory:

docker run --rm \
  -v "$PWD:/data" \
  iosefa/coregix:latest \
  --moving-image /data/source.tif \
  --fixed-image /data/reference.tif \
  --output-image /data/aligned.tif

If you built the image locally, use coregix instead of iosefa/coregix:latest.

CLI usage

Coregister a source image to a reference image

align-image-pair \
  --moving-image /path/to/source.tif \
  --fixed-image /path/to/reference.tif \
  --output-image /path/to/aligned.tif

By default this:

  • registers on edge-proxy images
  • writes the result on the source-raster grid
  • uses no chunking (--split-factor 0)

Use chunking for large source rasters

--split-factor controls chunked transform application as 2^k total chunks:

  • 0: no split
  • 1: halves
  • 2: quadrants
  • 3: octants

Example with quadrants:

align-image-pair \
  --moving-image /path/to/source_large.tif \
  --fixed-image /path/to/reference.tif \
  --output-image /path/to/aligned_large.tif \
  --split-factor 2

Remove invalid edge artifacts after alignment

--trim-edge-invalid runs a raster-space cleanup pass after alignment and sets edge artifacts to nodata.

Example:

align-image-pair \
  --moving-image /path/to/source_large.tif \
  --fixed-image /path/to/reference.tif \
  --output-image /path/to/aligned_large_edgefixed.tif \
  --split-factor 2 \
  --trim-edge-invalid \
  --edge-trim-depth 8 \
  --edge-trim-invalid-below -3000

The edge-trim thresholds are dataset-specific. --edge-trim-invalid-below is useful when interpolation artifacts are not equal to the dataset nodata value.

Python usage

Basic alignment

from coregix import align_image_pair

result = align_image_pair(
    moving_image_path="/path/to/source.tif",
    fixed_image_path="/path/to/reference.tif",
    output_image_path="/path/to/aligned.tif",
)

print(result.output_image_path)

Large raster with chunking and edge cleanup

from coregix import align_image_pair

result = align_image_pair(
    moving_image_path="/path/to/source_large.tif",
    fixed_image_path="/path/to/reference.tif",
    output_image_path="/path/to/aligned_large_edgefixed.tif",
    split_factor=2,
    trim_edge_invalid=True,
    edge_trim_depth=8,
    edge_trim_invalid_below=-3000,
)

print(result.output_image_path)

Notes

  • split_factor changes only transform application, not the registration model.
  • split_factor=2 is the direct replacement for the previous quadrant-based large-raster path.
  • If needed, you can select separate registration bands with moving_band_index and fixed_band_index in Python or --moving-band-index and --fixed-band-index in the CLI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

coregix-0.2.0.tar.gz (30.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

coregix-0.2.0-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

Details for the file coregix-0.2.0.tar.gz.

File metadata

  • Download URL: coregix-0.2.0.tar.gz
  • Upload date:
  • Size: 30.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for coregix-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d1b9b80ccfa19531bc5a80ccfbc75e70db0336ea2165d1439d89e2e27de6fc37
MD5 a15af3254a206fdaa7bdfcd4d4ee9ba3
BLAKE2b-256 4722237c9f60cff9f45c223a6b53ccb1fea31aee14ebf357aaad10867f55c5e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for coregix-0.2.0.tar.gz:

Publisher: publish-pypi.yml on iosefa/coregix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file coregix-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: coregix-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 29.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for coregix-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1c0f5a825f4a4d6ff780d533cfa9a8422b8bed4a19335521890ca1ce7266b6d
MD5 f4e531810b5a3542490a4b3abdf48c39
BLAKE2b-256 0be4c7bd85d9187ca3ce3065c43c6d60635afe9d77e33506ef467e11a7e5314d

See more details on using hashes here.

Provenance

The following attestation bundles were made for coregix-0.2.0-py3-none-any.whl:

Publisher: publish-pypi.yml on iosefa/coregix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page