96 lines
3.2 KiB
Python
Executable File
96 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Author: Cunren Liang
|
|
# Copyright 2021
|
|
|
|
import os
|
|
import copy
|
|
import argparse
|
|
import numpy as np
|
|
|
|
import isce
|
|
import isceobj
|
|
from isceobj.TopsProc.runIon import cal_coherence
|
|
from isceobj.TopsProc.runIon import multilook
|
|
|
|
|
|
def createParser():
|
|
parser = argparse.ArgumentParser(description='compute coherence using only differential interferograms')
|
|
parser.add_argument('-l', '--lower', dest='lower', type=str, required=True,
|
|
help='lower band interferogram')
|
|
parser.add_argument('-u', '--upper', dest='upper', type=str, required=True,
|
|
help='upper band interferogram')
|
|
parser.add_argument('-c', '--coherence', dest='coherence', type=str, required=True,
|
|
help='output coherence')
|
|
parser.add_argument('-r', '--nrlks', dest='nrlks', type=int, default=1,
|
|
help='number of range looks. Default: 1')
|
|
parser.add_argument('-a', '--nalks', dest='nalks', type=int, default=1,
|
|
help='number of azimuth looks. Default: 1')
|
|
|
|
return parser
|
|
|
|
|
|
def cmdLineParse(iargs = None):
|
|
parser = createParser()
|
|
return parser.parse_args(args=iargs)
|
|
|
|
|
|
def main(iargs=None):
|
|
'''
|
|
'''
|
|
inps = cmdLineParse(iargs)
|
|
|
|
os.makedirs(os.path.dirname(inps.coherence), exist_ok=True)
|
|
|
|
#The orginal coherence calculated by topsApp.py is not good at all, use the following coherence instead
|
|
#lowerintfile = os.path.join(ionParam.ionDirname, ionParam.lowerDirname, ionParam.mergedDirname, self._insar.mergedIfgname)
|
|
#upperintfile = os.path.join(ionParam.ionDirname, ionParam.upperDirname, ionParam.mergedDirname, self._insar.mergedIfgname)
|
|
#corfile = os.path.join(ionParam.ionDirname, ionParam.lowerDirname, ionParam.mergedDirname, self._insar.correlationFilename)
|
|
|
|
img = isceobj.createImage()
|
|
img.load(inps.lower + '.xml')
|
|
width = img.width
|
|
length = img.length
|
|
lowerint = np.fromfile(inps.lower, dtype=np.complex64).reshape(length, width)
|
|
upperint = np.fromfile(inps.upper, dtype=np.complex64).reshape(length, width)
|
|
|
|
if (inps.nrlks != 1) or (inps.nalks != 1):
|
|
width = np.int(width/inps.nrlks)
|
|
length = np.int(length/inps.nalks)
|
|
lowerint = multilook(lowerint, inps.nalks, inps.nrlks)
|
|
upperint = multilook(upperint, inps.nalks, inps.nrlks)
|
|
|
|
#compute coherence only using interferogram
|
|
#here I use differential interferogram of lower and upper band interferograms
|
|
#so that coherence is not affected by fringes
|
|
cord = cal_coherence(lowerint*np.conjugate(upperint), win=3, edge=4)
|
|
cor = np.zeros((length*2, width), dtype=np.float32)
|
|
cor[0:length*2:2, :] = np.sqrt( (np.absolute(lowerint)+np.absolute(upperint))/2.0 )
|
|
cor[1:length*2:2, :] = cord
|
|
cor.astype(np.float32).tofile(inps.coherence)
|
|
|
|
#create xml and vrt
|
|
#img.scheme = 'BIL'
|
|
#img.bands = 2
|
|
#img.filename = corfile
|
|
#img.renderHdr()
|
|
|
|
#img = isceobj.Image.createUnwImage()
|
|
img = isceobj.createOffsetImage()
|
|
img.setFilename(inps.coherence)
|
|
img.extraFilename = inps.coherence + '.vrt'
|
|
img.setWidth(width)
|
|
img.setLength(length)
|
|
img.renderHdr()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
'''
|
|
Main driver.
|
|
'''
|
|
# Main Driver
|
|
main()
|
|
|
|
|
|
|