ISCE_INSAR/docs/dev/Example1_ampcor.py

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')