2019-01-16 19:40:08 +00:00
|
|
|
#
|
|
|
|
#
|
|
|
|
|
|
|
|
import isce
|
|
|
|
import isceobj
|
|
|
|
import stdproc
|
|
|
|
from isceobj.Util.Poly2D import Poly2D
|
|
|
|
import logging
|
|
|
|
from isceobj.Util.decorators import use_api
|
|
|
|
|
|
|
|
import os
|
|
|
|
import numpy as np
|
|
|
|
import shelve
|
|
|
|
|
|
|
|
logger = logging.getLogger('isce.insar.runResampleSlc')
|
|
|
|
|
|
|
|
def runResampleSlc(self, kind='coarse'):
|
|
|
|
'''
|
|
|
|
Kind can either be coarse, refined or fine.
|
|
|
|
'''
|
|
|
|
|
|
|
|
if kind not in ['coarse', 'refined', 'fine']:
|
|
|
|
raise Exception('Unknown operation type {0} in runResampleSlc'.format(kind))
|
|
|
|
|
|
|
|
if kind == 'fine':
|
2019-10-14 17:05:24 +00:00
|
|
|
if not (self.doRubbersheetingRange | self.doRubbersheetingAzimuth): # Modified by V. Brancato 10.10.2019
|
2019-01-16 19:40:08 +00:00
|
|
|
print('Rubber sheeting not requested, skipping resampling ....')
|
|
|
|
return
|
|
|
|
|
|
|
|
logger.info("Resampling slave SLC")
|
|
|
|
|
|
|
|
slaveFrame = self._insar.loadProduct( self._insar.slaveSlcCropProduct)
|
|
|
|
masterFrame = self._insar.loadProduct( self._insar.masterSlcCropProduct)
|
|
|
|
|
|
|
|
inimg = isceobj.createSlcImage()
|
|
|
|
inimg.load(slaveFrame.getImage().filename + '.xml')
|
|
|
|
inimg.setAccessMode('READ')
|
|
|
|
|
|
|
|
prf = slaveFrame.PRF
|
|
|
|
|
|
|
|
doppler = slaveFrame._dopplerVsPixel
|
|
|
|
coeffs = [2*np.pi*val/prf for val in doppler]
|
|
|
|
|
|
|
|
dpoly = Poly2D()
|
|
|
|
dpoly.initPoly(rangeOrder=len(coeffs)-1, azimuthOrder=0, coeffs=[coeffs])
|
|
|
|
|
|
|
|
rObj = stdproc.createResamp_slc()
|
|
|
|
rObj.slantRangePixelSpacing = slaveFrame.getInstrument().getRangePixelSize()
|
|
|
|
rObj.radarWavelength = slaveFrame.getInstrument().getRadarWavelength()
|
|
|
|
rObj.dopplerPoly = dpoly
|
|
|
|
|
|
|
|
# for now let's start with None polynomial. Later this should change to
|
|
|
|
# the misregistration polynomial
|
|
|
|
|
|
|
|
misregFile = os.path.join(self.insar.misregDirname, self.insar.misregFilename)
|
|
|
|
if ((kind in ['refined','fine']) and os.path.exists(misregFile+'_az.xml')):
|
|
|
|
azpoly = self._insar.loadProduct(misregFile + '_az.xml')
|
|
|
|
rgpoly = self._insar.loadProduct(misregFile + '_rg.xml')
|
|
|
|
else:
|
|
|
|
print(misregFile , " does not exist.")
|
|
|
|
azpoly = None
|
|
|
|
rgpoly = None
|
|
|
|
|
|
|
|
rObj.azimuthOffsetsPoly = azpoly
|
|
|
|
rObj.rangeOffsetsPoly = rgpoly
|
|
|
|
rObj.imageIn = inimg
|
|
|
|
|
|
|
|
#Since the app is based on geometry module we expect pixel-by-pixel offset
|
|
|
|
#field
|
|
|
|
offsetsDir = self.insar.offsetsDirname
|
2019-10-14 17:05:24 +00:00
|
|
|
|
|
|
|
# Modified by V. Brancato 10.10.2019
|
|
|
|
#rgname = os.path.join(offsetsDir, self.insar.rangeOffsetFilename)
|
|
|
|
|
2019-01-16 19:40:08 +00:00
|
|
|
if kind in ['coarse', 'refined']:
|
|
|
|
azname = os.path.join(offsetsDir, self.insar.azimuthOffsetFilename)
|
2019-10-14 17:05:24 +00:00
|
|
|
rgname = os.path.join(offsetsDir, self.insar.rangeOffsetFilename)
|
2019-12-10 17:54:36 +00:00
|
|
|
flatten = True
|
2019-01-16 19:40:08 +00:00
|
|
|
else:
|
|
|
|
azname = os.path.join(offsetsDir, self.insar.azimuthRubbersheetFilename)
|
2019-10-14 17:05:24 +00:00
|
|
|
if self.doRubbersheetingRange:
|
|
|
|
print('Rubbersheeting in range is turned on, taking the cross-correlation offsets')
|
|
|
|
print('Setting Flattening to False')
|
|
|
|
rgname = os.path.join(offsetsDir, self.insar.rangeRubbersheetFilename)
|
|
|
|
flatten=False
|
|
|
|
else:
|
|
|
|
print('Rubbersheeting in range is turned off, taking range geometric offsets')
|
|
|
|
rgname = os.path.join(offsetsDir, self.insar.rangeOffsetFilename)
|
|
|
|
flatten=True
|
|
|
|
|
2019-01-16 19:40:08 +00:00
|
|
|
rngImg = isceobj.createImage()
|
|
|
|
rngImg.load(rgname + '.xml')
|
|
|
|
rngImg.setAccessMode('READ')
|
|
|
|
|
|
|
|
aziImg = isceobj.createImage()
|
|
|
|
aziImg.load(azname + '.xml')
|
|
|
|
aziImg.setAccessMode('READ')
|
|
|
|
|
|
|
|
width = rngImg.getWidth()
|
|
|
|
length = rngImg.getLength()
|
|
|
|
|
2019-10-14 17:05:24 +00:00
|
|
|
# Modified by V. Brancato 10.10.2019
|
|
|
|
#flatten = True
|
2019-01-16 19:40:08 +00:00
|
|
|
rObj.flatten = flatten
|
|
|
|
rObj.outputWidth = width
|
|
|
|
rObj.outputLines = length
|
|
|
|
rObj.residualRangeImage = rngImg
|
|
|
|
rObj.residualAzimuthImage = aziImg
|
|
|
|
|
|
|
|
if masterFrame is not None:
|
|
|
|
rObj.startingRange = slaveFrame.startingRange
|
|
|
|
rObj.referenceStartingRange = masterFrame.startingRange
|
|
|
|
rObj.referenceSlantRangePixelSpacing = masterFrame.getInstrument().getRangePixelSize()
|
|
|
|
rObj.referenceWavelength = masterFrame.getInstrument().getRadarWavelength()
|
|
|
|
|
|
|
|
|
|
|
|
# preparing the output directory for coregistered slave slc
|
|
|
|
coregDir = self.insar.coregDirname
|
|
|
|
|
2020-04-13 19:40:32 +00:00
|
|
|
os.makedirs(coregDir, exist_ok=True)
|
2019-01-16 19:40:08 +00:00
|
|
|
|
|
|
|
# output file name of the coregistered slave slc
|
|
|
|
img = slaveFrame.getImage()
|
|
|
|
|
|
|
|
if kind == 'coarse':
|
|
|
|
coregFilename = os.path.join(coregDir , self._insar.coarseCoregFilename)
|
|
|
|
elif kind == 'refined':
|
|
|
|
coregFilename = os.path.join(coregDir, self._insar.refinedCoregFilename)
|
|
|
|
elif kind == 'fine':
|
|
|
|
coregFilename = os.path.join(coregDir, self._insar.fineCoregFilename)
|
|
|
|
else:
|
|
|
|
print('Exception: Should not have gotten to this stage')
|
|
|
|
|
|
|
|
imgOut = isceobj.createSlcImage()
|
|
|
|
imgOut.setWidth(width)
|
|
|
|
imgOut.filename = coregFilename
|
|
|
|
imgOut.setAccessMode('write')
|
|
|
|
|
|
|
|
rObj.resamp_slc(imageOut=imgOut)
|
|
|
|
|
|
|
|
imgOut.renderHdr()
|
|
|
|
|
|
|
|
return
|
|
|
|
|