Example #1
0
def unpack(h5_file, slc_dir, frequency="A", polarization="VV"):
    """
    Unpack HDF5 to binary SLC file.
    """

    obj = createSensor("UAVSAR_HDF5_SLC")
    obj.configure()
    obj.hdf5 = h5_file
    obj.frequency = "frequency" + frequency
    obj.polarization = polarization

    if not os.path.isdir(slc_dir):
        os.mkdir(slc_dir)

    # obj.parse()
    date = os.path.basename(slc_dir)
    obj.output = os.path.join(slc_dir, date + ".slc")

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    obj.extractDoppler()

    pickName = os.path.join(slc_dir, "data")
    with shelve.open(pickName) as db:
        db["frame"] = obj.frame
Example #2
0
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    fname = glob.glob(os.path.join(hdf5,'ASA*.N1'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    obj = createSensor('ENVISAT_SLC')
    obj._imageFileName = fname
    obj.orbitDir = '/Users/agram/orbit/VOR'
    obj.instrumentDir = '/Users/agram/orbit/INS_DIR'
    obj.output = os.path.join(slcname, date+'.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()


    obj.extractDoppler()

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    imgname = glob.glob(os.path.join(hdf5, 'IMG*'))[0]
    ldrname = glob.glob(os.path.join(hdf5, 'LED*'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ALOS_SLC')
    obj.configure()
    obj._leaderFile = ldrname
    obj._imageFile = imgname
    obj.output = os.path.join(slcname, date + '.slc')

    print(obj._leaderFile)
    print(obj._imageFile)
    print(obj.output)

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #4
0
def setTSX(info):
    #set sensor
    objSensor = createSensor('TERRASARX')
    objSensor.xml = getInfo(info.input, 'xml')
    objSensor.output = getInfo(info.input, 'output')

    #set doppler
    objDop = createDoppler('USEDOPTSX')
    #objDop.wireInputPort(name='sensor', object=objSensor)

    return (objSensor, objDop)
Example #5
0
def unpack(hdf5, slcname, deskew=False, polarization='HH'):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    imgname = glob.glob(os.path.join(hdf5,
                                     '*/IMG-{}*'.format(polarization)))[0]
    ldrname = glob.glob(os.path.join(hdf5, '*/LED*'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ALOS2')
    obj.configure()
    obj._leaderFile = ldrname
    obj._imageFile = imgname

    if deskew:
        obj.output = os.path.join(slcname, date + '_orig.slc')
    else:
        obj.output = os.path.join(slcname, date + '.slc')

    print(obj._leaderFile)
    print(obj._imageFile)
    print(obj.output)
    obj.extractImage()
    obj.frame.getImage().renderHdr()

    coeffs = obj.doppler_coeff
    dr = obj.frame.getInstrument().getRangePixelSize()
    r0 = obj.frame.getStartingRange()

    poly = Poly1D.Poly1D()
    poly.initPoly(order=len(coeffs) - 1)
    poly.setCoeffs(coeffs)

    fcoeffs = obj.azfmrate_coeff
    fpoly = Poly1D.Poly1D()
    fpoly.initPoly(order=len(fcoeffs) - 1)
    fpoly.setCoeffs(fcoeffs)

    if deskew:
        pickName = os.path.join(slcname, 'original')
    else:
        pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
        db['doppler'] = poly
        db['fmrate'] = fpoly
        db['info'] = obj.leaderFile.facilityRecord.metadata

    print(poly._coeffs)
    print(fpoly._coeffs)
    return obj
def unpack(hdf5, slcname, multiple=False):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    if multiple:
        print('Trying multiple sub-dirs ....')
        imgname = glob.glob(os.path.join(hdf5, '*', 'ASA*'))

        if len(imgname) == 0:
            print('No ASA files found in sub-dirs. Trying same dir ...')
            imgname = glob.glob(os.path.join(hdf5, 'ASA*'))
    else:
        imgname = [glob.glob(os.path.join(hdf5, 'ASA*'))[0]]

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ENVISAT')
    obj.configure()
    obj._imageryFileList = imgname
    obj.instrumentDir = '/Users/agram/orbit/INS_DIR'
    obj.orbitDir = '/Users/agram/orbit/VOR'
    obj.output = os.path.join(slcname, date + '.raw')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    #    print('Beam number: ', obj._imageryFileData['antennaBeamSetNumber']-1)
    #    pprint.pprint(obj._instrumentFileData)

    #####Estimate doppler
    dop = DopIQ()
    dop.configure()

    img = copy.deepcopy(obj.frame.getImage())
    img.setAccessMode('READ')

    dop.wireInputPort('frame', object=obj.frame)
    dop.wireInputPort('instrument', object=obj.frame.instrument)
    dop.wireInputPort('image', object=img)
    dop.calculateDoppler()
    dop.fitDoppler()
    fit = dop.quadratic
    coef = [fit['a'], fit['b'], fit['c']]

    print(coef)
    obj.frame._dopplerVsPixel = [x * obj.frame.PRF for x in coef]

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    fname = glob.glob(os.path.join(hdf5,'ASA*.N1'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    obj = createSensor('ENVISAT_SLC')
    obj._imageFileName = fname
    obj.orbitDir = '/Users/agram/orbit/VOR'
    obj.instrumentDir = '/Users/agram/orbit/INS_DIR'
    obj.output = os.path.join(slcname, date+'.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()


    ######Numpy polynomial manipulation
    pc = obj._dopplerCoeffs[::-1]
    
    inds = np.linspace(0, obj.frame.numberOfSamples-1, len(pc) + 1)+1
    rng = obj.frame.getStartingRange() + inds * obj.frame.instrument.getRangePixelSize()
    dops = np.polyval(pc, 2*rng/Const.c-obj._dopplerTime)

    print('Near range doppler: ', dops[0])
    print('Far range doppler: ', dops[-1])
   
    dopfit = np.polyfit(inds, dops, len(pc)-1)
    
    poly = Poly1D.Poly1D()
    poly.initPoly(order=len(pc)-1)
    poly.setCoeffs(dopfit[::-1])

    print('Poly near range doppler: ', poly(1))
    print('Poly far range doppler: ', poly(obj.frame.numberOfSamples))

#    width = obj.frame.getImage().getWidth()
#    midrange = r0 + 0.5 * width * dr
#    dt = datetime.timedelta(seconds = midrange / Const.c)

#    obj.frame.sensingStart = obj.frame.sensingStart - dt
#    obj.frame.sensingStop = obj.frame.sensingStop - dt
#    obj.frame.sensingMid = obj.frame.sensingMid - dt


    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
        db['doppler'] = poly 
Example #8
0
def setRS2(info):
    #set sensor
    objSensor = createSensor('RADARSAT2')
    objSensor.xml = getInfo(info.input, 'xml')
    objSensor.tiff = getInfo(info.input, 'tiff')
    objSensor.output = getInfo(info.input, 'output')

    #set doppler
    objDop = createDoppler('useDEFAULT')
    #objDop.wireInputPort(name='sensor', object=objSensor)

    return (objSensor, objDop)
Example #9
0
def setALOS2(info):
    #set sensor
    objSensor = createSensor('ALOS2')
    objSensor._leaderFile = getInfo(info.input, 'LEADERFILE')
    objSensor._imageFile = getInfo(info.input, 'IMAGEFILE')
    objSensor.output = getInfo(info.input, 'output')

    #set doppler
    objDop = createDoppler('useDEFAULT')
    #objDop.wireInputPort(name='sensor', object=objSensor)

    return (objSensor, objDop)
Example #10
0
def setCSKS(info):
    #set sensor
    objSensor = createSensor('COSMO_SKYMED_SLC')
    objSensor.hdf5 = getInfo(info.input, 'HDF5')
    objSensor.output = getInfo(info.input, 'output')

    #set doppler
    #objDop =  createDoppler('useDOPCSKSLC')
    objDop = createDoppler('useDEFAULT')
    #objDop.wireInputPort(name='sensor', object=objSensor)

    return (objSensor, objDop)
Example #11
0
def setS1A(info):
    #set sensor
    objSensor = createSensor('SENTINEL1A')
    objSensor.xml = getInfo(info.input, 'xml')
    objSensor.tiff = getInfo(info.input, 'tiff')
    objSensor.orbitfile = getInfo(info.input, 'orbitfile')
    objSensor.output = getInfo(info.input, 'output')

    #set doppler
    objDop = createDoppler('useDEFAULT')
    #objDop.wireInputPort(name='sensor', object=objSensor)

    return (objSensor, objDop)
Example #12
0
def unpack(RSATdir, slcname):
    '''
    Unpack RADARSAT2 data to binary SLC file. assume HH only for now
    '''

    ###Search for imagery and XML files in input directory
    imgname = glob.glob(os.path.join(RSATdir, 'imagery*.tif'))[0]
    xmlname = glob.glob(os.path.join(RSATdir, 'product.xml'))[0]

    ####Create output SLC directory if needed
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    #####Create an Radarsat2 object and wire it
    obj = createSensor('Radarsat2')
    obj.configure()
    obj.xml = xmlname
    obj.tiff = imgname
    obj.output = os.path.join(slcname, date + '.slc')

    ####Extract the image and write the XML file for the SLC
    obj.extractImage()
    obj.frame.getImage().renderHdr()

    ####Save the doppler polynomial
    ####CEOS already provides doppler polynomial
    ####as a function of range pixel
    coeffs = obj.doppler_coeff
    poly = Poly1D.Poly1D()
    poly.initPoly(order=len(coeffs) - 1)
    poly.setCoeffs(coeffs)

    ####Save the FMrate polynomial
    ####CEOS already provides FMrate polynomial
    ####as a function of range pixel
    fcoeffs = obj.azfmrate_coeff
    #    fcoeffs = [0.0, 0.0, 0.0]  # zero-Doppler geometry, so this is not used
    fpoly = Poly1D.Poly1D()
    fpoly.initPoly(order=len(fcoeffs) - 1)
    fpoly.setCoeffs(fcoeffs)

    ####Save required metadata for further use
    ####All data is output to a shelve file
    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
        db['doppler'] = poly
        db['fmrate'] = fpoly
Example #13
0
def unpack(hdf5, slcname, dopFile, parse=False):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    obj = createSensor('UAVSAR_STACK')
    obj.configure()
    obj.metadataFile = hdf5
    obj.dopplerFile = dopFile
    obj.parse()

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    try:
        imgname = glob.glob(os.path.join(hdf5, '*.raw'))[0]
    except:
        try:
            imgname = glob.glob(os.path.join(hdf5, 'DAT*'))[0]
        except:
            raise Exception('Cant find .raw of DAT. file in dir')

    try:
        ldrname = glob.glob(os.path.join(hdf5, '*.ldr'))[0]
    except:
        try:
            ldrname = glob.glob(os.path.join(hdf5, 'LEA*'))[0]
        except:
            raise Exception('Cant find .ldr or LEA. file in dir')

    parname = glob.glob(os.path.join(hdf5, '*.par'))[0]

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('RADARSAT1')
    obj.configure()
    obj._leaderFile = ldrname
    obj._imageFile = imgname
    obj._parFile = parname
    obj.output = os.path.join(slcname, date + '.raw')

    print(obj._leaderFile)
    print(obj._imageFile)
    print(obj._parFile)
    print(obj.output)
    obj.extractImage()
    obj.frame.getImage().renderHdr()
    obj.extractDoppler()

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #15
0
def unpack(metaFile, slcDir, dopFile, stackSegment, parse=False):
    '''
    Prepare shelve/pickle file for the binary SLC file.
    '''

    obj = createSensor('UAVSAR_STACK')
    obj.configure()
    obj.metadataFile = metaFile
    obj.dopplerFile = dopFile
    obj.segment_index = stackSegment
    obj.parse()

    if not os.path.isdir(slcDir):
        os.mkdir(slcDir)

    pickName = os.path.join(slcDir, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #16
0
def unpack(hdf5, slcname, polar='RH', isfloat=False):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    obj = createSensor('RISAT1_SLC')
    obj._imageFile = os.path.join(hdf5, 'scene_' + polar, 'dat_01.001')
    obj._leaderFile = os.path.join(hdf5, 'scene_' + polar, 'lea_01.001')

    if isfloat:
        obj._dataType = 'float'
    else:
        obj._dataType = 'short'

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj.output = os.path.join(slcname, date + '.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    coeffs = obj.doppler_coeff
    dr = obj.frame.getInstrument().getRangePixelSize()
    r0 = obj.frame.getStartingRange()

    poly = Poly1D.Poly1D()
    poly.initPoly(order=len(coeffs) - 1)
    poly.setCoeffs(coeffs)

    fcoeffs = obj.azfmrate_coeff
    fpoly = Poly1D.Poly1D()
    fpoly.initPoly(order=len(fcoeffs) - 1)
    fpoly.setCoeffs(fcoeffs)

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
        db['doppler'] = poly
        db['fmrate'] = fpoly

    print(poly._coeffs)
    print(fpoly._coeffs)
def unpack(rawname, hdrname, slcname):
    '''
    Unpack raw to binary file.
    '''

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ROI_PAC')
    obj.configure()
    obj._rawFile = rawname
    obj._hdrFile = hdrname
    obj.output = os.path.join(slcname, date + '.raw')

    print(obj._rawFile)
    print(obj._hdrFile)
    print(obj.output)
    obj.extractImage()
    obj.frame.getImage().renderHdr()

    #####Estimate doppler
    dop = DopIQ()
    dop.configure()

    img = copy.deepcopy(obj.frame.getImage())
    img.setAccessMode('READ')

    dop.wireInputPort('frame', object=obj.frame)
    dop.wireInputPort('instrument', object=obj.frame.instrument)
    dop.wireInputPort('image', object=img)
    dop.calculateDoppler()
    dop.fitDoppler()
    fit = dop.quadratic
    coef = [fit['a'], fit['b'], fit['c']]

    print(coef)
    obj.frame._dopplerVsPixel = [x * obj.frame.PRF for x in coef]

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #18
0
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    fname = glob.glob(os.path.join(hdf5, 'TSX-1.SAR.L1B/*/TSX1*.xml'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    obj = createSensor('TerraSARX')
    obj.xml = fname
    obj.output = os.path.join(slcname, date + '.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    obj.extractDoppler()
    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #19
0
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    imgname = glob.glob(os.path.join(hdf5, 'DAT*'))[0]
    ldrname = glob.glob(os.path.join(hdf5, 'LEA*'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ERS_SLC')
    obj.configure()
    obj._leaderFile = ldrname
    obj._imageFile = imgname
    obj._orbitType = 'ODR'
    obj._orbitDir = '/Users/agram/orbit/ODR/ERS2'
    obj.output = os.path.join(slcname, date + '.slc')

    print(obj._leaderFile)
    print(obj._imageFile)
    print(obj.output)
    obj.extractImage()
    obj.frame.getImage().renderHdr()

    coeffs = obj.doppler_coeff
    #    coeffs = [0.,0.]
    dr = obj.frame.getInstrument().getRangePixelSize()
    r0 = obj.frame.getStartingRange()

    print(coeffs)
    poly = Poly1D.Poly1D()
    poly.initPoly(order=len(coeffs) - 1)
    poly.setCoeffs(coeffs)

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
        db['doppler'] = poly
def unpack(hdf5, slcname, polar='RH'):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    obj = createSensor('RISAT1')
    obj._imageFile = os.path.join(hdf5, 'scene_' + polar, 'dat_01.001')
    obj._leaderFile = os.path.join(hdf5, 'scene_' + polar, 'lea_01.001')
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj.output = os.path.join(slcname, date + '.raw')

    obj.extractImage()

    obj.frame.getImage().renderHdr()

    #####Estimate doppler
    dop = DopIQ()
    dop.configure()

    img = copy.deepcopy(obj.frame.getImage())
    img.setAccessMode('READ')

    dop.wireInputPort('frame', object=obj.frame)
    dop.wireInputPort('instrument', object=obj.frame.instrument)
    dop.wireInputPort('image', object=img)
    dop.calculateDoppler()
    dop.fitDoppler()
    fit = dop.quadratic
    coef = [fit['a'], fit['b'], fit['c']]

    print(coef)
    obj.frame._dopplerVsPixel = [x * obj.frame.PRF for x in coef]

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #21
0
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    if os.listdir(hdf5)[0].endswith('.E1'):  #ERS1
        fname = glob.glob(os.path.join(hdf5, 'SAR*.E1'))[0]
        orbitDir = '/home/mgovorcin/Working_dir/Ston_Slano1996/INSAR/orbits/ODR/ERS1/dgm-e04/'  #ERS1

    elif os.listdir(hdf5)[0].endswith('.E2'):
        fname = glob.glob(os.path.join(hdf5, 'SAR*.E2'))[0]  #ERS2
        if datetime.strptime(os.path.basename(fname)[14:22],
                             '%Y%m%d').date() > datetime(2003, 8, 8).date():
            orbitDir = '/home/mgovorcin/Working_dir/Ston_Slano1996/INSAR/orbits/ODR/ERS2/'  #ERS2
        else:
            orbitDir = '/home/mgovorcin/Working_dir/Ston_Slano1996/INSAR/orbits/ODR/ERS2/dgm-e04/'  #ERS2

    print(fname)

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ERS_ENVISAT_SLC')
    obj.configure()
    obj._imageFileName = fname
    obj._orbitDir = orbitDir
    obj._orbitType = 'ODR'
    obj.output = os.path.join(slcname, date + '.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    obj.extractDoppler()

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    fname = glob.glob(os.path.join(hdf5, '*.h5'))
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    obj = createSensor('COSMO_SKYMED')
    obj.hdf5FileList = fname
    obj.output = os.path.join(slcname, date + '.raw')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    obj.extractDoppler()

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #23
0
def unpack(hdf5, slcname):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    fname = glob.glob(os.path.join(hdf5, '*.h5'))[0]
    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    obj = createSensor('KOMPSAT5')
    obj.hdf5 = fname
    obj.output = os.path.join(slcname, date + '.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    coeffs = obj.dopplerCoeffs
    dr = obj.frame.getInstrument().getRangePixelSize()
    rref = 0.5 * Const.c * obj.rangeRefTime
    r0 = obj.frame.getStartingRange()
    norm = 0.5 * Const.c / dr

    dcoeffs = []
    for ind, val in enumerate(coeffs):
        dcoeffs.append(val / (norm**ind))

    poly = Poly1D.Poly1D()
    poly.initPoly(order=len(coeffs) - 1)
    poly.setMean((rref - r0) / dr - 1.0)
    poly.setCoeffs(dcoeffs)

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
        db['doppler'] = poly
Example #24
0
def unpack(hdf5, slcname, pol, orbdir):
    '''
    Unpack SAFE to binary SLC file.
    '''

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)

    obj = createSensor('SENTINEL1')
    obj.safe = hdf5
    obj.polarization = pol
    obj.orbitDir=orbdir
    obj.output = os.path.join(slcname, date+'.slc')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    obj.extractDoppler()

    pickName = os.path.join(slcname, 'data')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #25
0
def unpack(hdf5, slcname, multiple=False):
    '''
    Unpack HDF5 to binary SLC file.
    '''
    os.makedirs(slcname, exist_ok=True)

    date = os.path.basename(slcname)
    obj = createSensor('ALOS')
    obj.configure()

    if multiple:
        print('Trying multiple subdirs...')
        obj._imageFileList = glob.glob(os.path.join(hdf5, '*', 'IMG-' + inps.polarization + '*'))
        obj._leaderFileList = glob.glob(os.path.join(hdf5, '*', 'LED*'))

        if (len(obj._imageFileList) == 0) or (len(obj._leaderFileList) == 0):
            print('No imagefiles / leaderfiles found in sub-dirs. Trying same directory ...')
            obj._imageFileList = glob.glob(os.path.join(hdf5, 'IMG-' + inps.polarization + '*'))
            obj._leaderFileList = glob.glob(os.path.join(hdf5, 'LED*'))

    else:
        imgname = glob.glob(os.path.join(hdf5, '*' , 'IMG-' + inps.polarization + '*'))[0]
        ldrname = glob.glob(os.path.join(hdf5, '*' , 'LED*'))[0]



        obj._leaderFileList = [ldrname]
        obj._imageFileList = [imgname]

    obj.output = os.path.join(slcname, date+'.raw')

    print(obj._leaderFileList)
    print(obj._imageFileList)
    print(obj.output)

    #if inps.fbd2fbs:
   #    print('fbd2fbs flag activated')
   #    obj._resampleFlag = 'dual2single'
    
    if inps.resampFlag == 'fbd2fbs':
       print('fbd2fbs flag activated')
       obj._resampleFlag = 'dual2single'
    elif inps.resampFlag == 'fbs2fbd':
       print('fbs2fbd flag activated')
       obj._resampleFlag = 'single2dual'


    
    obj.extractImage()
    obj.frame.getImage().renderHdr()


        #####Estimate doppler
    dop = DopIQ()
    dop.configure()

    img = copy.deepcopy(obj.frame.getImage())
    img.setAccessMode('READ')

    dop.wireInputPort('frame', object=obj.frame)
    dop.wireInputPort('instrument', object=obj.frame.instrument)
    dop.wireInputPort('image', object=img)

    dop.calculateDoppler()
    dop.fitDoppler()
    fit = dop.quadratic
    coef = [fit['a'], fit['b'], fit['c']]

    obj.frame._dopplerVsPixel = [x*obj.frame.PRF for x in coef]

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
def unpack(hdf5, slcname, multiple=False, orbtype='PRC'):
    '''
    Unpack HDF5 to binary SLC file.
    '''

    if multiple:
        print('Trying multiple sub-dirs - ESA convention ...')
        imgname = glob.glob(os.path.join(hdf5, '*', 'DAT*'))
        ldrname = glob.glob(os.path.join(hdf5, '*', 'LEA*'))

        if (len(imgname) == 0) or (len(ldrname) == 0):
            print(
                'Did not find ESA style files in sub-dirs. Trying RPAC style in sub-dirs ....'
            )
            imgname = glob.glob(os.path.join(hdf5, '*', 'IMA*'))
            ldrname = glob.glob(os.path.join(hdf5, '*', 'SAR*'))

            if (len(imgname) == 0) or (len(ldrname) == 0):
                print(
                    'Did not find RPAC style files in sub-dirs. Trying RPAC style in same-dir ....'
                )
                imgname = glob.glob(os.path.join(hdf5, 'IMA*'))
                ldrname = glob.glob(os.path.join(hdf5, 'SAR*'))

    else:
        imgname = [glob.glob(os.path.join(hdf5, 'DAT*'))[0]]
        ldrname = [glob.glob(os.path.join(hdf5, 'LEA*'))[0]]

    if not os.path.isdir(slcname):
        os.mkdir(slcname)

    date = os.path.basename(slcname)
    obj = createSensor('ERS')
    obj.configure()
    obj._imageFileList = imgname
    obj._leaderFileList = ldrname

    ####Need to figure out 1/2 automatically also
    if orbtype == 'ODR':
        obj._orbitType = 'ODR'
        obj._orbitDir = '/Users/agram/orbit/ODR/ERS1'

    if orbtype == 'PRC':
        obj._orbitType = 'PRC'
        obj._orbitDir = '/Users/agram/orbit/PRC/ERS1'

    obj.output = os.path.join(slcname, date + '.raw')

    obj.extractImage()
    obj.frame.getImage().renderHdr()

    #####Estimate doppler
    dop = DopIQ()
    dop.configure()

    img = copy.deepcopy(obj.frame.getImage())
    img.setAccessMode('READ')

    dop.wireInputPort('frame', object=obj.frame)
    dop.wireInputPort('instrument', object=obj.frame.instrument)
    dop.wireInputPort('image', object=img)
    dop.calculateDoppler()
    dop.fitDoppler()
    fit = dop.quadratic
    coef = [fit['a'], fit['b'], fit['c']]

    print(coef)
    obj.frame._dopplerVsPixel = [x * obj.frame.PRF for x in coef]

    pickName = os.path.join(slcname, 'raw')
    with shelve.open(pickName) as db:
        db['frame'] = obj.frame
Example #27
0
def process(inps):
    '''
    Do the actual processing.
    '''
    nSar = len(inps.fnames)
    print(inps.fnames)
    print('Number of SAR Scenes = %d' % nSar)

    Orbits = []
    print('Reading in all the raw files and metadata.')
    for k in xrange(nSar):
        if inps.raw:
            sar = createSensor('COSMO_SKYMED')
        else:
            sar = createSensor('COSMO_SKYMED_SLC')
        sar.hdf5 = inps.fnames[k]
        fd = CSKmetadata(sar)
        Orbits.append(orbit_info(sar, inps.fnames[k], fd[0]))

    ##########We now have all the pegpoints to start processing.
    Dopplers = np.zeros(nSar)
    Bperp = np.zeros(nSar)
    Days = np.zeros(nSar)

    #######Setting the first scene as temporary reference.
    master = Orbits[0]

    Dopplers[0] = master.fd
    Days[0] = master.dt.toordinal()
    for k in xrange(1, nSar):
        slave = Orbits[k]
        Bperp[k] = master.getBaseline(slave)
        Dopplers[k] = slave.fd
        Days[k] = slave.dt.toordinal()

    print("************************************")
    print("Index    Date       Bperp  Doppler")
    print("************************************")

    ### Plot
    if inps.plot:
        f = open("baseline.txt", 'w')
        g = open("bplot.txt", 'w')
        f.write("Index     Date       Bperp   Doppler \n")

    for k in xrange(nSar):
        print('{0:>3}    {1:>10} {2:4.2f}  {3:4.2f}'.format(
            k + 1, Orbits[k].dt.strftime('%Y-%m-%d'), Bperp[k], Dopplers[k]))

        ### Plot
        if inps.plot:
            f.write('{0:>3}    {1:>10}    {2:4.2f}     {3:4.2f} \n'.format(
                k + 1, Orbits[k].dt.strftime('%Y-%m-%d'), Bperp[k],
                Dopplers[k]))
            g.write('{0:>10}    {1:4.2f} \n'.format(
                Orbits[k].dt.strftime('%Y-%m-%d'), Bperp[k]))

        #### Looking at all possible pairs. Stop here if you just want to add
    ### 1 scene. If the first scene is the new scene, you have all reqd
    ### information at this stage.

    print("************************************")

    ### Plot
    if inps.plot:
        f.close()
        g.close()
        os.system('mkdir baselineInfos')
        os.system('mv baseline.txt bplot.txt baselineInfos')

    geomRho = (
        1 -
        np.clip(np.abs(Bperp[:, None] - Bperp[None, :]) / inps.Bcrit, 0., 1.))
    tempRho = np.exp(-1.0 * np.abs(Days[:, None] - Days[None, :]) / inps.Tau)
    dopRho = (np.abs(Dopplers[:, None] - Dopplers[None, :]) /
              master.prf) < inps.dop

    Rho = geomRho * tempRho * dopRho
    for kk in xrange(nSar):
        Rho[kk, kk] = 0.

    avgRho = np.mean(Rho, axis=1) * nSar / (nSar - 1)
    numViable = np.sum((Rho > inps.cThresh), axis=1)

    ####Currently sorting on average coherence.

    masterChoice = np.argsort(-avgRho)  #Descending order
    masterOrbit = Orbits[masterChoice[0]]
    masterBperp = Bperp[masterChoice[0]]

    print('*************************************')
    print('Ranking for Master Scene Selection: ')
    print('**************************************')
    print('Rank  Index      Date    nViable   Avg. Coh.')
    for kk in xrange(nSar):
        ind = masterChoice[kk]
        print('%03d   %03d   %10s  %03d  %02.3f' %
              (kk + 1, ind + 1, Orbits[ind].dt.strftime('%Y-%m-%d'),
               numViable[ind], avgRho[ind]))

    print('***************************************')

    print('***************************************')
    print('List of Viable interferograms:')
    print('***************************************')

    [ii, jj] = np.where(Rho > inps.cThresh)

    pairList = []
    print('Master     Slave      Bperp      Deltat')
    if inps.plot:
        os.system('rm baselineInfos/InSAR_pairs.txt')
        f = open("baselineInfos/InSAR_pairs.txt", 'w')
        f.write(
            'Master     Slave      Bperp(m)      Deltat(days)     Doppler(Hz) \n'
        )
        f.close()
        os.system('rm baselineInfos/InSAR_plot.txt')
        g = open("baselineInfos/InSAR_plot.txt", 'w')
        g.close()

    for mind, sind in itertools.izip(ii, jj):
        master = Orbits[mind]
        slave = Orbits[sind]

        #Plot
        giorni = []
        BaseList = []

        if master.dt > slave.dt:
            print('{0:>10} {1:>10}  {2:>4.2f}   {3:>4.2f}'.format(
                master.dt.strftime('%Y-%m-%d'), slave.dt.strftime('%Y-%m-%d'),
                Bperp[mind] - Bperp[sind], Days[mind] - Days[sind]))
            pairList.append([
                master.dt.strftime('%Y%m%d'),
                slave.dt.strftime('%Y%m%d'), Bperp[mind] - Bperp[sind]
            ])

        if inps.plot:
            #f=open("InSAR_plot.txt",'w')
            if master.dt > slave.dt:
                f = open("baselineInfos/InSAR_pairs.txt", 'a')
                f.write(
                    '{0:>10} {1:>10}  {2:>4.2f}        {3:>4.2f}            {4:>4.2f} \n'
                    .format(master.dt.strftime('%Y-%m-%d'),
                            slave.dt.strftime('%Y-%m-%d'),
                            Bperp[mind] - Bperp[sind], Days[mind] - Days[sind],
                            Dopplers[mind] - Dopplers[sind]))
                f.close()
                g = open("baselineInfos/InSAR_plot.txt", 'a')
                g.write(
                    '{0:>10} {1:>10}  {2:>4.2f}   {3:>4.2f}       {4:>4.2f}   {5:>4.2f} \n'
                    .format(master.dt.strftime('%Y-%m-%d'),
                            slave.dt.strftime('%Y-%m-%d'), Bperp[mind],
                            Bperp[sind], Dopplers[mind], Dopplers[sind]))
                plt.plot_date([Days[mind], Days[sind]],
                              [Bperp[mind], Bperp[sind]],
                              'r-',
                              lw=1,
                              xdate=True,
                              ydate=False)

                #f=open("InSAR_plot.txt",'a')
                #f.write('{2:>4.2f} {2:>4.2f}     {3:>4.2f} {3:>4.2f} \n'.format(Bperp[mind], Bperp[sind], Days[mind], Days[sind]))
                #f.close()
            #print(Bperp[mind], Days[mind], Bperp[sind] , Days[sind])

    print('***************************************')

    #######Currently picks master peg point.
    print('***************************************')
    commonPeg = masterOrbit.peg
    print('Common peg point:                      ')
    print(commonPeg)
    print('Bperp Range:  [%f , %f] ' %
          (Bperp.min() - masterBperp, Bperp.max() - masterBperp))

    ######Choose median doppler
    commonDop = np.median(Dopplers)
    maxDop = np.max(Dopplers)
    minDop = np.min(Dopplers)
    varDop = np.max(np.abs(Dopplers - commonDop)) / masterOrbit.prf

    print('Common Doppler: ', commonDop)
    print('Doppler Range:  [%f, %f]' % (minDop, maxDop))
    print('MAx Doppler Variation = %f %%' % (varDop * 100))
    print('******************************************')

    ### Plot
    if inps.plot:
        days, bperp = np.loadtxt(
            "baselineInfos/bplot.txt",
            unpack=True,
            converters={0: mdates.strpdate2num('%Y-%m-%d')})
        plt.plot_date(x=days, y=bperp, xdate=True, ydate=False)
        date_span = 0.2 * np.abs(days.max() - days.min())
        bperp_span = 0.2 * np.abs(bperp.max() - bperp.min())
        plt.grid(True)
        plt.ylabel("Perpendicular Baseline (meters)")
        plt.xlabel("Time")
        plt.xlim([days.min() - date_span, days.max() + date_span])
        plt.ylim([bperp.min() - bperp_span, bperp.max() + bperp_span])
        plt.axes().set_aspect('auto', 'datalim')
        plt.savefig('baselineInfos/baseline.png')
        plt.show()

    return pairList
    'filename of slave image (e.g., TDX1_SAR__SSC_BTX1_SM_S_SRA_20150713T095616_20150713T095624/TDX1_SAR__SSC_BTX1_SM_S_SRA_20150713T095616_20150713T095624.xml)'
)
parser.add_argument(
    'slcname_slave',
    type=str,
    help='output directory containting SLC (e.g., SLC/TDX_20150713)')
args = parser.parse_args()

#fname_master='/raid/InSAR/TanDEM-X-QdT/dims_op_oc_dfd2_545348042_1/TDM.SAR.COSSC/1285982_002/TDM1_SAR__COS_BIST_SM_S_SRA_20150713T095616_20150713T095624/TSX1_SAR__SSC_BRX2_SM_S_SRA_20150713T095616_20150713T095624/TSX1_SAR__SSC_BRX2_SM_S_SRA_20150713T095616_20150713T095624.xml'
#slcname_master = '/raid/InSAR/TanDEM-X-QdT/SLC/TSX_20150713'
print('Generating SLC for master: {} '.format(
    os.path.basename(args.fname_master)))
if not os.path.isdir(args.slcname_master):
    os.mkdir(args.slcname_master)
date = os.path.basename(args.slcname_master)
obj = createSensor('TanDEMX')
obj.xml = args.fname_master
obj.output = os.path.join(args.slcname_master, date + '.slc')
if not os.path.exists(obj.output):
    obj.extractImage()
    obj.frame.getImage().renderHdr()
    obj.extractDoppler()
pickName_master = os.path.join(args.slcname_master, 'data')
if os.path.exists(pickName_master):
    with shelve.open(pickName_master, flag='r') as mdb:
        mFrame = mdb['frame']
else:
    with shelve.open(pickName_master) as mdb:
        mdb['frame'] = obj.frame
        mFrame = mdb['frame']
mdoppler = mFrame._dopplerVsPixel