DenseOffsets with PyCuAmpcor: use '.slc.vrt' instead of '.slc' as inputs
parent
434a71322f
commit
0855bf2640
|
@ -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__' :
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue