96 lines
3.1 KiB
Python
96 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import isce
|
|
import logging
|
|
import isceobj
|
|
import mroipac
|
|
import argparse
|
|
from mroipac.ampcor.Ampcor import Ampcor
|
|
import numpy as np
|
|
|
|
def cmdLineParser():
|
|
parser = argparse.ArgumentParser(description='Simple ampcor driver')
|
|
parser.add_argument('-m', dest='master', type=str,
|
|
help='Master image with ISCE XML file', required=True)
|
|
parser.add_argument('-b1', dest='band1', type=int,
|
|
help='Band number of master image', default=0)
|
|
parser.add_argument('-s', dest='slave', type=str,
|
|
help='Slave image with ISCE XML file', required=True)
|
|
parser.add_argument('-b2', dest='band2', type=int,
|
|
help='Band number of slave image', default=0)
|
|
parser.add_argument('-o', dest='outfile', default= 'offsets.txt',
|
|
type=str, help='Output ASCII file')
|
|
return parser.parse_args()
|
|
|
|
|
|
#Start of the main program
|
|
if __name__ == '__main__':
|
|
|
|
logging.info("Calculate offset between two using ampcor")
|
|
|
|
#Parse command line
|
|
inps = cmdLineParser()
|
|
|
|
####Create master image object
|
|
masterImg = isceobj.createImage() #Empty image
|
|
masterImg.load(inps.master +'.xml') #Load from XML file
|
|
masterImg.setAccessMode('read') #Set it up for reading
|
|
masterImg.createImage() #Create File
|
|
|
|
#####Create slave image object
|
|
slaveImg = isceobj.createImage() #Empty image
|
|
slaveImg.load(inps.slave +'.xml') #Load it from XML file
|
|
slaveImg.setAccessMode('read') #Set it up for reading
|
|
slaveImg.createImage() #Create File
|
|
|
|
|
|
|
|
####Stage 1: Initialize
|
|
objAmpcor = Ampcor(name='my_ampcor')
|
|
objAmpcor.configure()
|
|
|
|
####Defautl values used if not provided in my_ampcor
|
|
coarseAcross = 0
|
|
coarseDown = 0
|
|
|
|
####Get file types
|
|
if masterImg.getDataType().upper().startswith('C'):
|
|
objAmpcor.setImageDataType1('complex')
|
|
else:
|
|
objAmpcor.setImageDataType1('real')
|
|
|
|
if slaveImg.getDataType().upper().startswith('C'):
|
|
objAmpcor.setImageDataType2('complex')
|
|
else:
|
|
objAmpcor.setImageDataType2('real')
|
|
|
|
#####Stage 2: No ports for ampcor
|
|
### Any parameters can be controlled through my_ampcor.xml
|
|
|
|
### Stage 3: Set values as needed
|
|
####Only set these values if user does not define it in my_ampcor.xml
|
|
if objAmpcor.acrossGrossOffset is None:
|
|
objAmpcor.acrossGrossOffset = coarseAcross
|
|
|
|
if objAmpcor.downGrossOffset is None:
|
|
objAmpcor.downGrossOffset = coarseDown
|
|
|
|
logging.info('Across Gross Offset = %d'%(objAmpcor.acrossGrossOffset))
|
|
logging.info('Down Gross Offset = %d'%(objAmpcor.downGrossOffset))
|
|
|
|
####Stage 4: Call the main method
|
|
objAmpcor.ampcor(masterImg,slaveImg)
|
|
|
|
###Close ununsed images
|
|
masterImg.finalizeImage()
|
|
slaveImg.finalizeImage()
|
|
|
|
|
|
######Stage 5: Get required data out of the processing run
|
|
offField = objAmpcor.getOffsetField()
|
|
logging.info('Number of returned offsets : %d'%(len(offField._offsets)))
|
|
|
|
####Write output to an ascii file
|
|
field = np.array(offField.unpackOffsets())
|
|
np.savetxt(inps.outfile, field, delimiter=" ", format='%5.6f')
|