commit
9e7e090548
|
@ -223,6 +223,7 @@ class config(object):
|
||||||
self.f.write('defomax : ' + self.defoMax + '\n')
|
self.f.write('defomax : ' + self.defoMax + '\n')
|
||||||
self.f.write('rlks : ' + self.rangeLooks + '\n')
|
self.f.write('rlks : ' + self.rangeLooks + '\n')
|
||||||
self.f.write('alks : ' + self.azimuthLooks + '\n')
|
self.f.write('alks : ' + self.azimuthLooks + '\n')
|
||||||
|
self.f.write('rmfilter : ' + self.rmFilter + '\n')
|
||||||
self.f.write('method : ' + self.unwMethod + '\n')
|
self.f.write('method : ' + self.unwMethod + '\n')
|
||||||
|
|
||||||
def unwrapSnaphu(self, function):
|
def unwrapSnaphu(self, function):
|
||||||
|
@ -282,7 +283,7 @@ class run(object):
|
||||||
os.makedirs(self.config_path, exist_ok=True)
|
os.makedirs(self.config_path, exist_ok=True)
|
||||||
|
|
||||||
for slcdate in acquisitionDates:
|
for slcdate in acquisitionDates:
|
||||||
configName = os.path.join(self.config_path,'config_'+slcdate)
|
configName = os.path.join(self.config_path,'config_unpack_'+slcdate)
|
||||||
configObj = config(configName)
|
configObj = config(configName)
|
||||||
configObj.configure(self)
|
configObj.configure(self)
|
||||||
configObj.dirName = safe_dict[slcdate].safe_file
|
configObj.dirName = safe_dict[slcdate].safe_file
|
||||||
|
@ -377,11 +378,15 @@ class run(object):
|
||||||
|
|
||||||
self.runf.write(self.text_cmd + 'subsetMaster.py -m ' + os.path.join(self.work_dir, 'master') + ' -g ' + os.path.join(self.work_dir, 'geom_master') + '\n')
|
self.runf.write(self.text_cmd + 'subsetMaster.py -m ' + os.path.join(self.work_dir, 'master') + ' -g ' + os.path.join(self.work_dir, 'geom_master') + '\n')
|
||||||
|
|
||||||
def overlap_geo2rdr_resample(self, slaveList):
|
|
||||||
|
def geo2rdr_offset(self, slaveList, fullBurst='False'):
|
||||||
|
|
||||||
for slave in slaveList:
|
for slave in slaveList:
|
||||||
master = self.master_date
|
master = self.master_date
|
||||||
configName = os.path.join(self.config_path ,'config_resamp_overlap_'+slave)
|
if fullBurst == 'True':
|
||||||
|
configName = os.path.join(self.config_path, 'config_fullBurst_geo2rdr_' + slave)
|
||||||
|
else:
|
||||||
|
configName = os.path.join(self.config_path, 'config_overlap_geo2rdr_'+slave)
|
||||||
###########
|
###########
|
||||||
configObj = config(configName)
|
configObj = config(configName)
|
||||||
configObj.configure(self)
|
configObj.configure(self)
|
||||||
|
@ -389,13 +394,39 @@ class run(object):
|
||||||
configObj.masterDir = os.path.join(self.work_dir, 'master')
|
configObj.masterDir = os.path.join(self.work_dir, 'master')
|
||||||
configObj.geom_master = os.path.join(self.work_dir, 'geom_master')
|
configObj.geom_master = os.path.join(self.work_dir, 'geom_master')
|
||||||
configObj.coregSlaveDir = os.path.join(self.work_dir, 'coreg_slaves/'+slave)
|
configObj.coregSlaveDir = os.path.join(self.work_dir, 'coreg_slaves/'+slave)
|
||||||
|
if fullBurst == 'True':
|
||||||
|
configObj.misreg_az = os.path.join(self.work_dir, 'misreg/azimuth/dates/' + slave + '.txt')
|
||||||
|
configObj.misreg_rng = os.path.join(self.work_dir, 'misreg/range/dates/' + slave + '.txt')
|
||||||
|
configObj.overlapTrueOrFalse = 'False'
|
||||||
|
else:
|
||||||
configObj.overlapTrueOrFalse = 'True'
|
configObj.overlapTrueOrFalse = 'True'
|
||||||
configObj.geo2rdr('[Function-1]')
|
configObj.geo2rdr('[Function-1]')
|
||||||
|
configObj.finalize()
|
||||||
|
del configObj
|
||||||
|
self.runf.write(self.text_cmd + 'SentinelWrapper.py -c ' + configName + '\n')
|
||||||
|
|
||||||
|
def resample_with_carrier(self, slaveList, fullBurst='False'):
|
||||||
|
for slave in slaveList:
|
||||||
|
master = self.master_date
|
||||||
|
if fullBurst == 'True':
|
||||||
|
configName = os.path.join(self.config_path, 'config_fullBurst_resample_' + slave)
|
||||||
|
else:
|
||||||
|
configName = os.path.join(self.config_path, 'config_overlap_resample_' + slave)
|
||||||
###########
|
###########
|
||||||
|
configObj = config(configName)
|
||||||
|
configObj.configure(self)
|
||||||
|
configObj.slaveDir = os.path.join(self.work_dir, 'slaves/' + slave)
|
||||||
|
configObj.masterDir = os.path.join(self.work_dir, 'master')
|
||||||
|
configObj.coregSlaveDir = os.path.join(self.work_dir, 'coreg_slaves/' + slave)
|
||||||
configObj.interferogram_prefix = 'coarse'
|
configObj.interferogram_prefix = 'coarse'
|
||||||
configObj.masterDir = os.path.join(self.work_dir,'master')
|
configObj.masterDir = os.path.join(self.work_dir, 'master')
|
||||||
configObj.resamp_withCarrier('[Function-2]')
|
if fullBurst == 'True':
|
||||||
###########
|
configObj.misreg_az = os.path.join(self.work_dir, 'misreg/azimuth/dates/' + slave + '.txt')
|
||||||
|
configObj.misreg_rng = os.path.join(self.work_dir, 'misreg/range/dates/' + slave + '.txt')
|
||||||
|
configObj.overlapTrueOrFalse = 'False'
|
||||||
|
else:
|
||||||
|
configObj.overlapTrueOrFalse = 'True'
|
||||||
|
configObj.resamp_withCarrier('[Function-1]')
|
||||||
configObj.finalize()
|
configObj.finalize()
|
||||||
del configObj
|
del configObj
|
||||||
self.runf.write(self.text_cmd + 'SentinelWrapper.py -c ' + configName + '\n')
|
self.runf.write(self.text_cmd + 'SentinelWrapper.py -c ' + configName + '\n')
|
||||||
|
@ -453,37 +484,13 @@ class run(object):
|
||||||
self.runf.write(self.text_cmd + 'invertMisreg.py -i ' + os.path.join(self.work_dir,'misreg/azimuth/pairs/') + ' -o ' + os.path.join(self.work_dir,'misreg/azimuth/dates/') + '\n')
|
self.runf.write(self.text_cmd + 'invertMisreg.py -i ' + os.path.join(self.work_dir,'misreg/azimuth/pairs/') + ' -o ' + os.path.join(self.work_dir,'misreg/azimuth/dates/') + '\n')
|
||||||
self.runf.write(self.text_cmd + 'invertMisreg.py -i ' + os.path.join(self.work_dir,'misreg/range/pairs/') + ' -o ' + os.path.join(self.work_dir,'misreg/range/dates/') + '\n')
|
self.runf.write(self.text_cmd + 'invertMisreg.py -i ' + os.path.join(self.work_dir,'misreg/range/pairs/') + ' -o ' + os.path.join(self.work_dir,'misreg/range/dates/') + '\n')
|
||||||
|
|
||||||
def geo2rdr_resample(self, slaveList):
|
|
||||||
# geometry offsets and resampling each full burst slave SLC
|
|
||||||
for slave in slaveList:
|
|
||||||
master = self.master_date
|
|
||||||
configName = os.path.join(self.config_path , 'config_resamp_' + slave)
|
|
||||||
###########
|
|
||||||
configObj = config(configName)
|
|
||||||
configObj.configure(self)
|
|
||||||
configObj.slaveDir = os.path.join(self.work_dir, 'slaves/' + slave)
|
|
||||||
configObj.masterDir = os.path.join(self.work_dir, 'master')
|
|
||||||
configObj.geom_master = os.path.join(self.work_dir, 'geom_master')
|
|
||||||
configObj.coregSlaveDir = os.path.join(self.work_dir, 'coreg_slaves/' + slave)
|
|
||||||
configObj.misreg_az = os.path.join(self.work_dir, 'misreg/azimuth/dates/' + slave + '.txt')
|
|
||||||
configObj.misreg_rng = os.path.join(self.work_dir, 'misreg/range/dates/' + slave + '.txt')
|
|
||||||
configObj.overlapTrueOrFalse = 'False'
|
|
||||||
configObj.geo2rdr('[Function-1]')
|
|
||||||
###########
|
|
||||||
configObj.interferogram_prefix = 'coarse'
|
|
||||||
configObj.masterDir = os.path.join(self.work_dir, 'master')
|
|
||||||
configObj.resamp_withCarrier('[Function-2]')
|
|
||||||
###########
|
|
||||||
configObj.finalize()
|
|
||||||
del configObj
|
|
||||||
self.runf.write(self.text_cmd + 'SentinelWrapper.py -c ' + configName + '\n')
|
|
||||||
|
|
||||||
def extractStackValidRegion(self):
|
def extractStackValidRegion(self):
|
||||||
masterDir = os.path.join(self.work_dir, 'master')
|
masterDir = os.path.join(self.work_dir, 'master')
|
||||||
coregSlaveDir = os.path.join(self.work_dir, 'coreg_slaves')
|
coregSlaveDir = os.path.join(self.work_dir, 'coreg_slaves')
|
||||||
self.runf.write(self.text_cmd + 'extractCommonValidRegion.py -m ' + masterDir + ' -s ' + coregSlaveDir + '\n')
|
self.runf.write(self.text_cmd + 'extractCommonValidRegion.py -m ' + masterDir + ' -s ' + coregSlaveDir + '\n')
|
||||||
|
|
||||||
def burstIgram_mergeBurst(self, dateList, safe_dict, pairs):
|
def generate_burstIgram(self, dateList, safe_dict, pairs):
|
||||||
|
|
||||||
for date in dateList:
|
for date in dateList:
|
||||||
safe_dict[date].slc = os.path.join(self.work_dir, 'coreg_slaves/'+date)
|
safe_dict[date].slc = os.path.join(self.work_dir, 'coreg_slaves/'+date)
|
||||||
safe_dict[self.master_date].slc = os.path.join(self.work_dir , 'master')
|
safe_dict[self.master_date].slc = os.path.join(self.work_dir , 'master')
|
||||||
|
@ -491,8 +498,7 @@ class run(object):
|
||||||
master = pair[0]
|
master = pair[0]
|
||||||
slave = pair[1]
|
slave = pair[1]
|
||||||
interferogramDir = os.path.join(self.work_dir, 'interferograms/' + master + '_' + slave)
|
interferogramDir = os.path.join(self.work_dir, 'interferograms/' + master + '_' + slave)
|
||||||
mergedDir = os.path.join(self.work_dir, 'merged/interferograms/' + master + '_' + slave)
|
configName = os.path.join(self.config_path ,'config_generate_igram_' + master + '_' + slave)
|
||||||
configName = os.path.join(self.config_path ,'config_igram_' + master + '_' + slave)
|
|
||||||
configObj = config(configName)
|
configObj = config(configName)
|
||||||
configObj.configure(self)
|
configObj.configure(self)
|
||||||
configObj.masterDir = safe_dict[master].slc
|
configObj.masterDir = safe_dict[master].slc
|
||||||
|
@ -502,9 +508,26 @@ class run(object):
|
||||||
configObj.flatten = 'False'
|
configObj.flatten = 'False'
|
||||||
configObj.overlapTrueOrFalse = 'False'
|
configObj.overlapTrueOrFalse = 'False'
|
||||||
configObj.generateIgram('[Function-1]')
|
configObj.generateIgram('[Function-1]')
|
||||||
|
configObj.finalize()
|
||||||
|
del configObj
|
||||||
|
|
||||||
configObj.master = configObj.interferogramDir
|
self.runf.write(self.text_cmd + 'SentinelWrapper.py -c ' + configName + '\n')
|
||||||
configObj.dirName = configObj.master
|
|
||||||
|
def igram_mergeBurst(self, dateList, safe_dict, pairs):
|
||||||
|
for date in dateList:
|
||||||
|
safe_dict[date].slc = os.path.join(self.work_dir, 'coreg_slaves/'+date)
|
||||||
|
safe_dict[self.master_date].slc = os.path.join(self.work_dir , 'master')
|
||||||
|
for pair in pairs:
|
||||||
|
master = pair[0]
|
||||||
|
slave = pair[1]
|
||||||
|
interferogramDir = os.path.join(self.work_dir, 'interferograms/' + master + '_' + slave)
|
||||||
|
mergedDir = os.path.join(self.work_dir, 'merged/interferograms/' + master + '_' + slave)
|
||||||
|
configName = os.path.join(self.config_path ,'config_merge_igram_' + master + '_' + slave)
|
||||||
|
configObj = config(configName)
|
||||||
|
configObj.configure(self)
|
||||||
|
configObj.interferogram_prefix = 'fine'
|
||||||
|
configObj.master = interferogramDir
|
||||||
|
configObj.dirName = interferogramDir
|
||||||
configObj.namePattern = 'fine*int'
|
configObj.namePattern = 'fine*int'
|
||||||
configObj.mergedFile = mergedDir + '/' + configObj.interferogram_prefix + '.int'
|
configObj.mergedFile = mergedDir + '/' + configObj.interferogram_prefix + '.int'
|
||||||
configObj.mergeBurstsMethod = 'top'
|
configObj.mergeBurstsMethod = 'top'
|
||||||
|
@ -513,7 +536,7 @@ class run(object):
|
||||||
configObj.useVirtualFiles = 'True'
|
configObj.useVirtualFiles = 'True'
|
||||||
configObj.multiLook = 'True'
|
configObj.multiLook = 'True'
|
||||||
configObj.stack = os.path.join(self.work_dir, 'stack')
|
configObj.stack = os.path.join(self.work_dir, 'stack')
|
||||||
configObj.mergeBurst('[Function-2]')
|
configObj.mergeBurst('[Function-1]')
|
||||||
configObj.finalize()
|
configObj.finalize()
|
||||||
del configObj
|
del configObj
|
||||||
|
|
||||||
|
@ -657,6 +680,7 @@ class run(object):
|
||||||
configObj.cohName = os.path.join(mergedDir,'filt_fine.cor')
|
configObj.cohName = os.path.join(mergedDir,'filt_fine.cor')
|
||||||
configObj.unwName = os.path.join(mergedDir,'filt_fine.unw')
|
configObj.unwName = os.path.join(mergedDir,'filt_fine.unw')
|
||||||
configObj.noMCF = noMCF
|
configObj.noMCF = noMCF
|
||||||
|
configObj.rmFilter = self.rmFilter
|
||||||
configObj.master = os.path.join(self.work_dir,'master')
|
configObj.master = os.path.join(self.work_dir,'master')
|
||||||
configObj.defoMax = defoMax
|
configObj.defoMax = defoMax
|
||||||
configObj.unwMethod = self.unwMethod
|
configObj.unwMethod = self.unwMethod
|
||||||
|
|
|
@ -162,6 +162,9 @@ def createParser():
|
||||||
parser.add_argument('-useGPU', '--useGPU', dest='useGPU',action='store_true', default=False,
|
parser.add_argument('-useGPU', '--useGPU', dest='useGPU',action='store_true', default=False,
|
||||||
help='Allow App to use GPU when available')
|
help='Allow App to use GPU when available')
|
||||||
|
|
||||||
|
parser.add_argument('-rmFilter', '--rmFilter', dest='rmFilter', action='store_true', default=False,
|
||||||
|
help='Make an extra unwrap file in which filtering effect is removed')
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def cmdLineParse(iargs = None):
|
def cmdLineParse(iargs = None):
|
||||||
|
@ -457,10 +460,16 @@ def slcStack(inps, acquisitionDates, stackMasterDate, slaveDates, safe_dict, upd
|
||||||
runObj.extractOverlaps()
|
runObj.extractOverlaps()
|
||||||
runObj.finalize()
|
runObj.finalize()
|
||||||
|
|
||||||
i+=1
|
i += 1
|
||||||
runObj = run()
|
runObj = run()
|
||||||
runObj.configure(inps, 'run_' + str(i) + "_overlap_geo2rdr_resample")
|
runObj.configure(inps, 'run_' + str(i) + "_overlap_geo2rdr")
|
||||||
runObj.overlap_geo2rdr_resample(slaveDates)
|
runObj.geo2rdr_offset(slaveDates)
|
||||||
|
runObj.finalize()
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
runObj = run()
|
||||||
|
runObj.configure(inps, 'run_' + str(i) + "_overlap_resample")
|
||||||
|
runObj.resample_with_carrier(slaveDates)
|
||||||
runObj.finalize()
|
runObj.finalize()
|
||||||
|
|
||||||
i+=1
|
i+=1
|
||||||
|
@ -478,10 +487,16 @@ def slcStack(inps, acquisitionDates, stackMasterDate, slaveDates, safe_dict, upd
|
||||||
runObj.timeseries_misregistration()
|
runObj.timeseries_misregistration()
|
||||||
runObj.finalize()
|
runObj.finalize()
|
||||||
|
|
||||||
i+=1
|
i += 1
|
||||||
runObj = run()
|
runObj = run()
|
||||||
runObj.configure(inps, 'run_' + str(i) + "_geo2rdr_resample")
|
runObj.configure(inps, 'run_' + str(i) + "_fullBurst_geo2rdr")
|
||||||
runObj.geo2rdr_resample(slaveDates)
|
runObj.geo2rdr_offset(slaveDates, fullBurst='True')
|
||||||
|
runObj.finalize()
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
runObj = run()
|
||||||
|
runObj.configure(inps, 'run_' + str(i) + "_fullBurst_resample")
|
||||||
|
runObj.resample_with_carrier(slaveDates, fullBurst='True')
|
||||||
runObj.finalize()
|
runObj.finalize()
|
||||||
|
|
||||||
i+=1
|
i+=1
|
||||||
|
@ -546,8 +561,14 @@ def interferogramStack(inps, acquisitionDates, stackMasterDate, slaveDates, safe
|
||||||
|
|
||||||
i+=1
|
i+=1
|
||||||
runObj = run()
|
runObj = run()
|
||||||
|
runObj.configure(inps, 'run_' + str(i) + "_generate_burst_igram")
|
||||||
|
runObj.generate_burstIgram(acquisitionDates, safe_dict, pairs)
|
||||||
|
runObj.finalize()
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
runObj = run()
|
||||||
runObj.configure(inps, 'run_' + str(i) + "_merge_burst_igram")
|
runObj.configure(inps, 'run_' + str(i) + "_merge_burst_igram")
|
||||||
runObj.burstIgram_mergeBurst(acquisitionDates, safe_dict, pairs)
|
runObj.igram_mergeBurst(acquisitionDates, safe_dict, pairs)
|
||||||
runObj.finalize()
|
runObj.finalize()
|
||||||
|
|
||||||
i+=1
|
i+=1
|
||||||
|
|
|
@ -38,9 +38,11 @@ from isceobj.Constants import SPEED_OF_LIGHT
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
import pickle
|
import pickle
|
||||||
import sys
|
import gdal
|
||||||
|
import numpy as np
|
||||||
#import shelve
|
#import shelve
|
||||||
import s1a_isce_utils as ut
|
import s1a_isce_utils as ut
|
||||||
|
from isceobj.Util.ImageUtil import ImageLib as IML
|
||||||
|
|
||||||
def createParser():
|
def createParser():
|
||||||
'''
|
'''
|
||||||
|
@ -70,6 +72,9 @@ def createParser():
|
||||||
parser.add_argument('-m', '--method', dest='method', type=str, default='icu',
|
parser.add_argument('-m', '--method', dest='method', type=str, default='icu',
|
||||||
help='unwrapping method')
|
help='unwrapping method')
|
||||||
|
|
||||||
|
parser.add_argument('--rmfilter', action='store_true', default=False,
|
||||||
|
help='remove the effect of filtering from final unwrapped interferograms')
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
@ -276,14 +281,48 @@ def runUnwrapIcu(infile, outfile):
|
||||||
#unwImage.finalizeImage()
|
#unwImage.finalizeImage()
|
||||||
unwImage.renderHdr()
|
unwImage.renderHdr()
|
||||||
|
|
||||||
|
|
||||||
|
def remove_filter(intfile, filtfile, unwfile):
|
||||||
|
|
||||||
|
outunw = os.path.abspath(unwfile).split('filt_')
|
||||||
|
outunw = outunw[0] + outunw[1]
|
||||||
|
|
||||||
|
ds_unw = gdal.Open(unwfile + ".vrt", gdal.GA_ReadOnly)
|
||||||
|
width = ds_unw.RasterXSize
|
||||||
|
length = ds_unw.RasterYSize
|
||||||
|
|
||||||
|
unw_phase = np.memmap(unwfile, dtype='f', mode='r', shape=(2, length, width))
|
||||||
|
filt_phase = np.memmap(filtfile, dtype='f', mode='r', shape=(length, width))
|
||||||
|
int_phase = np.memmap(intfile, dtype='f', mode='r', shape=(length, width))
|
||||||
|
|
||||||
|
outfile = np.memmap(outunw, dtype='f', mode='w+', shape=(2, length, width))
|
||||||
|
|
||||||
|
for line in range(length):
|
||||||
|
integer_jumps = unw_phase[1, line, :] - np.angle(filt_phase[line, :])
|
||||||
|
outfile[1, line, :] = integer_jumps + np.angle(int_phase[line, :])
|
||||||
|
outfile[0, line, :] = unw_phase[0, line, :]
|
||||||
|
|
||||||
|
unwImage = isceobj.Image.createImage()
|
||||||
|
unwImage.setFilename(outunw)
|
||||||
|
unwImage.setWidth(width)
|
||||||
|
unwImage.setLength(length)
|
||||||
|
unwImage.imageType = 'unw'
|
||||||
|
unwImage.bands = 2
|
||||||
|
unwImage.scheme = 'BIL'
|
||||||
|
unwImage.dataType = 'FLOAT'
|
||||||
|
unwImage.setAccessMode('read')
|
||||||
|
unwImage.renderHdr()
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
def main(iargs=None):
|
def main(iargs=None):
|
||||||
'''
|
'''
|
||||||
The main driver.
|
The main driver.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
inps = cmdLineParse(iargs)
|
inps = cmdLineParse(iargs)
|
||||||
interferogramDir = os.path.dirname(inps.intfile)
|
|
||||||
print ('unwrapping method : ' , inps.method)
|
print ('unwrapping method : ' , inps.method)
|
||||||
|
|
||||||
if inps.method == 'snaphu':
|
if inps.method == 'snaphu':
|
||||||
if inps.nomcf:
|
if inps.nomcf:
|
||||||
fncall = runUnwrap
|
fncall = runUnwrap
|
||||||
|
@ -298,6 +337,13 @@ def main(iargs=None):
|
||||||
elif inps.method == 'icu':
|
elif inps.method == 'icu':
|
||||||
runUnwrapIcu(inps.intfile, inps.unwfile)
|
runUnwrapIcu(inps.intfile, inps.unwfile)
|
||||||
|
|
||||||
|
if inps.rmfilter:
|
||||||
|
filtfile = os.path.abspath(inps.intfile)
|
||||||
|
intfile = filtfile.split('filt_')
|
||||||
|
intfile = intfile[0] + intfile[1]
|
||||||
|
|
||||||
|
remove_filter(intfile, filtfile, inps.unwfile)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue