예제 #1
0
def runGeo2rdrCPU(info, latImage, lonImage, demImage, outdir,
        dop=None, nativedop=False, legendre=False,
        azoff=0.0, rgoff=0.0,
        alks=1, rlks=1):
    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    #####Run Geo2rdr
    planet = Planet(pname='Earth')
    grdr = createGeo2rdr()
    grdr.configure()

    grdr.slantRangePixelSpacing = info.getInstrument().getRangePixelSize()
    grdr.prf = info.getInstrument().getPulseRepetitionFrequency()
    grdr.radarWavelength = info.getInstrument().getRadarWavelength()
    grdr.orbit = info.getOrbit()
    grdr.width = info.getImage().getWidth()
    grdr.length = info.getImage().getLength()
    grdr.wireInputPort(name='planet', object=planet)
    grdr.lookSide =  info.instrument.platform.pointingDirection

    print(info.sensingStart - datetime.timedelta(seconds = (azoff-(alks-1)/2)/grdr.prf))
    print(grdr.prf)
    print(info.getStartingRange() - (rgoff - (rlks-1)/2)*grdr.slantRangePixelSpacing)
    #print(stop)

    grdr.setSensingStart(info.sensingStart - datetime.timedelta(seconds = (azoff-(alks-1)/2)/grdr.prf))
    grdr.rangeFirstSample = info.getStartingRange() - (rgoff - (rlks-1)/2)*grdr.slantRangePixelSpacing
    grdr.numberRangeLooks = alks
    grdr.numberAzimuthLooks = rlks

    if nativedop and (dop is not None):
        try:
            coeffs = [x/grdr.prf for x in dop._coeffs]
        except:
            coeffs = [x/grdr.prf for x in dop]

        grdr.dopplerCentroidCoeffs = coeffs
    else:
        print('Zero doppler')
        grdr.dopplerCentroidCoeffs = [0.]

#####    grdr.fmrateCoeffs = [0.]		# DOES NOT LOOK to be defined

    grdr.rangeOffsetImageName = os.path.join(outdir, 'range.off')
    grdr.azimuthOffsetImageName= os.path.join(outdir, 'azimuth.off')
    grdr.demImage = demImage
    grdr.latImage = latImage
    grdr.lonImage = lonImage
    grdr.outputPrecision = 'DOUBLE'

    if legendre:
        grdr.orbitInterpolationMethod = 'LEGENDRE'

    grdr.geo2rdr()

    return
예제 #2
0
def runGeo2rdr(info, rdict, misreg_az=0.0, misreg_rg=0.0, virtual=False):
    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    latImage = isceobj.createImage()
    latImage.load(rdict['lat'] + '.xml')
    latImage.setAccessMode('READ')
    latImage.createImage()

    lonImage = isceobj.createImage()
    lonImage.load(rdict['lon'] + '.xml')
    lonImage.setAccessMode('READ')
    lonImage.createImage()

    demImage = isceobj.createImage()
    demImage.load(rdict['hgt'] + '.xml')
    demImage.setAccessMode('READ')
    demImage.createImage()

    delta = datetime.timedelta(seconds=misreg_az)
    logger.info('Additional time offset applied in geo2rdr: {0} secs'.format(
        misreg_az))
    logger.info(
        'Additional range offset applied in geo2rdr: {0} m'.format(misreg_rg))

    #####Run Geo2rdr
    planet = Planet(pname='Earth')
    grdr = createGeo2rdr()
    grdr.configure()

    grdr.slantRangePixelSpacing = info.rangePixelSize
    grdr.prf = 1.0 / info.azimuthTimeInterval
    grdr.radarWavelength = info.radarWavelength
    grdr.orbit = info.orbit
    grdr.width = info.numberOfSamples
    grdr.length = info.numberOfLines
    grdr.demLength = demImage.getLength()
    grdr.demWidth = demImage.getWidth()
    grdr.wireInputPort(name='planet', object=planet)
    grdr.numberRangeLooks = 1
    grdr.numberAzimuthLooks = 1
    grdr.lookSide = -1
    grdr.setSensingStart(info.sensingStart - delta)
    grdr.rangeFirstSample = info.startingRange - misreg_rg
    grdr.dopplerCentroidCoeffs = [0.]  ###Zero doppler

    grdr.rangeOffsetImageName = rdict['rangeOffName']
    grdr.azimuthOffsetImageName = rdict['azOffName']
    grdr.demImage = demImage
    grdr.latImage = latImage
    grdr.lonImage = lonImage

    grdr.geo2rdr()

    return
