Co-registration#
Image co-registration is the misalignment of pixels in an image. This misalignment is exceedingly common in applications utlizing two sensors (e.g., Sentinel-1 and 2) but is even evidenced with images from the same sensor over time. Any displacement has the potential to significantly distort results (Ye 2021) of, for instance, change detection, image fusion, and land cover classification (Scheffler 2017). GeoWombat has integrated AROSICS (described in the following section), which can be used to effectively co-register pixels both between sensor systems and for time series of any given sensor.
AROSICS method#
The AROSICS (An Automated and Robust Open-Source Image Co-Registration Software for Multi-Sensor Satellite Data) co-registration method was developed by Scheffler et al. (2017). The authors conveniently made their algorithm open to the public in a Python package called AROSICS.
In geowombat
, we provide an interface to the AROSICS package. The co-registration method is called geowombat.coregister()
,
and mainly acts as an interface between an xarray.DataArray
and AROSICS.
Install AROSICS#
The AROSICS package can either be installed separately from geowombat
by following the
installation instructions or by installing
with geowombat
. For the latter, simply add the coreg
extra when installing geowombat
by:
pip install arosics --no-deps
pip install "geowombat[coreg]@git+https://github.com/jgrss/geowombat.git"
if installing the latest or if installing a specific geowombat
version (e.g., v2.0.10
) then do:
pip install arosics --no-deps
pip install "geowombat[coreg]@git+https://github.com/jgrss/geowombat.git@2.0.10"
Co-register an image#
To co-register an image using a secondary reference, open both as an xarray.DataArray
and pass them
to the geowombat.coregister()
method. For extra keyword arguments, see the AROSICS CoReg API.
Note
If AROSICS is unable to adjust the target data, either because of insufficient valid data or because
the data are not offset to each other, the returned xarray.DataArray
will match the input target data.
import geowombat as gw
from geowombat.data import l8_224077_20200518_B2
from geowombat.data import l8_224077_20200518_B4
with gw.open(l8_224077_20200518_B2) as target, gw.open(
l8_224077_20200518_B4
) as reference:
target_shifted = gw.coregister(
target=target,
reference=reference,
ws=(256, 256),
r_b4match=1,
s_b4match=1,
max_shift=5,
resamp_alg_deshift='nearest',
resamp_alg_calc='cubic',
out_gsd=[target.gw.celly, reference.gw.celly],
q=True,
nodata=(0, 0),
CPUs=1,
)