114 lines
4.5 KiB
Python
114 lines
4.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
#
|
|
# Author: Cunren Liang
|
|
# Copyright 2015-present, NASA-JPL/Caltech
|
|
#
|
|
|
|
import os
|
|
import glob
|
|
import shutil
|
|
import datetime
|
|
import numpy as np
|
|
import xml.etree.ElementTree as ET
|
|
|
|
import isce, isceobj
|
|
from isceobj.Alos2Proc.runIonUwrap import ionUwrap
|
|
|
|
from StackPulic import loadTrack
|
|
from StackPulic import createObject
|
|
from StackPulic import stackDateStatistics
|
|
|
|
def cmdLineParse():
|
|
'''
|
|
command line parser.
|
|
'''
|
|
import sys
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='unwrap subband interferograms for ionospheric correction')
|
|
parser.add_argument('-idir', dest='idir', type=str, required=True,
|
|
help = 'input directory where resampled data of each date (YYMMDD) is located. only folders are recognized')
|
|
parser.add_argument('-ref_date_stack', dest='ref_date_stack', type=str, required=True,
|
|
help = 'reference date of stack. format: YYMMDD')
|
|
parser.add_argument('-ref_date', dest='ref_date', type=str, required=True,
|
|
help = 'reference date of this pair. format: YYMMDD')
|
|
parser.add_argument('-sec_date', dest='sec_date', type=str, required=True,
|
|
help = 'reference date of this pair. format: YYMMDD')
|
|
parser.add_argument('-wbd', dest='wbd', type=str, required=True,
|
|
help = 'water body file')
|
|
parser.add_argument('-nrlks1', dest='nrlks1', type=int, default=1,
|
|
help = 'number of range looks 1. default: 1')
|
|
parser.add_argument('-nalks1', dest='nalks1', type=int, default=1,
|
|
help = 'number of azimuth looks 1. default: 1')
|
|
parser.add_argument('-nrlks_ion', dest='nrlks_ion', type=int, default=1,
|
|
help = 'number of range looks ion. default: 1')
|
|
parser.add_argument('-nalks_ion', dest='nalks_ion', type=int, default=1,
|
|
help = 'number of azimuth looks ion. default: 1')
|
|
parser.add_argument('-filt', dest='filt', action='store_true', default=False,
|
|
help='filter subband interferograms')
|
|
parser.add_argument('-alpha', dest='alpha', type=float, default=0.3,
|
|
help='filtering strength. default: 0.3')
|
|
parser.add_argument('-win', dest='win', type=int, default=32,
|
|
help = 'filter window size. default: 32')
|
|
parser.add_argument('-step', dest='step', type=int, default=4,
|
|
help = 'filter step size. default: 4')
|
|
parser.add_argument('-keep_mag', dest='keep_mag', action='store_true', default=False,
|
|
help='keep magnitude before filtering subband interferogram')
|
|
|
|
if len(sys.argv) <= 1:
|
|
print('')
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
else:
|
|
return parser.parse_args()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
inps = cmdLineParse()
|
|
|
|
|
|
#get user parameters from input
|
|
idir = inps.idir
|
|
dateReferenceStack = inps.ref_date_stack
|
|
dateReference = inps.ref_date
|
|
dateSecondary = inps.sec_date
|
|
wbd = inps.wbd
|
|
numberRangeLooks1 = inps.nrlks1
|
|
numberAzimuthLooks1 = inps.nalks1
|
|
numberRangeLooksIon = inps.nrlks_ion
|
|
numberAzimuthLooksIon = inps.nalks_ion
|
|
filterSubbandInt = inps.filt
|
|
filterStrengthSubbandInt = inps.alpha
|
|
filterWinsizeSubbandInt = inps.win
|
|
filterStepsizeSubbandInt = inps.step
|
|
removeMagnitudeBeforeFilteringSubbandInt = not inps.keep_mag
|
|
#######################################################
|
|
|
|
pair = '{}-{}'.format(dateReference, dateSecondary)
|
|
ms = pair
|
|
ml1 = '_{}rlks_{}alks'.format(numberRangeLooks1, numberAzimuthLooks1)
|
|
dateDirs, dates, frames, swaths, dateIndexReference = stackDateStatistics(idir, dateReferenceStack)
|
|
trackReference = loadTrack('./', dateReference)
|
|
|
|
self = createObject()
|
|
self._insar = createObject()
|
|
self._insar.wbd = wbd
|
|
self._insar.numberRangeLooks1 = numberRangeLooks1
|
|
self._insar.numberAzimuthLooks1 = numberAzimuthLooks1
|
|
self._insar.numberRangeLooksIon = numberRangeLooksIon
|
|
self._insar.numberAzimuthLooksIon = numberAzimuthLooksIon
|
|
|
|
self._insar.amplitude = ms + ml1 + '.amp'
|
|
self._insar.differentialInterferogram = 'diff_' + ms + ml1 + '.int'
|
|
self._insar.latitude = dateReferenceStack + ml1 + '.lat'
|
|
self._insar.longitude = dateReferenceStack + ml1 + '.lon'
|
|
self.filterSubbandInt = filterSubbandInt
|
|
self.filterStrengthSubbandInt = filterStrengthSubbandInt
|
|
self.filterWinsizeSubbandInt = filterWinsizeSubbandInt
|
|
self.filterStepsizeSubbandInt = filterStepsizeSubbandInt
|
|
self.removeMagnitudeBeforeFilteringSubbandInt = removeMagnitudeBeforeFilteringSubbandInt
|
|
|
|
ionUwrap(self, trackReference, latLonDir=os.path.join(idir, dates[dateIndexReference], 'insar'))
|