121 lines
4.0 KiB
Python
121 lines
4.0 KiB
Python
|
#
|
||
|
# Author: Piyush Agram
|
||
|
# Copyright 2016
|
||
|
#
|
||
|
|
||
|
import logging
|
||
|
import isceobj
|
||
|
import os
|
||
|
from isceobj.Constants import SPEED_OF_LIGHT
|
||
|
import numpy as np
|
||
|
|
||
|
logger = logging.getLogger('isce.scansarinsar.runCommonRangeSpectra')
|
||
|
|
||
|
|
||
|
def createVirtualCopy(infile, outfile):
|
||
|
'''
|
||
|
Create a virtual copy as is.
|
||
|
'''
|
||
|
from osgeo import gdal
|
||
|
import shutil
|
||
|
|
||
|
ds = gdal.Open(infile + '.vrt', gdal.GA_ReadOnly)
|
||
|
width = ds.RasterXSize
|
||
|
lgth = ds.RasterYSize
|
||
|
|
||
|
ds = None
|
||
|
|
||
|
|
||
|
img = isceobj.createSlcImage()
|
||
|
img.setWidth(width)
|
||
|
img.setLength(lgth)
|
||
|
img.setAccessMode('READ')
|
||
|
img.setFilename(outfile)
|
||
|
img.renderHdr()
|
||
|
|
||
|
##Copy VRT as is
|
||
|
shutil.copyfile( infile + '.vrt', outfile + '.vrt')
|
||
|
|
||
|
|
||
|
|
||
|
def runCommonRangeSpectra(self):
|
||
|
'''Align central frequencies and pixel sizes.
|
||
|
'''
|
||
|
|
||
|
swathList = self._insar.getValidSwathList(self.swaths)
|
||
|
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||
|
|
||
|
print('Common swaths: ', swathList)
|
||
|
|
||
|
for ind, swath in enumerate(swathList):
|
||
|
|
||
|
##Load master swath
|
||
|
master = self._insar.loadProduct( os.path.join(self._insar.masterSlcProduct,
|
||
|
's{0}.xml'.format(swath)))
|
||
|
|
||
|
##Load slave swath
|
||
|
slave = self._insar.loadProduct( os.path.join(self._insar.slaveSlcProduct,
|
||
|
's{0}.xml'.format(swath)))
|
||
|
|
||
|
|
||
|
##Check for overlap frequency
|
||
|
centerfreq1 = SPEED_OF_LIGHT / master.radarWavelegth
|
||
|
bandwidth1 = np.abs( master.instrument.pulseLength * master.instrument.chirpSlope)
|
||
|
|
||
|
centerfreq2 = SPEED_OF_LIGHT / slave.radarWavelegth
|
||
|
bandwidth2 = np.abs( slave.instrument.pulseLength * slave.instrument.chirpSlope)
|
||
|
|
||
|
overlapfreq = self._insar.getOverlapFrequency(centerfreq1, bandwidth1,
|
||
|
centerfreq2, bandwidth2)
|
||
|
|
||
|
if (overlapfreq is None):
|
||
|
print('No range bandwidth overlap found for swath {0}'.format(swath))
|
||
|
raise Exception('No range spectra overlap')
|
||
|
|
||
|
overlapbw = overlapfreq[1] - overlapfreq[0]
|
||
|
|
||
|
print('Range spectra overlap for swath {0} : {1}'.format(swath, overlapbw))
|
||
|
if overlapbw < self._insar.rangeSpectraOverlapThreshold:
|
||
|
raise Exception('Not enough range spectra overlap for swath {0}'.format(swath))
|
||
|
|
||
|
|
||
|
centerfreq = 0.5 * (centerfreq1 + centerfreq2)
|
||
|
|
||
|
|
||
|
###Check if master needs range filtering
|
||
|
if (np.abs(centerfreq1 - centerfreq) < 1.0) and ((bandwidth1 - 1.0) < overlapbw):
|
||
|
print('No need to range filter master slc for swath {0}'.format(swath))
|
||
|
infile = master.image.filename
|
||
|
outfile = os.path.join(self._insar.commonRangeSpectraSlcDirectory,
|
||
|
os.path.sep.join(infile.split(os.path.sep)[-4:]))
|
||
|
os.makedirs( os.path.dirname(outfile))
|
||
|
createVirtualCopy(infile, outfile)
|
||
|
##Generate product
|
||
|
master.image.filename = outfile
|
||
|
self._insar.saveProduct(master, os.path.dirname(outfile) + '.xml')
|
||
|
|
||
|
|
||
|
else:
|
||
|
raise NotImplementedError('This feature will be available after porting rg_filter')
|
||
|
|
||
|
|
||
|
###Check if slave needs range filtering
|
||
|
if (np.abs(centerfreq2 - centerfreq) < 1.0) and ((bandwidth2 - 1.0) < overlapbw):
|
||
|
print('No need to range filter slave slc for swath {0}'.format(swath))
|
||
|
|
||
|
infile = slave.image.filename
|
||
|
outfile = os.path.join(self._insar.commonRangeSpectraSlcDirectory,
|
||
|
os.path.sep.join(infile.split(os.path.sep)[-4:]))
|
||
|
os.makedirs( os.path.dirname(outfile))
|
||
|
createVirtualCopy(infile, outfile)
|
||
|
##Generate product
|
||
|
slave.image.filename = outfile
|
||
|
self._insar.saveProduct(slave, os.path.dirname(outfile) + '.xml')
|
||
|
|
||
|
else:
|
||
|
raise NotImplementedError('This feature will be available after porting rg_filter')
|
||
|
|
||
|
|
||
|
catalog.printToLog(logger, "runCommonRangeSpectra")
|
||
|
self._insar.procDoc.addAllFromCatalog(catalog)
|