96 lines
3.2 KiB
Python
96 lines
3.2 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='reference', type=str,
|
|
help='Reference image with ISCE XML file', required=True)
|
|
parser.add_argument('-b1', dest='band1', type=int,
|
|
help='Band number of reference image', default=0)
|
|
parser.add_argument('-s', dest='secondary', type=str,
|
|
help='Secondary image with ISCE XML file', required=True)
|
|
parser.add_argument('-b2', dest='band2', type=int,
|
|
help='Band number of secondary 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 reference image object
|
|
referenceImg = isceobj.createImage() #Empty image
|
|
referenceImg.load(inps.reference +'.xml') #Load from XML file
|
|
referenceImg.setAccessMode('read') #Set it up for reading
|
|
referenceImg.createImage() #Create File
|
|
|
|
#####Create secondary image object
|
|
secondaryImg = isceobj.createImage() #Empty image
|
|
secondaryImg.load(inps.secondary +'.xml') #Load it from XML file
|
|
secondaryImg.setAccessMode('read') #Set it up for reading
|
|
secondaryImg.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 referenceImg.getDataType().upper().startswith('C'):
|
|
objAmpcor.setImageDataType1('complex')
|
|
else:
|
|
objAmpcor.setImageDataType1('real')
|
|
|
|
if secondaryImg.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(referenceImg,secondaryImg)
|
|
|
|
###Close ununsed images
|
|
referenceImg.finalizeImage()
|
|
secondaryImg.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')
|