예제 #3
0
def geo2RdrCPU(secondaryTrack, numberRangeLooks, numberAzimuthLooks, latFile,
               lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
    import datetime
    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    pointingDirection = {'right': -1, 'left': 1}

    latImage = isceobj.createImage()
    latImage.load(latFile + '.xml')
    latImage.setAccessMode('read')

    lonImage = isceobj.createImage()
    lonImage.load(lonFile + '.xml')
    lonImage.setAccessMode('read')

    demImage = isceobj.createDemImage()
    demImage.load(hgtFile + '.xml')
    demImage.setAccessMode('read')

    planet = Planet(pname='Earth')

    topo = createGeo2rdr()
    topo.configure()
    #set parameters
    topo.slantRangePixelSpacing = numberRangeLooks * secondaryTrack.rangePixelSize
    topo.prf = 1.0 / (numberAzimuthLooks * secondaryTrack.azimuthLineInterval)
    topo.radarWavelength = secondaryTrack.radarWavelength
    topo.orbit = secondaryTrack.orbit
    topo.width = secondaryTrack.numberOfSamples
    topo.length = secondaryTrack.numberOfLines
    topo.demLength = demImage.length
    topo.demWidth = demImage.width
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1  #
    topo.numberAzimuthLooks = 1  # must be set to be 1
    topo.lookSide = pointingDirection[secondaryTrack.pointingDirection]
    topo.setSensingStart(secondaryTrack.sensingStart + datetime.timedelta(
        seconds=(numberAzimuthLooks - 1.0) / 2.0 *
        secondaryTrack.azimuthLineInterval))
    topo.rangeFirstSample = secondaryTrack.startingRange + (
        numberRangeLooks - 1.0) / 2.0 * secondaryTrack.rangePixelSize
    topo.dopplerCentroidCoeffs = [0.]  # we are using zero doppler geometry
    #set files
    topo.latImage = latImage
    topo.lonImage = lonImage
    topo.demImage = demImage
    topo.rangeOffsetImageName = rangeOffsetFile
    topo.azimuthOffsetImageName = azimuthOffsetFile
    #run it
    topo.geo2rdr()

    return
예제 #4
0
def runGeo2rdr(frame,
               latImage,
               lonImage,
               demImage,
               rgoffName='range.off',
               azoffName='azimuth.off',
               rlks=1,
               alks=1):

    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    #create topo
    planet = Planet(pname='Earth')
    topo = createGeo2rdr()
    topo.configure()

    #set parameters
    topo.slantRangePixelSpacing = rlks * 0.5 * SPEED_OF_LIGHT / frame.rangeSamplingRate
    topo.prf = frame.PRF / alks  #!!!should be changed to azimuth time interval for burst mode
    topo.radarWavelength = frame.radarWavelegth
    topo.orbit = frame.getOrbit()
    topo.width = int(frame.getNumberOfSamples() / rlks)
    topo.length = int(frame.getNumberOfLines() / alks)
    topo.demLength = demImage.length
    topo.demWidth = demImage.width
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1  #
    topo.numberAzimuthLooks = 1  # must be set to be 1
    #topo.lookSide = -1
    topo.lookSide = frame.getInstrument().getPlatform().pointingDirection
    topo.setSensingStart(frame.getSensingStart() +
                         datetime.timedelta(seconds=(alks - 1.0) / 2.0 *
                                            (1.0 / frame.PRF)))
    topo.rangeFirstSample = frame.startingRange + (rlks - 1.0) / 2.0 * (
        0.5 * SPEED_OF_LIGHT / frame.rangeSamplingRate)
    topo.dopplerCentroidCoeffs = [0.]  # we are using zero doppler geometry

    #set files
    topo.demImage = demImage
    topo.latImage = latImage
    topo.lonImage = lonImage
    topo.rangeOffsetImageName = rgoffName
    topo.azimuthOffsetImageName = azoffName

    #run it
    topo.geo2rdr()

    return
예제 #5
0
def runGeo2rdr(self):
    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    logger.info("Running geo2rdr")

    info = self._insar.loadProduct(self._insar.secondarySlcCropProduct)

    offsetsDir = self.insar.offsetsDirname
    os.makedirs(offsetsDir, exist_ok=True)

    grdr = createGeo2rdr()
    grdr.configure()

    planet = info.getInstrument().getPlatform().getPlanet()
    grdr.slantRangePixelSpacing = info.getInstrument().getRangePixelSize()
    grdr.prf = info.PRF  #info.getInstrument().getPulseRepetitionFrequency()
    grdr.radarWavelength = info.getInstrument().getRadarWavelength()
    grdr.orbit = info.getOrbit()
    grdr.width = info.getImage().getWidth()
    grdr.length = info.getImage().getLength()

    grdr.wireInputPort(name='planet', object=planet)
    grdr.lookSide = info.instrument.platform.pointingDirection

    grdr.setSensingStart(info.getSensingStart())
    grdr.rangeFirstSample = info.startingRange
    grdr.numberRangeLooks = 1
    grdr.numberAzimuthLooks = 1

    if self.insar.secondaryGeometrySystem.lower().startswith('native'):
        p = [x / info.PRF for x in info._dopplerVsPixel]
    else:
        p = [0.]

    grdr.dopplerCentroidCoeffs = p
    grdr.fmrateCoeffs = [0.]

    ###Input and output files
    grdr.rangeOffsetImageName = os.path.join(offsetsDir,
                                             self.insar.rangeOffsetFilename)
    grdr.azimuthOffsetImageName = os.path.join(
        offsetsDir, self.insar.azimuthOffsetFilename)

    latFilename = os.path.join(self.insar.geometryDirname,
                               self.insar.latFilename + '.full')
    lonFilename = os.path.join(self.insar.geometryDirname,
                               self.insar.lonFilename + '.full')
    heightFilename = os.path.join(self.insar.geometryDirname,
                                  self.insar.heightFilename + '.full')

    demImg = isceobj.createImage()
    demImg.load(heightFilename + '.xml')
    demImg.setAccessMode('READ')
    grdr.demImage = demImg

    latImg = isceobj.createImage()
    latImg.load(latFilename + '.xml')
    latImg.setAccessMode('READ')
    grdr.latImage = latImg

    lonImg = isceobj.createImage()
    lonImg.load(lonFilename + '.xml')
    lonImg.setAccessMode('READ')

    grdr.lonImage = lonImg
    grdr.outputPrecision = 'DOUBLE'

    grdr.geo2rdr()

    return
예제 #6
0
def geo2rdr(swath,
            track,
            latFile,
            lonFile,
            hgtFile,
            rangeOffsetFile,
            azimuthOffsetFile,
            numberRangeLooks=1,
            numberAzimuthLooks=1,
            multilookTimeOffset=True):
    import datetime
    import isceobj
    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    pointingDirection = {'right': -1, 'left': 1}

    latImage = isceobj.createImage()
    latImage.load(latFile + '.xml')
    latImage.setAccessMode('read')

    lonImage = isceobj.createImage()
    lonImage.load(lonFile + '.xml')
    lonImage.setAccessMode('read')

    hgtImage = isceobj.createDemImage()
    hgtImage.load(hgtFile + '.xml')
    hgtImage.setAccessMode('read')

    planet = Planet(pname='Earth')

    topo = createGeo2rdr()
    topo.configure()
    topo.slantRangePixelSpacing = numberRangeLooks * swath.rangePixelSize
    topo.prf = 1.0 / (numberAzimuthLooks * swath.azimuthLineInterval)
    topo.radarWavelength = track.radarWavelength
    topo.orbit = track.orbit
    topo.width = int(swath.numberOfSamples / numberRangeLooks)
    topo.length = int(swath.numberOfLines / numberAzimuthLooks)
    topo.demLength = hgtImage.length
    topo.demWidth = hgtImage.width
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1
    topo.numberAzimuthLooks = 1  #must be set to be 1
    topo.lookSide = pointingDirection[track.pointingDirection]
    if multilookTimeOffset == True:
        topo.sensingStart = swath.sensingStart + datetime.timedelta(
            seconds=(numberAzimuthLooks - 1.0) / 2.0 *
            swath.azimuthLineInterval)
        topo.rangeFirstSample = swath.startingRange + (
            numberRangeLooks - 1.0) / 2.0 * swath.rangePixelSize
    else:
        topo.setSensingStart(swath.sensingStart)
        topo.rangeFirstSample = swath.startingRange
    topo.dopplerCentroidCoeffs = [0.]  #we are using zero doppler geometry
    topo.demImage = hgtImage
    topo.latImage = latImage
    topo.lonImage = lonImage
    topo.rangeOffsetImageName = rangeOffsetFile
    topo.azimuthOffsetImageName = azimuthOffsetFile
    topo.geo2rdr()

    return
예제 #7
0
def runGeo2rdr(self):
    from zerodop.geo2rdr import createGeo2rdr
    from isceobj.Planet.Planet import Planet

    logger.info("Running geo2rdr")

    info = self.insar.slaveFrame
    slc = self.insar.formSLC2
    intImage = slc.slcImage

    topo = createGeo2rdr()
    topo.configure()

    planet = info.getInstrument().getPlatform().getPlanet()
    topo.slantRangePixelSpacing = info.getInstrument().getRangePixelSize()
    topo.prf = info.getInstrument().getPulseRepetitionFrequency()
    topo.radarWavelength = info.getInstrument().getRadarWavelength()
    topo.orbit = info.getOrbit()
    topo.width = intImage.getWidth()
    topo.length = intImage.getLength()
    topo.wireInputPort(name='planet', object=planet)
    topo.lookSide = info.instrument.platform.pointingDirection

    topo.setSensingStart(slc.slcSensingStart)
    topo.rangeFirstSample = slc.startingRange
    topo.numberRangeLooks = 1
    topo.numberAzimuthLooks = 1

    if 'native' in self.insar.slaveGeometrySystem.lower():
        print('Native doppler')

        dop = info._dopplerVsPixel[::-1]
        xx = np.linspace(0, (topo.width - 1), num=len(dop) + 1)
        x = (topo.rangeFirstSample - info.startingRange
             ) / topo.slantRangePixelSpacing + xx * topo.numberRangeLooks
        v = np.polyval(dop, x)
        p = np.polyfit(xx, v, len(dop) - 1)[::-1] / topo.prf
        p = list(p)

    else:
        print('Zero doppler')
        p = [0.]

    topo.dopplerCentroidCoeffs = p
    topo.fmrateCoeffs = [0.]

    ###Input and output files
    topo.rangeOffsetImageName = self.insar.rangeOffsetImageName
    topo.azimuthOffsetImageName = self.insar.azimuthOffsetImageName

    demImg = isceobj.createImage()
    demImg.load(self.insar.heightFilename + '.xml')
    demImg.setAccessMode('READ')
    topo.demImage = demImg

    latImg = isceobj.createImage()
    latImg.load(self.insar.latFilename + '.xml')
    latImg.setAccessMode('READ')
    topo.latImage = latImg

    lonImg = isceobj.createImage()
    lonImg.load(self.insar.lonFilename + '.xml')
    lonImg.setAccessMode('READ')

    topo.lonImage = lonImg

    topo.geo2rdr()

    return
예제 #8
0
def runCorrect(self):
    from zerodop.geo2rdr import createGeo2rdr
    logger.info("Running correct")

    info = self._insar.slaveFrame
    slc = self.insar.formSLC2

    intImage = self.insar.topoIntImage.clone()
    planet = info.instrument.platform.planet

    correct = createGeo2rdr()
    correct.configure()

    correct.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / info.rangeSamplingRate
    correct.prf = info.instrument.PRF
    correct.radarWavelength = info.instrument.radarWavelength
    correct.orbit = info.orbit
    correct.wireInputPort(name='planet', object=planet)
    correct.numberRangeLooks = self.insar.numberRangeLooks
    correct.numberAzimuthLooks = self.insar.numberAzimuthLooks
    correct.lookSide = info.instrument.platform.pointingDirection

    correct.fmrateCoeffs = [0.]
    correct.setSensingStart(slc.slcSensingStart + datetime.timedelta(
        seconds=0.5 * (self.insar.numberAzimuthLooks - 1) / correct.prf))
    correct.rangeFirstSample = slc.startingRange + 0.5 * (
        self.insar.numberRangeLooks - 1) * correct.slantRangePixelSpacing

    demImage = isceobj.createImage()
    demImage.load(self.insar.heightFilename + '.xml')
    demImage.setAccessMode('READ')

    latImage = isceobj.createImage()
    latImage.load(self.insar.latFilename + '.xml')
    latImage.setAccessMode('READ')

    lonImage = isceobj.createImage()
    lonImage.load(self.insar.lonFilename + '.xml')
    lonImage.setAccessMode('READ')

    correct.width = latImage.getWidth()
    correct.length = latImage.getLength()

    correct.demImage = demImage
    correct.latImage = latImage
    correct.lonImage = lonImage

    correct.rangeOffsetImageName = 'range.off'

    ####Compute the native doppler polynomial
    dop = info._dopplerVsPixel[::-1]
    xx = np.linspace(0, (slc.slcImage.width - 1), num=len(dop) + 1)
    x = (slc.startingRange -
         info.startingRange) / correct.slantRangePixelSpacing + xx
    v = np.polyval(dop, x)
    p = np.polyfit(xx, v, len(dop) - 1)[::-1]

    print(p)
    correct.dopplerCentroidCoeffs = list(p)

    correct.geo2rdr()

    flattenWithOffsets(intImage.filename, 'range.off',
                       self.insar.topophaseFlatFilename, info,
                       correct.numberRangeLooks)

    return correct