98 lines
3.0 KiB
Python
Executable File
98 lines
3.0 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 multilook
|
|
|
|
|
|
def createParser():
|
|
parser = argparse.ArgumentParser(description='multilook unwrapped interferograms')
|
|
parser.add_argument('-u', '--unw', dest='unw', type=str, required=True,
|
|
help='input unwrapped interferogram')
|
|
parser.add_argument('-c', '--cor', dest='cor', type=str, required=True,
|
|
help='input coherence')
|
|
parser.add_argument('-o', '--output', dest='output', type=str, required=True,
|
|
help='output multi-look unwrapped interferogram')
|
|
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)
|
|
|
|
nrlks = inps.nrlks
|
|
nalks = inps.nalks
|
|
|
|
if (nrlks == 1) and (nalks == 1):
|
|
img = isceobj.createImage()
|
|
img.load(inps.unw + '.xml')
|
|
img.setFilename(inps.output)
|
|
img.extraFilename = inps.output+'.vrt'
|
|
img.renderHdr()
|
|
|
|
os.symlink(os.path.abspath(inps.unw), os.path.abspath(inps.output))
|
|
else:
|
|
#use coherence to compute weight
|
|
corName0 = inps.cor
|
|
corimg = isceobj.createImage()
|
|
corimg.load(corName0 + '.xml')
|
|
width = corimg.width
|
|
length = corimg.length
|
|
widthNew = int(width / nrlks)
|
|
lengthNew = int(length / nalks)
|
|
cor0 = (np.fromfile(corName0, dtype=np.float32).reshape(length*2, width))[1:length*2:2, :]
|
|
wgt = cor0**2
|
|
a = multilook(wgt, nalks, nrlks)
|
|
d = multilook((cor0!=0).astype(int), nalks, nrlks)
|
|
|
|
#unwrapped file
|
|
unwrapName0 = inps.unw
|
|
unwimg = isceobj.createImage()
|
|
unwimg.load(unwrapName0 + '.xml')
|
|
unw0 = (np.fromfile(unwrapName0, dtype=np.float32).reshape(length*2, width))[1:length*2:2, :]
|
|
amp0 = (np.fromfile(unwrapName0, dtype=np.float32).reshape(length*2, width))[0:length*2:2, :]
|
|
e = multilook(unw0*wgt, nalks, nrlks)
|
|
f = multilook(amp0**2, nalks, nrlks)
|
|
unw = np.zeros((lengthNew*2, widthNew), dtype=np.float32)
|
|
unw[0:lengthNew*2:2, :] = np.sqrt(f / (d + (d==0)))
|
|
unw[1:lengthNew*2:2, :] = e / (a + (a==0))
|
|
|
|
#output file
|
|
os.makedirs(os.path.dirname(inps.output), exist_ok=True)
|
|
unwrapName = inps.output
|
|
unw.astype(np.float32).tofile(unwrapName)
|
|
unwimg.setFilename(unwrapName)
|
|
unwimg.extraFilename = unwrapName + '.vrt'
|
|
unwimg.setWidth(widthNew)
|
|
unwimg.setLength(lengthNew)
|
|
unwimg.renderHdr()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
'''
|
|
Main driver.
|
|
'''
|
|
# Main Driver
|
|
main()
|
|
|
|
|
|
|