使用isce2+mintpy进行哨兵一号时序InSAR的SBAS形变提取全流程。
数据准备:
AUX文件获取:https://sar-mpc.eu/
DEM数据:-a拼接 -b范围 -r运行状态 -s数据类型1或者3 -c将数据从EGM96转到WGS84,注意我们的数据的基准全部都在WGS84下进行
dem.py -a stitch -b 22 23 113 114 -r -s 1 -c
Orbits精轨数据:https://s1qc.asf.alaska.edu/aux_poeorb/
SLC哨兵1号数据:ASF Data Search https://search.asf.alaska.edu/
1.创建如下文件夹

可设置工作路径
export ORBIT_PATH='/YOUR_DATA_DIR/orbits'
export AUX_PATH='/YOUR_DATA_DIR/AUXFILE'
export DEM_PATH='/YOUR_DATA_DIR/DEM'
export SLC_PATH='/YOUR_DATA_DIR/SLC'
export WORK_DIR='/YOUR_DATA_DIR/Stacks'
使用stackSentinel.py获取干涉图序列,没有设置工作路径,下面就可以设置为绝对路径,
--num_proc 指定同时运行的任务数量,可以理解为多线程运行(可选)
stackSentinel.py -s $SLC_PATH -w $WORK_DIR -a $AUX_PATH -d $DEM_PATH/demLat_N22_N23_Lon_E113_E114.dem.wgs84 -o $ORBIT_PATH -n 3 -b '22.28 22.35 113.86 113.97' --useGPU -C geometry -c 3 -z 1 -r 3 -f 0.6 --num_proc 4
上一步生成该文件夹run_file和
config,运行
run_file中的所有文件,才算正式进行干涉图生成,很吃内存也很耗时间
可以一步一步去做,防止中间出错或忽略掉一些提示信息,例如:
cd $WORK_PATH/run_files
bash run_01_unpack_topo_reference
也可写一个代码全流程运行:
#!/bin/bash
cwd=$(pwd)
scripts_dir="$cwd/run_files"
# 检查是否存在17个脚本文件
script_count=$(find "$scripts_dir" -name "run_*" | wc -l)
if [ "$script_count" -ne 17 ]; then
echo "错误:期望找到17个脚本文件,但找到了 $script_count 个"
exit 1
fi
# 按顺序运行脚本
for i in $(seq -f "%02g" 1 16); do
for script in "$scripts_dir"/run_*; do
if [[ "$script" == *"run_${i}"* ]]; then
echo "开始运行 $script"
start_time=$(date +%s)
bash "$script"
end_time=$(date +%s)
duration=$((end_time - start_time))
echo "$script 处理完成! 耗时: ${duration} 秒"
break
fi
done
done
所有的结果都被保存在$WORK_PATH中,可以实时地去查看,运行完所有的run_files后,我们所需的结果都在merged文件夹中,其中geom_reference里的文件记录了雷达坐标系和地心坐标系之间的转换关系,用于后续地理编码的操作,interferograms文件夹里即为各个日期对应的干涉结果:
.unw 解缠相位结果
filt_fine.int 滤波后干涉图
fine.int 原始干涉结果
.cor 相干性结果

注意ISCE生成的所有的
vrt+xml+meta源文件形式的文件,都可以用
mdx.py检查结果,
例如我查看某一日期对的滤波后干涉影像:
cd $WORK_PATH//media/lx/LIXUAN/SBAS/A/merged/interferograms/20250322_20250403
view.py filt_fine.int -c jet --wrap
mdx.py filt_fine.int #这个命令我没找到
在获取了干涉序列后,最后一步就是用MintPy去获得最终的时序InSAR形变产品,首先在
$WORK_PATH中创建一个
mintpy文件夹,作为MintPy的工作文件夹:
mkdir mintpy; cd mintpy
smallbaselineApp.py -g
smallbaselineApp.py是mintpy的核心,这里我们创建了mintpy文件夹,并使用smallbaselineApp.py -g生成了一个cfg参数配置文件,名字叫smallbaselineApp.cfg。(这个配置文件可自动生成,也可自己设置,最后有几个参考)

如果你是按照上述流程配置1进行的stackSentinel生成,那么直接用这个参数是可以获得一个结果的。mintpy系统自带使用pyAPS进行大气校正,需要额外下载ERA5数据,这里比较麻烦就不赘述,后续可以再开一篇博客。
smallbaselineApp.py smallbaselineApp.cfg
运行完成将会自动运行完所有步骤并获取结果

