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

View File

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