DenseOffsets with PyCuAmpcor: use '.slc.vrt' instead of '.slc' as inputs

LT1AB
Lijun Zhu 2019-11-21 17:23:49 -08:00 committed by piyushrpt
parent 434a71322f
commit 0855bf2640
2 changed files with 53 additions and 53 deletions

View File

@ -50,7 +50,7 @@ def runDenseOffsetsCPU(self):
sf += '.full' sf += '.full'
master = os.path.join(self._insar.mergedDirname, mf) master = os.path.join(self._insar.mergedDirname, mf)
slave = os.path.join(self._insar.mergedDirname, sf) slave = os.path.join(self._insar.mergedDirname, sf)
####For this module currently, we need to create an actual file on disk ####For this module currently, we need to create an actual file on disk
for infile in [master,slave]: for infile in [master,slave]:
if os.path.isfile(infile): if os.path.isfile(infile):
@ -59,7 +59,7 @@ def runDenseOffsetsCPU(self):
status = os.system(cmd) status = os.system(cmd)
if status: if status:
raise Exception('{0} could not be executed'.format(status)) raise Exception('{0} could not be executed'.format(status))
### Load the master object ### Load the master object
@ -73,7 +73,7 @@ def runDenseOffsetsCPU(self):
s.load(slave + '.xml') s.load(slave + '.xml')
s.setAccessMode('READ') s.setAccessMode('READ')
# s.createImage() # s.createImage()
width = m.getWidth() width = m.getWidth()
length = m.getLength() length = m.getLength()
@ -104,7 +104,7 @@ def runDenseOffsetsCPU(self):
objOffset.oversamplingFactor = self.oversample objOffset.oversamplingFactor = self.oversample
objOffset.setAcrossGrossOffset(self.rgshift) objOffset.setAcrossGrossOffset(self.rgshift)
objOffset.setDownGrossOffset(self.azshift) objOffset.setDownGrossOffset(self.azshift)
objOffset.setFirstPRF(1.0) objOffset.setFirstPRF(1.0)
objOffset.setSecondPRF(1.0) objOffset.setSecondPRF(1.0)
if m.dataType.startswith('C'): if m.dataType.startswith('C'):
@ -126,7 +126,7 @@ def runDenseOffsetsCPU(self):
print('\n======================================') print('\n======================================')
print('Running dense ampcor...') print('Running dense ampcor...')
print('======================================\n') print('======================================\n')
objOffset.denseampcor(m, s) ### Where the magic happens... objOffset.denseampcor(m, s) ### Where the magic happens...
### Store params for later ### Store params for later
@ -140,7 +140,7 @@ def runDenseOffsetsGPU(self):
''' '''
Estimate dense offset field between merged master bursts and slave bursts. Estimate dense offset field between merged master bursts and slave bursts.
''' '''
from contrib.PyCuAmpcor import PyCuAmpcor from contrib.PyCuAmpcor import PyCuAmpcor
print('\n============================================================') print('\n============================================================')
@ -156,7 +156,7 @@ def runDenseOffsetsGPU(self):
slave = os.path.join(self._insar.mergedDirname, sf) slave = os.path.join(self._insar.mergedDirname, sf)
####For this module currently, we need to create an actual file on disk ####For this module currently, we need to create an actual file on disk
for infile in [master,slave]: for infile in [master,slave]:
if os.path.isfile(infile): if os.path.isfile(infile):
continue continue
@ -177,7 +177,7 @@ def runDenseOffsetsGPU(self):
s.load(slave + '.xml') s.load(slave + '.xml')
s.setAccessMode('READ') s.setAccessMode('READ')
# s.createImage() # s.createImage()
width = m.getWidth() width = m.getWidth()
length = m.getLength() length = m.getLength()
@ -186,10 +186,10 @@ def runDenseOffsetsGPU(self):
objOffset.deviceID = -1 objOffset.deviceID = -1
objOffset.nStreams = 2 objOffset.nStreams = 2
objOffset.derampMethod = 0 objOffset.derampMethod = 0
objOffset.masterImageName = master objOffset.masterImageName = master + '.vrt'
objOffset.masterImageHeight = length objOffset.masterImageHeight = length
objOffset.masterImageWidth = width objOffset.masterImageWidth = width
objOffset.slaveImageName = slave objOffset.slaveImageName = slave + '.vrt'
objOffset.slaveImageHeight = length objOffset.slaveImageHeight = length
objOffset.slaveImageWidth = width objOffset.slaveImageWidth = width
@ -250,7 +250,7 @@ def runDenseOffsetsGPU(self):
print('\n======================================') print('\n======================================')
print('Running dense ampcor...') print('Running dense ampcor...')
print('======================================\n') print('======================================\n')
objOffset.checkPixelInImageRange() objOffset.checkPixelInImageRange()
objOffset.runAmpcor() objOffset.runAmpcor()
@ -274,14 +274,14 @@ def runDenseOffsetsGPU(self):
outImg.renderHdr() outImg.renderHdr()
snrImg = isceobj.createImage() snrImg = isceobj.createImage()
snrImg.setFilename( objOffset.snrImageName.decode('utf8')) snrImg.setFilename( objOffset.snrImageName.decode('utf-8'))
snrImg.setDataType('FLOAT') snrImg.setDataType('FLOAT')
snrImg.setBands(1) snrImg.setBands(1)
snrImg.setWidth(objOffset.numberWindowAcross) snrImg.setWidth(objOffset.numberWindowAcross)
snrImg.setLength(objOffset.numberWindowDown) snrImg.setLength(objOffset.numberWindowDown)
snrImg.setAccessMode('read') snrImg.setAccessMode('read')
snrImg.renderHdr() snrImg.renderHdr()
if __name__ == '__main__' : if __name__ == '__main__' :

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# author: Minyan Zhong # author: Minyan Zhong
import numpy as np import numpy as np
import argparse import argparse
import os import os
import isce import isce
@ -13,7 +13,7 @@ from isceobj.Location.Offset import OffsetField
from iscesys.StdOEL.StdOELPy import create_writer from iscesys.StdOEL.StdOELPy import create_writer
#from mroipac.ampcor.DenseAmpcor import DenseAmpcor #from mroipac.ampcor.DenseAmpcor import DenseAmpcor
from PyCuAmpcor import PyCuAmpcor from contrib.PyCuAmpcor import PyCuAmpcor
from grossOffsets import grossOffsets from grossOffsets import grossOffsets
#from isceobj.Utils.denseoffsets import denseoffsets #from isceobj.Utils.denseoffsets import denseoffsets
@ -116,17 +116,17 @@ def estimateOffsetField(master, slave, inps=None):
length = sar.getLength() length = sar.getLength()
objOffset = PyCuAmpcor() objOffset = PyCuAmpcor()
objOffset.algorithm = 0 objOffset.algorithm = 0
objOffset.deviceID = inps.gpuid # -1:let system find the best GPU objOffset.deviceID = inps.gpuid # -1:let system find the best GPU
objOffset.nStreams = 2 #cudaStreams objOffset.nStreams = 2 #cudaStreams
objOffset.derampMethod = inps.deramp objOffset.derampMethod = inps.deramp
print(objOffset.derampMethod) print(objOffset.derampMethod)
objOffset.masterImageName = master objOffset.masterImageName = master + '.vrt'
objOffset.masterImageHeight = length objOffset.masterImageHeight = length
objOffset.masterImageWidth = width objOffset.masterImageWidth = width
objOffset.slaveImageName = slave objOffset.slaveImageName = slave + '.vrt'
objOffset.slaveImageHeight = length objOffset.slaveImageHeight = length
objOffset.slaveImageWidth = width objOffset.slaveImageWidth = width
@ -150,10 +150,10 @@ def estimateOffsetField(master, slave, inps=None):
# window size # window size
objOffset.windowSizeHeight = inps.winhgt objOffset.windowSizeHeight = inps.winhgt
objOffset.windowSizeWidth = inps.winwidth objOffset.windowSizeWidth = inps.winwidth
print(objOffset.windowSizeHeight) print(objOffset.windowSizeHeight)
print(objOffset.windowSizeWidth) print(objOffset.windowSizeWidth)
# search range # search range
objOffset.halfSearchRangeDown = inps.srchgt objOffset.halfSearchRangeDown = inps.srchgt
objOffset.halfSearchRangeAcross = inps.srcwidth objOffset.halfSearchRangeAcross = inps.srcwidth
@ -162,7 +162,7 @@ def estimateOffsetField(master, slave, inps=None):
# starting pixel # starting pixel
objOffset.masterStartPixelDownStatic = inps.margin objOffset.masterStartPixelDownStatic = inps.margin
objOffset.masterStartPixelAcrossStatic = inps.margin objOffset.masterStartPixelAcrossStatic = inps.margin
# skip size # skip size
objOffset.skipSampleDown = inps.skiphgt objOffset.skipSampleDown = inps.skiphgt
objOffset.skipSampleAcross = inps.skipwidth objOffset.skipSampleAcross = inps.skipwidth
@ -171,7 +171,7 @@ def estimateOffsetField(master, slave, inps=None):
objOffset.corrSufaceOverSamplingMethod = 0 objOffset.corrSufaceOverSamplingMethod = 0
objOffset.corrSurfaceOverSamplingFactor = inps.oversample objOffset.corrSurfaceOverSamplingFactor = inps.oversample
#objOffset.rawDataOversamplingFactor = 4 #objOffset.rawDataOversamplingFactor = 4
# output filenames # output filenames
objOffset.offsetImageName = str(inps.outprefix) + str(inps.outsuffix) + '.bip' objOffset.offsetImageName = str(inps.outprefix) + str(inps.outsuffix) + '.bip'
objOffset.grossOffsetImageName = str(inps.outprefix) + str(inps.outsuffix) + '_gross.bip' objOffset.grossOffsetImageName = str(inps.outprefix) + str(inps.outsuffix) + '_gross.bip'
@ -197,19 +197,19 @@ def estimateOffsetField(master, slave, inps=None):
objOffset.numberWindowDownInChunk = 5 objOffset.numberWindowDownInChunk = 5
objOffset.numberWindowAcrossInChunk = 5 objOffset.numberWindowAcrossInChunk = 5
objOffset.mmapSize = 16 objOffset.mmapSize = 16
objOffset.setupParams() objOffset.setupParams()
## Set Gross Offset ### ## Set Gross Offset ###
if inps.gross == 0: if inps.gross == 0:
objOffset.setConstantGrossOffset(0, 0) objOffset.setConstantGrossOffset(0, 0)
else: else:
print("Setting up grossOffset...") print("Setting up grossOffset...")
objGrossOff = grossOffsets() objGrossOff = grossOffsets()
objGrossOff.setXSize(width) objGrossOff.setXSize(width)
objGrossOff.setYize(length) objGrossOff.setYize(length)
objGrossOff.setMargin(inps.margin) objGrossOff.setMargin(inps.margin)
@ -224,46 +224,46 @@ def estimateOffsetField(master, slave, inps=None):
objGrossOff.setLosFile(inps.los) objGrossOff.setLosFile(inps.los)
objGrossOff.setMasterFile(inps.masterxml) objGrossOff.setMasterFile(inps.masterxml)
objGrossOff.setbTemp(inps.bTemp) objGrossOff.setbTemp(inps.bTemp)
grossDown, grossAcross = objGrossOff.runGrossOffsets() grossDown, grossAcross = objGrossOff.runGrossOffsets()
# change nan to 0 # change nan to 0
grossDown = np.nan_to_num(grossDown) grossDown = np.nan_to_num(grossDown)
grossAcross = np.nan_to_num(grossAcross) grossAcross = np.nan_to_num(grossAcross)
print("Before plotting the gross offsets (min and max): ", np.nanmin(grossDown),np.nanmax(grossDown)) print("Before plotting the gross offsets (min and max): ", np.nanmin(grossDown),np.nanmax(grossDown))
print("Before plotting the gross offsets (min and max): ", np.rint(np.nanmin(grossDown)),np.rint(np.nanmax(grossDown))) print("Before plotting the gross offsets (min and max): ", np.rint(np.nanmin(grossDown)),np.rint(np.nanmax(grossDown)))
grossDown = np.int32(np.rint(grossDown.ravel())) grossDown = np.int32(np.rint(grossDown.ravel()))
grossAcross = np.int32(np.rint(grossAcross.ravel())) grossAcross = np.int32(np.rint(grossAcross.ravel()))
print(np.amin(grossDown), np.amax(grossDown)) print(np.amin(grossDown), np.amax(grossDown))
print(np.amin(grossAcross), np.amax(grossAcross)) print(np.amin(grossAcross), np.amax(grossAcross))
print(grossDown.shape) print(grossDown.shape)
print(grossDown.shape) print(grossDown.shape)
objOffset.setVaryingGrossOffset(grossDown, grossAcross) objOffset.setVaryingGrossOffset(grossDown, grossAcross)
#objOffset.setVaryingGrossOffset(np.zeros(shape=grossDown.shape,dtype=np.int32), np.zeros(shape=grossAcross.shape,dtype=np.int32)) #objOffset.setVaryingGrossOffset(np.zeros(shape=grossDown.shape,dtype=np.int32), np.zeros(shape=grossAcross.shape,dtype=np.int32))
# check # check
objOffset.checkPixelInImageRange() objOffset.checkPixelInImageRange()
# Run the code # Run the code
print('Running PyCuAmpcor') print('Running PyCuAmpcor')
objOffset.runAmpcor() objOffset.runAmpcor()
print('Finished') print('Finished')
sar.finalizeImage() sar.finalizeImage()
sim.finalizeImage() sim.finalizeImage()
# Finalize the results # Finalize the results
# offsetfield # offsetfield
outImg = isceobj.createImage() outImg = isceobj.createImage()
outImg.setDataType('FLOAT') outImg.setDataType('FLOAT')
outImg.setFilename(offsetImageName) outImg.setFilename(offsetImageName)
@ -273,8 +273,8 @@ def estimateOffsetField(master, slave, inps=None):
outImg.setLength(objOffset.numberWindowDown) outImg.setLength(objOffset.numberWindowDown)
outImg.setAccessMode('read') outImg.setAccessMode('read')
outImg.renderHdr() outImg.renderHdr()
# gross offsetfield # gross offsetfield
outImg = isceobj.createImage() outImg = isceobj.createImage()
outImg.setDataType('FLOAT') outImg.setDataType('FLOAT')
@ -285,7 +285,7 @@ def estimateOffsetField(master, slave, inps=None):
outImg.setLength(objOffset.numberWindowDown) outImg.setLength(objOffset.numberWindowDown)
outImg.setAccessMode('read') outImg.setAccessMode('read')
outImg.renderHdr() outImg.renderHdr()
# snr # snr
snrImg = isceobj.createImage() snrImg = isceobj.createImage()
snrImg.setFilename(snrImageName) snrImg.setFilename(snrImageName)
@ -297,17 +297,17 @@ def estimateOffsetField(master, slave, inps=None):
snrImg.renderHdr() snrImg.renderHdr()
return objOffset return objOffset
def main(iargs=None): def main(iargs=None):
inps = cmdLineParse(iargs) inps = cmdLineParse(iargs)
outDir = os.path.dirname(inps.outprefix) outDir = os.path.dirname(inps.outprefix)
print(inps.outprefix) print(inps.outprefix)
if not os.path.exists(outDir): if not os.path.exists(outDir):
os.makedirs(outDir) os.makedirs(outDir)
objOffset = estimateOffsetField(inps.master, inps.slave, inps) objOffset = estimateOffsetField(inps.master, inps.slave, inps)
if __name__ == '__main__': if __name__ == '__main__':
main() main()