mintpy获取的结果均用hdf5文件(.h5)进行储存,可以看到mintpy文件夹下生成了很多.h5文件,其中比较重要的列举一下:
timeseries.h5:累计形变序列文件
timeseries_demErr.h5:经过地形DEM误差改正后的累计形变序列文件
velocity.h5 :形变速率文件
geo文件夹下储存了所有系统自动进行地理编码后的结果,如geo_timeseries_demErr.h5包含了各个日期对应的累积形变序列,储存于hdf5数据格式中
pic文件夹包括了系统给出的一些可视化结果
首先,对于所有mintpy生成的h5文件,均可使用info.py查看其文件结构以及相关信息。如info.py timeseries_demErr.h5,这一功能类似于GDAL中的gdalinfo。
所有的timeseries文件,均可以用tsview.py进行交互式可视化查看,如
tsview.py timeseries_demErr.h5。
非时间序列的 .h5文件,可以用view.py进行查看,view.py velocity.h5
save_gdal.py从.h5文件中提取栅格文件转为ENVI或Tiff格式
geocode.py对文件进行地理编码处理,可以实现rdr雷达坐标系下的栅格文件和WGS84坐标栅格文件的互相转化
配置1:
# vim: set filetype=cfg:
##------------------------ smallbaselineApp.cfg ------------------------##
########## computing resource configuration
mintpy.compute.maxMemory = 24 #分配的运算内存[float > 0.0], auto for 4, max memory to allocate in GB
mintpy.load.processor = isce #指定你的干涉处理平台[isce, aria, hyp3, gmtsar, snap, gamma, roipac, nisar], auto for isce
mintpy.load.updateMode = no #是否每次都是忽略已有的结果,重新生成结果[yes / no], auto for yes, skip re-loading if HDF5 files are complete
##---------for ISCE only:
mintpy.load.metaFile = ../reference/IW*.xml #指定IW对应的xml数据[path of common metadata file for the stack], i.e.: ./reference/IW1.xml, ./referenceShelve/data.dat
mintpy.load.baselineDir = ../baselines #基线文件夹[path of the baseline dir], i.e.: ./baselines
##---------interferogram stack:
mintpy.load.unwFile = ../merged/interferograms/*/filt_fine.unw #所有的解缠后相位文件unw[path pattern of unwrapped interferogram files]
mintpy.load.corFile = ../merged/interferograms/*/filt_fine.cor #[path pattern of spatial coherence files]
mintpy.load.connCompFile = ../merged/interferograms/*/filt_fine.unw.conncomp #[path pattern of connected components files], optional but recommended
##---------geometry用于地理编码的文件:
mintpy.load.demFile = ../merged/geom_reference/hgt.rdr #[path of DEM file]
mintpy.load.lookupYFile = ../merged/geom_reference/lat.rdr #[path of latitude /row /y coordinate file], not required for geocoded data
mintpy.load.lookupXFile = ../merged/geom_reference/lon.rdr #[path of longitude/column/x coordinate file], not required for geocoded data
mintpy.load.incAngleFile = ../merged/geom_reference/los.rdr #[path of incidence angle file], optional but recommended
mintpy.load.azAngleFile = ../merged/geom_reference/los.rdr #[path of azimuth angle file], optional
mintpy.load.shadowMaskFile = ../merged/geom_reference/shadowMask.rdr #[path of shadow mask file], optional but recommended
########## 4. correct_unwrap_error (optional)
## supported methods:
## a. phase_closure - suitable for highly redundant network
## b. bridging - suitable for regions separated by narrow decorrelated features, e.g. rivers, narrow water bodies
## c. bridging+phase_closure - recommended when there is a small percentage of errors left after bridging
mintpy.unwrapError.method = bridging #选择解缠误差改正方法[bridging / phase_closure / bridging+phase_closure / no], auto for no
mintpy.troposphericDelay.method = no #是否进行大气校正,这里不进行大气校正[pyaps / height_correlation / gacos / no], auto for pyaps
########## 9.2 reference_date
## Reference all time-series to one date in time
## reference: Yunjun et al. (2019, section 4.9)
## no - do not change the default reference date (1st date)
mintpy.reference.date = no #指定参考日期,no为第一个日期[reference_date.txt / 20090214 / no], auto for reference_date.txt
mintpy.plot.maxMemory = 16 #分配给绘图的内存[float], auto for 4, max memory used by one call of view.py for plotting.
配置2:
# vim: set filetype=cfg:
##------------------------------- ISCE/topsStack ----------------------##
##-------------------------------- MintPy -----------------------------##
########## 1. Load Data (--load to exit after this step)
## load_data.py -H to check more details and example inputs.
#mintpy.load.processor = isce
##---------for ISCE only:
mintpy.load.metaFile = ../isceOutEx3/master/IW*.xml
mintpy.load.baselineDir = ../isceOutEx3/baselines
##---------interferogram datasets:
mintpy.load.unwFile = ../isceOutEx3/merged/interferograms/*/filt_*.unw
mintpy.load.corFile = ../isceOutEx3/merged/interferograms/*/filt_*.cor
mintpy.load.connCompFile = ../isceOutEx3/merged/interferograms/*/filt_*.unw.conncomp
##---------geometry datasets:
mintpy.load.demFile = ../isceOutEx3/merged/geom_master/hgt.rdr
mintpy.load.lookupYFile = ../isceOutEx3/merged/geom_master/lat.rdr
mintpy.load.lookupXFile = ../isceOutEx3/merged/geom_master/lon.rdr
mintpy.load.incAngleFile = ../isceOutEx3/merged/geom_master/los.rdr
mintpy.load.azAngleFile = ../isceOutEx3/merged/geom_master/los.rdr
mintpy.load.shadowMaskFile = ../isceOutEx3/merged/geom_master/shadowMask.rdr
##---------multilook (optional):
## multilook while loading data with nearest interpolation, to reduce dataset size
mintpy.load.ystep = auto #[int >= 1], auto for 1 - no multilooking
mintpy.load.xstep = auto #[int >= 1], auto for 1 - no multilooking
##---------subset (optional):
## if both yx and lalo are specified, use lalo option unless a) no lookup file AND b) dataset is in radar coord
mintpy.subset.yx = auto #[y0:y1,x0:x1 / no], auto for no
mintpy.subset.lalo = auto #[S:N,W:E / no], auto for no
########## 2. modify_network
########## 3. reference_point
mintpy.reference.maskFile = no #[filename / no], auto for maskConnComp.h5
mintpy.reference.minCoherence = 0.5 #[0.0-1.0], auto for 0.85, minimum coherence for auto method
########## 4. correct_unwrap_error (optional)
## a. phase_closure - suitable for highly redundant network
## b. bridging - suitable for regions separated by narrow decorrelated features, e.g. rivers, narrow water bodies
## c. bridging+phase_closure - recommended when there is a small percentage of errors left after bridging
mintpy.unwrapError.method = no #[bridging / phase_closure / bridging+phase_closure / no], auto for no
mintpy.unwrapError.waterMaskFile = no #[waterMask.h5 / no], auto for waterMask.h5 or no [if not found]
########## 5. invert_network
mintpy.networkInversion.waterMaskFile = no #[filename / no], auto for waterMask.h5 or no [if not found]
mintpy.networkInversion.maskDataset = no #[coherence / connectComponent / offsetSNR / no], auto for no
## Temporal coherence is calculated and used to generate the mask as the reliability measure
## reference: Pepe & Lanari (2006, IEEE-TGRS)
mintpy.networkInversion.shadowMask = auto #[yes / no], auto for yes [if shadowMask is in geometry file] or no.
########## 6. correct_troposphere (optional but recommended)
mintpy.troposphericDelay.method = height_correlation #[pyaps / height_correlation / gacos / no], auto for pyaps
## Notes for height_correlation:
## Extra multilooking is applied to estimate the empirical phase/elevation ratio ONLY.
## For an dataset with 5 by 15 looks, looks=8 will generate phase with (5*8) by (15*8) looks
## to estimate the empirical parameter; then apply the correction to original phase (with 5 by 15 looks),
## if the phase/elevation correlation is larger than minCorrelation.
mintpy.troposphericDelay.polyOrder = auto #[1 / 2 / 3], auto for 1
mintpy.troposphericDelay.looks = auto #[1-inf], auto for 8, extra multilooking num
mintpy.troposphericDelay.minCorrelation = auto #[0.0-1.0], auto for 0
########## 7. deramp (optional)
########## 8. correct_topography (optional but recommended)
########## 9.1 residual_RMS (root mean squares for noise evaluation)
########## 9.2 reference_date
mintpy.reference.date = 20200807 #[reference_date.txt / 20090214 / no], auto for reference_date.txt
########## 10. velocity
## Estimate linear velocity and its standard deviation from time-series
## and from tropospheric delay file if exists.
## reference: Fattahi and Amelung (2015, JGR)
mintpy.velocity.excludeDate = auto #[exclude_date.txt / 20080520,20090817 / no], auto for exclude_date.txt
mintpy.velocity.startDate = auto #[20070101 / no], auto for no
mintpy.velocity.endDate = auto #[20101230 / no], auto for no
## Bootstrapping
## refernce: Efron and Tibshirani (1986, Stat. Sci.)
mintpy.velocity.bootstrap = auto #[yes / no], auto for no, use bootstrap
mintpy.velocity.bootstrapCount = auto #[int>1], auto for 400, number of iterations for bootstrapping
配置3:正在用
# vim: set filetype=cfg:
##------------------------ smallbaselineApp.cfg ------------------------##
########## computing resource configuration
mintpy.compute.maxMemory = auto #[float > 0.0], auto for 4, max memory to allocate in GB
## parallel processing with dask
## currently apply to steps: invert_network, correct_topography
## cluster = none to turn off the parallel computing
## numWorker = all to use all of locally available cores (for cluster = local only)
## numWorker = 80% to use 80% of locally available cores (for cluster = local only)
## config = none to rollback to the default name (same as the cluster type; for cluster != local)
mintpy.compute.cluster = auto #[local / slurm / pbs / lsf / none], auto for none, cluster type
mintpy.compute.numWorker = auto #[int > 1 / all / num%], auto for 4 (local) or 40 (slurm / pbs / lsf), num of workers
mintpy.compute.config = auto #[none / slurm / pbs / lsf ], auto for none (same as cluster), config name
########## 1. load_data
##---------add attributes manually
## MintPy requires attributes listed at: https://mintpy.readthedocs.io/en/latest/api/attributes/
## Missing attributes can be added below manually (uncomment #), e.g.
# ORBIT_DIRECTION = ascending
# PLATFORM = CSK
# ...
## a. autoPath - automatic path pattern defined in mintpy.defaults.auto_path.AUTO_PATH_*
## b. load_data.py -H to check more details and example inputs.
## c. compression to save disk usage for ifgramStack.h5 file:
## no - save 0% disk usage, fast [default]
## lzf - save ~57% disk usage, relative slow
## gzip - save ~62% disk usage, very slow [not recommend]
mintpy.load.processor = isce #[isce, aria, hyp3, gmtsar, snap, gamma, roipac, nisar], auto for isce
mintpy.load.autoPath = auto #[yes / no], auto for no, use pre-defined auto path
mintpy.load.updateMode = auto #[yes / no], auto for yes, skip re-loading if HDF5 files are complete
mintpy.load.compression = auto #[gzip / lzf / no], auto for no.
##---------for ISCE only:
mintpy.load.metaFile = ../reference/IW*.xml #[path of common metadata file for the stack], i.e.: ./reference/IW1.xml, ./referenceShelve/data.dat
mintpy.load.baselineDir = ../baselines #[path of the baseline dir], i.e.: ./baselines
##---------interferogram stack:
mintpy.load.unwFile = ../merged/interferograms/*/filt_*.unw #[path pattern of unwrapped interferogram files]
mintpy.load.corFile = ../merged/interferograms/*/filt_*.cor #[path pattern of spatial coherence files]
mintpy.load.connCompFile = ../merged/interferograms/*/filt_*.unw.conncomp #[path pattern of connected components files], optional but recommended
mintpy.load.intFile = auto #[path pattern of wrapped interferogram files], optional
mintpy.load.magFile = auto #[path pattern of interferogram magnitude files], optional
##---------ionosphere stack (optional):
mintpy.load.ionUnwFile = auto #[path pattern of unwrapped interferogram files]
mintpy.load.ionCorFile = auto #[path pattern of spatial coherence files]
mintpy.load.ionConnCompFile = auto #[path pattern of connected components files], optional but recommended
##---------offset stack (optional):
mintpy.load.azOffFile = auto #[path pattern of azimuth offset file]
mintpy.load.rgOffFile = auto #[path pattern of range offset file]
mintpy.load.azOffStdFile = auto #[path pattern of azimuth offset variance file], optional but recommended
mintpy.load.rgOffStdFile = auto #[path pattern of range offset variance file], optional but recommended
mintpy.load.offSnrFile = auto #[path pattern of offset signal-to-noise ratio file], optional
##---------geometry:
mintpy.load.demFile = ../merged/geom_reference/hgt.rdr #[path of DEM file]
mintpy.load.lookupYFile = ../merged/geom_reference/lat.rdr #[path of latitude /row /y coordinate file], not required for geocoded data
mintpy.load.lookupXFile = ../merged/geom_reference/lon.rdr #[path of longitude/column/x coordinate file], not required for geocoded data
mintpy.load.incAngleFile = ../merged/geom_reference/los.rdr #[path of incidence angle file], optional but recommended
mintpy.load.azAngleFile = ../merged/geom_reference/los.rdr #[path of azimuth angle file], optional
mintpy.load.shadowMaskFile = ../merged/geom_reference/shadowMask.rdr #[path of shadow mask file], optional but recommended
mintpy.load.waterMaskFile = auto #[path of water mask file], optional but recommended
mintpy.load.bperpFile = auto #[path pattern of 2D perpendicular baseline file], optional
##---------subset (optional):
## if both yx and lalo are specified, use lalo option unless a) no lookup file AND b) dataset is in radar coord
mintpy.subset.yx = auto #[y0:y1,x0:x1 / no], auto for no
mintpy.subset.lalo = auto #[S:N,W:E / no], auto for no
##---------multilook (optional):
## multilook while loading data with the specified method, to reduce dataset size
## method - nearest, mean and median methods are applicable to interferogram/ionosphere/offset stack(s), except for:
## connected components and all geometry datasets, for which nearest is hardwired.
## Use mean / median method with caution! It could smoothen the noise for a better SNR, but it could also smoothen the
## unwrapping errors, breaking the integer 2pi relationship, which is used in the unwrapping error correction.
## If you really want to increase the SNR, consider re-generate your stack of interferograms with more looks instead.
mintpy.multilook.method = auto #[nearest, mean, median], auto for nearest - lines/rows skipping approach
mintpy.multilook.ystep = auto #[int >= 1], auto for 1 - no multilooking
mintpy.multilook.xstep = auto #[int >= 1], auto for 1 - no multilooking
########## 2. modify_network
## 1) Network modification based on temporal/perpendicular baselines, date, num of connections etc.
mintpy.network.tempBaseMax = auto #[1-inf, no], auto for no, max temporal baseline in days
mintpy.network.perpBaseMax = auto #[1-inf, no], auto for no, max perpendicular spatial baseline in meter
mintpy.network.connNumMax = auto #[1-inf, no], auto for no, max number of neighbors for each acquisition
mintpy.network.startDate = auto #[20090101 / no], auto for no
mintpy.network.endDate = auto #[20110101 / no], auto for no
mintpy.network.excludeDate = auto #[20080520,20090817 / no], auto for no
mintpy.network.excludeDate12 = auto #[20080520_20090817 / no], auto for no
mintpy.network.excludeIfgIndex = auto #[1:5,25 / no], auto for no, list of ifg index (start from 0)
mintpy.network.referenceFile = auto #[date12_list.txt / ifgramStack.h5 / no], auto for no
## 2) Data-driven network modification
## a - Coherence-based network modification = (threshold + MST) by default
## reference: Yunjun et al. (2019, section 4.2 and 5.3.1); Chaussard et al. (2015, GRL)
## It calculates a average coherence for each interferogram using spatial coherence based on input mask (with AOI)
## Then it finds a minimum spanning tree (MST) network with inverse of average coherence as weight (keepMinSpanTree)
## Next it excludes interferograms if a) the average coherence < minCoherence AND b) not in the MST network.
mintpy.network.coherenceBased = auto #[yes / no], auto for no, exclude interferograms with coherence < minCoherence
mintpy.network.minCoherence = auto #[0.0-1.0], auto for 0.7
## b - Effective Coherence Ratio network modification = (threshold + MST) by default
## reference: Kang et al. (2021, RSE)
## It calculates the area ratio of each interferogram that is above a spatial coherence threshold.
## This threshold is defined as the spatial coherence of the interferograms within the input mask.
## It then finds a minimum spanning tree (MST) network with inverse of the area ratio as weight (keepMinSpanTree)
## Next it excludes interferograms if a) the area ratio < minAreaRatio AND b) not in the MST network.
mintpy.network.areaRatioBased = auto #[yes / no], auto for no, exclude interferograms with area ratio < minAreaRatio
mintpy.network.minAreaRatio = auto #[0.0-1.0], auto for 0.75
## Additional common parameters for the 2) data-driven network modification
mintpy.network.keepMinSpanTree = auto #[yes / no], auto for yes, keep interferograms in Min Span Tree network
mintpy.network.maskFile = auto #[file name, no], auto for waterMask.h5 or no [if no waterMask.h5 found]
mintpy.network.aoiYX = auto #[y0:y1,x0:x1 / no], auto for no, area of interest for coherence calculation
mintpy.network.aoiLALO = auto #[S:N,W:E / no], auto for no - use the whole area
########## 3. reference_point
## Reference all interferograms to one common point in space
## auto - randomly select a pixel with coherence > minCoherence
## however, manually specify using prior knowledge of the study area is highly recommended
## with the following guideline (section 4.3 in Yunjun et al., 2019):
## 1) located in a coherence area, to minimize the decorrelation effect.
## 2) not affected by strong atmospheric turbulence, i.e. ionospheric streaks
## 3) close to and with similar elevation as the AOI, to minimize the impact of spatially correlated atmospheric delay
mintpy.reference.yx = auto #[257,151 / auto]
mintpy.reference.lalo = auto #[31.8,130.8 / auto]
mintpy.reference.maskFile = auto #[filename / no], auto for maskConnComp.h5
mintpy.reference.coherenceFile = auto #[filename], auto for avgSpatialCoh.h5
mintpy.reference.minCoherence = auto #[0.0-1.0], auto for 0.85, minimum coherence for auto method
########## quick_overview
## A quick assessment of:
## 1) possible groud deformation
## using the velocity from the traditional interferogram stacking
## reference: Zebker et al. (1997, JGR)
## 2) distribution of phase unwrapping error
## from the number of interferogram triplets with non-zero integer ambiguity of closue phase
## reference: T_int in Yunjun et al. (2019, CAGEO). Related to section 3.2, equation (8-9) and Fig. 3d-e.
########## 4. correct_unwrap_error (optional)
## connected components (mintpy.load.connCompFile) are required for this step.
## SNAPHU (Chem & Zebker,2001) is currently the only unwrapper that provides connected components as far as we know.
## reference: Yunjun et al. (2019, section 3)
## supported methods:
## a. phase_closure - suitable for highly redundant network
## b. bridging - suitable for regions separated by narrow decorrelated features, e.g. rivers, narrow water bodies
## c. bridging+phase_closure - recommended when there is a small percentage of errors left after bridging
mintpy.unwrapError.method = bridging #[bridging / phase_closure / bridging+phase_closure / no], auto for no
mintpy.unwrapError.waterMaskFile = auto #[waterMask.h5 / no], auto for waterMask.h5 or no [if not found]
mintpy.unwrapError.connCompMinArea = auto #[1-inf], auto for 2.5e3, discard regions smaller than the min size in pixels
## phase_closure options:
## numSample - a region-based strategy is implemented to speedup L1-norm regularized least squares inversion.
## Instead of inverting every pixel for the integer ambiguity, a common connected component mask is generated,
## for each common conn. comp., numSample pixels are radomly selected for inversion, and the median value of the results
## are used for all pixels within this common conn. comp.
mintpy.unwrapError.numSample = auto #[int>1], auto for 100, number of samples to invert for common conn. comp.
## bridging options:
## ramp - a phase ramp could be estimated based on the largest reliable region, removed from the entire interferogram
## before estimating the phase difference between reliable regions and added back after the correction.
## bridgePtsRadius - half size of the window used to calculate the median value of phase difference
mintpy.unwrapError.ramp = auto #[linear / quadratic], auto for no; recommend linear for L-band data
mintpy.unwrapError.bridgePtsRadius = auto #[1-inf], auto for 50, half size of the window around end points
########## 5. invert_network
## Invert network of interferograms into time-series using weighted least square (WLS) estimator.
## weighting options for least square inversion [fast option available but not best]:
## a. var - use inverse of covariance as weight (Tough et al., 1995; Guarnieri & Tebaldini, 2008) [recommended]
## b. fim - use Fisher Information Matrix as weight (Seymour & Cumming, 1994; Samiei-Esfahany et al., 2016).
## c. coh - use coherence as weight (Perissin & Wang, 2012)
## d. no - uniform weight (Berardino et al., 2002) [fast]
## SBAS (Berardino et al., 2002) = minNormVelocity (yes) + weightFunc (no)
mintpy.networkInversion.weightFunc = no#[var / fim / coh / no], auto for var
mintpy.networkInversion.waterMaskFile = no #[filename / no], auto for waterMask.h5 or no [if not found]
mintpy.networkInversion.minNormVelocity = no #[yes / no], auto for yes, min-norm deformation velocity / phase
## mask options for unwrapPhase of each interferogram before inversion (recommend if weightFunct=no):
## a. coherence - mask out pixels with spatial coherence < maskThreshold
## b. connectComponent - mask out pixels with False/0 value
## c. no - no masking [recommended].
## d. range/azimuthOffsetStd - mask out pixels with offset std. dev. > maskThreshold [for offset]
mintpy.networkInversion.maskDataset = auto #[coherence / connectComponent / rangeOffsetStd / azimuthOffsetStd / no], auto for no
mintpy.networkInversion.maskThreshold = auto #[0-inf], auto for 0.4
mintpy.networkInversion.minRedundancy = auto #[1-inf], auto for 1.0, min num_ifgram for every SAR acquisition
## Temporal coherence is calculated and used to generate the mask as the reliability measure
## reference: Pepe & Lanari (2006, IEEE-TGRS)
mintpy.networkInversion.minTempCoh = auto #[0.0-1.0], auto for 0.7, min temporal coherence for mask
mintpy.networkInversion.minNumPixel = auto #[int > 1], auto for 100, min number of pixels in mask above
mintpy.networkInversion.shadowMask = auto #[yes / no], auto for yes [if shadowMask is in geometry file] or no.
########## correct_LOD
## Local Oscillator Drift (LOD) correction (for Envisat only)
## reference: Marinkovic and Larsen (2013, Proc. LPS)
## automatically applied to Envisat data (identified via PLATFORM attribute)
## and skipped for all the other satellites.
########## 6. correct_SET
## Solid Earth tides (SET) correction [need to install insarlab/PySolid]
## reference: Milbert (2018); Yunjun et al. (2022, IEEE-TGRS)
mintpy.solidEarthTides = auto #[yes / no], auto for no
########## 7. correct_ionosphere (optional but recommended)
## correct ionospheric delay [need split spectrum results from ISCE-2 stack processors]
## reference:
## ISCE-2 topsApp/topsStack: Liang et al. (2019, IEEE-TGRS)
## ISCE-2 stripmapApp/stripmapStack: Fattahi et al. (2017, IEEE-TGRS)
## ISCE-2 alos2App/alosStack: Liang et al. (2018, IEEE-TGRS)
mintpy.ionosphericDelay.method = auto #[split_spectrum / no], auto for no
mintpy.ionosphericDelay.excludeDate = auto #[20080520,20090817 / no], auto for no
mintpy.ionosphericDelay.excludeDate12 = auto #[20080520_20090817 / no], auto for no
########## 8. correct_troposphere (optional but recommended)
## correct tropospheric delay using the following methods:
## a. height_correlation - correct stratified tropospheric delay (Doin et al., 2009, J Applied Geop)
## b. pyaps - use Global Atmospheric Models (GAMs) data (Jolivet et al., 2011; 2014)
## ERA5 - ERA5 from ECMWF [need to install PyAPS from GitHub; recommended and turn ON by default]
## MERRA - MERRA-2 from NASA [need to install PyAPS from Caltech/EarthDef]
## NARR - NARR from NOAA [need to install PyAPS from Caltech/EarthDef; recommended for N America]
## c. gacos - use GACOS with the iterative tropospheric decomposition model (Yu et al., 2018, JGR)
## need to manually download GACOS products at http://www.gacos.net for all acquisitions before running this step
mintpy.troposphericDelay.method = no #[pyaps / height_correlation / gacos / no], auto for pyaps
## Notes for pyaps:
## a. GAM data latency: with the most recent SAR data, there will be GAM data missing, the correction
## will be applied to dates with GAM data available and skipped for the others.
## b. WEATHER_DIR: if you define an environment variable named WEATHER_DIR to contain the path to a
## directory, then MintPy applications will download the GAM files into the indicated directory.
## MintPy application will look for the GAM files in the directory before downloading a new one to
## prevent downloading multiple copies if you work with different dataset that cover the same date/time.
mintpy.troposphericDelay.weatherModel = auto #[ERA5 / MERRA / NARR], auto for ERA5
mintpy.troposphericDelay.weatherDir = auto #[path2directory], auto for WEATHER_DIR or "./"
## Notes for height_correlation:
## Extra multilooking is applied to estimate the empirical phase/elevation ratio ONLY.
## For an dataset with 5 by 15 looks, looks=8 will generate phase with (5*8) by (15*8) looks
## to estimate the empirical parameter; then apply the correction to original phase (with 5 by 15 looks),
## if the phase/elevation correlation is larger than minCorrelation.
mintpy.troposphericDelay.polyOrder = auto #[1 / 2 / 3], auto for 1
mintpy.troposphericDelay.looks = auto #[1-inf], auto for 8, extra multilooking num
mintpy.troposphericDelay.minCorrelation = auto #[0.0-1.0], auto for 0
## Notes for gacos:
## Set the path below to directory that contains the downloaded *.ztd* files
mintpy.troposphericDelay.gacosDir = auto # [path2directory], auto for "./GACOS"
########## 9. deramp (optional)
## Estimate and remove a phase ramp for each acquisition based on the reliable pixels.
## Recommended for localized deformation signals, i.e. volcanic deformation, landslide and land subsidence, etc.
## NOT recommended for long spatial wavelength deformation signals, i.e. co-, post- and inter-seimic deformation.
mintpy.deramp = auto #[no / linear / quadratic], auto for no - no ramp will be removed
mintpy.deramp.maskFile = auto #[filename / no], auto for maskTempCoh.h5, mask file for ramp estimation
########## 10. correct_topography (optional but recommended)
## Topographic residual (DEM error) correction
## reference: Fattahi and Amelung (2013, IEEE-TGRS)
## stepDate - specify stepDate option if you know there are sudden displacement jump in your area,
## e.g. volcanic eruption, or earthquake
## excludeDate - dates excluded for the error estimation
## pixelwiseGeometry - use pixel-wise geometry (incidence angle & slant range distance)
## yes - use pixel-wise geometry if they are available [slow; used by default]
## no - use the mean geometry [fast]
mintpy.topographicResidual = auto #[yes / no], auto for yes
mintpy.topographicResidual.polyOrder = auto #[1-inf], auto for 2, poly order of temporal deformation model
mintpy.topographicResidual.phaseVelocity = auto #[yes / no], auto for no - use phase velocity for minimization
mintpy.topographicResidual.stepDate = auto #[20080529,20190704T1733 / no], auto for no, date of step jump
mintpy.topographicResidual.excludeDate = auto #[20070321 / txtFile / no], auto for exclude_date.txt
mintpy.topographicResidual.pixelwiseGeometry = auto #[yes / no], auto for yes, use pixel-wise geometry info
########## 11.1 residual_RMS (root mean squares for noise evaluation)
## Calculate the Root Mean Square (RMS) of residual phase time-series for each acquisition
## reference: Yunjun et al. (2019, section 4.9 and 5.4)
## To get rid of long spatial wavelength component, a ramp is removed for each acquisition
## Set optimal reference date to date with min RMS
## Set exclude dates (outliers) to dates with RMS > cutoff * median RMS (Median Absolute Deviation)
mintpy.residualRMS.maskFile = auto #[file name / no], auto for maskTempCoh.h5, mask for ramp estimation
mintpy.residualRMS.deramp = auto #[quadratic / linear / no], auto for quadratic
mintpy.residualRMS.cutoff = auto #[0.0-inf], auto for 3
########## 11.2 reference_date
## Reference all time-series to one date in time
## reference: Yunjun et al. (2019, section 4.9)
## no - do not change the default reference date (1st date)
mintpy.reference.date = auto #[reference_date.txt / 20090214 / no], auto for reference_date.txt
########## 12. velocity
## Estimate a suite of time functions [linear velocity by default]
## from final displacement file (and from tropospheric delay file if exists)
mintpy.timeFunc.startDate = auto #[20070101 / no], auto for no
mintpy.timeFunc.endDate = auto #[20101230 / no], auto for no
mintpy.timeFunc.excludeDate = auto #[exclude_date.txt / 20080520,20090817 / no], auto for exclude_date.txt
## Fit a suite of time functions
## reference: Hetland et al. (2012, JGR) equation (2-9)
## polynomial function is defined by its degree in integer. 1 for linear, 2 for quadratic, etc.
## periodic function(s) are defined by a list of periods in decimal years. 1 for annual, 0.5 for semi-annual, etc.
## step function(s) are defined by a list of onset times in str in YYYYMMDD(THHMM) format
## exp & log function(s) are defined by an onset time followed by an charateristic time in integer days.
## Multiple exp and log functions can be overlaied on top of each other, achieved via e.g.:
## 20110311,60,120 - two functions sharing the same onset time OR
## 20110311,60;20170908,120 - separated by ";"
mintpy.timeFunc.polynomial = auto #[int >= 0], auto for 1, degree of the polynomial function
mintpy.timeFunc.periodic = auto #[1,0.5 / list_of_float / no], auto for no, periods in decimal years
mintpy.timeFunc.stepDate = auto #[20110311,20170908 / 20120928T1733 / no], auto for no, step function(s)
mintpy.timeFunc.exp = auto #[20110311,60 / 20110311,60,120 / 20110311,60;20170908,120 / no], auto for no
mintpy.timeFunc.log = auto #[20110311,60 / 20110311,60,120 / 20110311,60;20170908,120 / no], auto for no
## Uncertainty quantification methods:
## a. residue - propagate from fitting residue assuming normal dist. in time (Fattahi & Amelung, 2015, JGR)
## b. covariance - propagate from time series (co)variance matrix
## c. bootstrap - bootstrapping (independently resampling with replacement; Efron & Tibshirani, 1986, Stat. Sci.)
mintpy.timeFunc.uncertaintyQuantification = auto #[residue, covariance, bootstrap], auto for residue
mintpy.timeFunc.timeSeriesCovFile = auto #[filename / no], auto for no, time series covariance file
mintpy.timeFunc.bootstrapCount = auto #[int>1], auto for 400, number of iterations for bootstrapping
########## 13.1 geocode (post-processing)
# for input dataset in radar coordinates only
# commonly used resolution in meters and in degrees (on equator)
# 100, 90, 60, 50, 40, 30, 20, 10
# 0.000925926, 0.000833334, 0.000555556, 0.000462963, 0.000370370, 0.000277778, 0.000185185, 0.000092593
mintpy.geocode = auto #[yes / no], auto for yes
mintpy.geocode.SNWE = auto #[-1.2,0.5,-92,-91 / none ], auto for none, output extent in degree
mintpy.geocode.laloStep = auto #[-0.000555556,0.000555556 / None], auto for None, output resolution in degree
mintpy.geocode.interpMethod = auto #[nearest], auto for nearest, interpolation method
mintpy.geocode.fillValue = auto #[np.nan, 0, ...], auto for np.nan, fill value for outliers.
########## 13.2 google_earth (post-processing)
mintpy.save.kmz = auto #[yes / no], auto for yes, save geocoded velocity to Google Earth KMZ file
########## 13.3 hdfeos5 (post-processing)
mintpy.save.hdfEos5 = auto #[yes / no], auto for no, save time-series to HDF-EOS5 format
mintpy.save.hdfEos5.update = auto #[yes / no], auto for no, put XXXXXXXX as endDate in output filename
mintpy.save.hdfEos5.subset = auto #[yes / no], auto for no, put subset range info in output filename
########## 13.4 plot
# for high-resolution plotting, increase mintpy.plot.maxMemory
# for fast plotting with more parallelization, decrease mintpy.plot.maxMemory
mintpy.plot = auto #[yes / no], auto for yes, plot files generated by default processing to pic folder
mintpy.plot.dpi = auto #[int], auto for 150, number of dots per inch (DPI)
mintpy.plot.maxMemory = auto #[float], auto for 4, max memory used by one call of view.py for plotting.