Home

Awesome

Kalman Filter for time series analysis of InSAR data

Language License: GPL v3 Citation

A library to iterativelly recover the phase evolution over time from interferograms with uncertainties (stored in HDF5 file)

Documentation

https://manondls.github.io/KFTS-InSAR/

Dalaison & Jolivet (2020)

Assumptions

Install kf on your system using (optional if KFTS-InSAR in PYTHONPATH):

python -m pip install dist/KFTS_InSAR-0.1-py3-none-any.whl

Easy test

A sample dataset (set of unwrapped interferograms) is provided in testdata/ To run KFTS on this dataset :

python kfts.py -c configs/config_Etna.ini 

To quickly visualize outputs and plot metrics :

python kf2rms.py -c configs/config_Etna.ini 
python checkinnov.py -c configs/config_Etna.ini 
python plotoutput.py -c configs/config_Etna.ini  -geom ./ -rmsTh 2 -ampshift True

Synthetics

To reproduce the synthetic data set in Dalaison & Jolivet (2020)

python synthetic_data.py

Prepare input H5file

Directly from ISCE files

KFTS can be selfsuficient with a working routine starting directly from ISCE outputs (.unw, .unw.vrt, .unw.xml...). If other software are used, adjustment of formats and file structure probably has to be done. Parameters in config file must be adjusted to your setting.

python prepare_input.py -c configs/config_prepareinput.ini 

Many options are not required by KFTS but help clean the interferogram stack. Examples include deramping, filtering out low coherence region, producing longitude and latitude files with the same geometry as interferograms, cutting interferogram edges. Referencing to a common region defined in all interferograms (not NaN) is compulsory. Zeros in interferograms are assumed to be NaNs.

Using MintPy functionalities

If you want, KFTS is compatible with MintPy functionalities. KFTS provides an independant way to estimate time series from unwrapped interferograms in an iterative way with associated uncertainty propagation. The iterative nature of KFTS allows for a flexible model description of deformation adapting over time to new data acquisition and transiant event occurences (e.g. earthquakes). Therefore, it offers a potential towards long-duration (several years) and continuous monitoring. You can prepare your interferogram stack with MintPy runing the first steps in smallbaselineApp.py routine (e.g. 'load_data', 'modify_network', 'reference_point', 'quick_overview', 'correct_unwrap_error'). For instance, you can use :

python src/mintpy/__main__.py smallbaselineApp smallbaselineApp.cfg --end correct_unwrap_error

Please refer to MintPy documentations for details about this command. Then KFTS substitutes to the 'invert_network' step of MintPy. It will run as usual specifying infile = inputs/ifgramStack.h5 and fmtfile = MintPy in KFTS config file. Additionaly, quality selection of pixels by KFTS can be improved setting maskfile = maskConnComp.h5 and cohTh = 0.4.

By essence, KFTS assumes interferograms are already cleaned from most known sources of error (stratified atmosphere, topography, tides...) so that the output is directly interpretable with its uncertainty. It is also best to exclude (set to NaN) pixel-wise bad interferograms before runing KFTS. Additional reworking of the time series output requires additional work on uncertainty propagation.