140 lines
4.1 KiB
Python
Executable File
140 lines
4.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import numpy as np
|
|
import argparse
|
|
import os
|
|
import isce
|
|
import isceobj
|
|
import shelve
|
|
import datetime
|
|
from isceobj.Location.Offset import OffsetField
|
|
from iscesys.StdOEL.StdOELPy import create_writer
|
|
from mroipac.ampcor.DenseAmpcor import DenseAmpcor
|
|
#from isceobj.Utils.denseoffsets import denseoffsets
|
|
#import pickle
|
|
from isceobj.Util.decorators import use_api
|
|
|
|
def createParser():
|
|
'''
|
|
Command line parser.
|
|
'''
|
|
|
|
parser = argparse.ArgumentParser( description='Generate offset field between two Sentinel swaths')
|
|
parser.add_argument('-m','--master', type=str, dest='master', required=True,
|
|
help='Master image')
|
|
parser.add_argument('-s', '--slave',type=str, dest='slave', required=True,
|
|
help='Slave image')
|
|
|
|
parser.add_argument('--ww', type=int, dest='winwidth', default=64,
|
|
help='Window Width')
|
|
parser.add_argument('--wh', type=int, dest='winhgt', default=64,
|
|
help='Window height')
|
|
parser.add_argument('--sw', type=int, dest='srcwidth', default=20,
|
|
help='Search window width')
|
|
parser.add_argument('--sh', type=int, dest='srchgt', default=20,
|
|
help='Search window height')
|
|
parser.add_argument('--mm', type=int, dest='margin', default=50,
|
|
help='Margin')
|
|
parser.add_argument('--kw', type=int, dest='skipwidth', default=64,
|
|
help='Skip across')
|
|
parser.add_argument('--kh', type=int, dest='skiphgt', default=64,
|
|
help='Skip down')
|
|
|
|
parser.add_argument('-o','--outPrefix', type=str, dest='outprefix', default='dense_ampcor',
|
|
help='Output prefix')
|
|
|
|
parser.add_argument('--aa', type=int, dest='azshift', default=0,
|
|
help='Gross azimuth offset')
|
|
|
|
parser.add_argument('--rr', type=int, dest='rgshift', default=0,
|
|
help='Gross range offset')
|
|
parser.add_argument('--oo', type=int, dest='oversample', default=32,
|
|
help = 'Oversampling factor')
|
|
|
|
return parser
|
|
|
|
def cmdLineParse(iargs = None):
|
|
parser = createParser()
|
|
inps = parser.parse_args(args=iargs)
|
|
|
|
return inps
|
|
|
|
@use_api
|
|
def estimateOffsetField(master, slave, inps=None):
|
|
'''
|
|
Estimate offset field between burst and simamp.
|
|
'''
|
|
|
|
###Loading the slave image object
|
|
sim = isceobj.createSlcImage()
|
|
sim.load(slave+'.xml')
|
|
sim.setAccessMode('READ')
|
|
sim.createImage()
|
|
|
|
###Loading the master image object
|
|
sar = isceobj.createSlcImage()
|
|
sar.load(master + '.xml')
|
|
sar.setAccessMode('READ')
|
|
sar.createImage()
|
|
|
|
width = sar.getWidth()
|
|
length = sar.getLength()
|
|
|
|
objOffset = DenseAmpcor(name='dense')
|
|
objOffset.configure()
|
|
|
|
# objOffset.numberThreads = 6
|
|
objOffset.setWindowSizeWidth(inps.winwidth)
|
|
objOffset.setWindowSizeHeight(inps.winhgt)
|
|
objOffset.setSearchWindowSizeWidth(inps.srcwidth)
|
|
objOffset.setSearchWindowSizeHeight(inps.srchgt)
|
|
objOffset.skipSampleAcross = inps.skipwidth
|
|
objOffset.skipSampleDown = inps.skiphgt
|
|
objOffset.margin = inps.margin
|
|
objOffset.oversamplingFactor = inps.oversample
|
|
|
|
objOffset.setAcrossGrossOffset(inps.rgshift)
|
|
objOffset.setDownGrossOffset(inps.azshift)
|
|
|
|
objOffset.setFirstPRF(1.0)
|
|
objOffset.setSecondPRF(1.0)
|
|
if sar.dataType.startswith('C'):
|
|
objOffset.setImageDataType1('mag')
|
|
else:
|
|
objOffset.setImageDataType1('real')
|
|
|
|
if sim.dataType.startswith('C'):
|
|
objOffset.setImageDataType2('mag')
|
|
else:
|
|
objOffset.setImageDataType2('real')
|
|
|
|
objOffset.offsetImageName = inps.outprefix + '.bil'
|
|
objOffset.snrImageName = inps.outprefix +'_snr.bil'
|
|
|
|
|
|
objOffset.denseampcor(sar, sim)
|
|
|
|
sar.finalizeImage()
|
|
sim.finalizeImage()
|
|
return objOffset
|
|
|
|
|
|
|
|
def main(iargs=None):
|
|
'''
|
|
Generate offset fields burst by burst.
|
|
'''
|
|
|
|
inps = cmdLineParse(iargs)
|
|
outDir = os.path.dirname(inps.outprefix)
|
|
os.makedirs(outDir, exist_ok=True)
|
|
|
|
objOffset = estimateOffsetField(inps.master, inps.slave, inps)
|
|
|
|
|
|
print('Top left corner of offset image: ', objOffset.locationDown[0][0],objOffset.locationAcross[0][0])
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|