Example #1
0
    def createImages(self):
        #the fortran code used to read in short, convert to float and convert back to short.
        #let's use the image api and the casters to do that. The image in input can be of any
        # comptible type
        inImage = self._dem.clone()
        #reads short and convert to float
        inImage.initImage(self.inputFilename,'read',self.width,self.dataType)
        #create a suitable caster from self.dataType to self._dataTypeBindings
        inImage.setCaster('read',self._dataTypeBindings)
        inImage.createImage()
        self._numberLines = inImage.getLength()
        outImage = Image()
        #if name not provided assume overwrite of input
        import random  
        if(not self.outputFilename):
            self.outputFilename = os.path.basename(self.inputFilename) + str(int(random.random()*100000)) #add 6 digit random number to input filename 
            self.overwriteInputFileFlag = True
        #manages float and writes out short
        outImage.initImage(self.outputFilename,'write',self.width,self.dataType)
        outImage.metadatalocation = self.outputFilename

        #create a suitable caster from self._dataTypeBindings to self.dataType
        outImage.setCaster('write',self._dataTypeBindings)
        outImage.createImage()
        return inImage,outImage
class BandExtractor(Filter):
#Use kwargs so each subclass can add parameters to the init function.  
#If nameOut is a string then create the image using the input image info,
#otherwise check if it is an image object and raise an exceptio if not.

    def init(self,imgIn,nameOut,**kwargs):
        if isinstance(nameOut,str):
            #create generic image
            self._imgOut = Image()
            width = imgIn.getWidth()
            accessmode = 'write'
            bands = imgIn.getBands()
            scheme = imgIn.getInterleavedScheme()
            typec = imgIn.getDataType()
            #For now extract one band at the time. Might extend to do
            #multiple bands
            band = 1
            #create output image of the same type as input
            self._imgOut.initImage(nameOut,accessmode,width,typec,band,scheme)
            self._imgOut.createImage()
            #if created here then need to finalize at the end
            self._outCreatedHere = True
        elif(nameOut,Image):
            self._imgOut = nameOut

        else:
            print("Error. The second argument of BandExtractor.init() must be a string or an Image object")
            raise TypeError


        imgIn.createImage() # just in case has not been run before. if it was run then it does not have any effect 
        accessorIn = imgIn.getImagePointer()
        accessorOut = self._imgOut.getImagePointer()
        FL.init(self._filter,accessorIn,accessorOut)
    
    def finalize(self):#extend base one
        if self._outCreatedHere: 
            self._imgOut.finalizeImage()
        Filter.finalize(self)
    def __getstate__(self):
        d = dict(self.__dict__)
        del d['logger']
        return d

    def __setstate__(self,d):
        self.__dict__.update(d)
        self.logger = logging.getLogger('isce.isceobj.ImgeFilter.BandExtractor')
        return
    
    def __init__(self,typeExtractor,band):
        Filter.__init__(self)
        self.logger = logging.getLogger('isce.isceobj.ImageFilter.BandExtractor')
        #get the filter C++ object pointer
        self._filter = FL.createFilter(typeExtractor,band)
        self._outCreatedHere = False
        self._imgOut = None 
Example #3
0
    def AmpcorPrep(self):
        """
		Prepare to be used in ampcor.
		Ampcor package in ISCE uses a special file pointer for accessing geotiff data.
		Therefore, we need ISCE module "Image" for this purpose.
		"""

        import isce
        from isceobj.Image.Image import Image

        # ==== need a vrt file
        # >= Python 3.4
        from pathlib import Path
        vrtpath = Path(self.fpath + '.vrt')
        if not vrtpath.is_file():
            print('Calling gdalbuildvrt...')
            gdalbuildvrt_cmd = 'gdalbuildvrt ' + self.fpath + '.vrt ' + self.fpath
            print(gdalbuildvrt_cmd)
            retcode = subprocess.call(gdalbuildvrt_cmd, shell=True)
            if retcode != 0:
                print(
                    'gdalbuildvrt failed. Please check if all the input parameters are properly set.'
                )
                sys.exit(retcode)
        # ====================

        obj = Image()
        obj.setFilename(self.fpath)
        obj.setWidth(self.GetRasterXSize())  # gdalinfo, first number
        if self.GetDataType() <= 3:
            obj.setDataType('SHORT')
        elif 4 <= self.GetDataType() <= 5:
            obj.setDataType('LONG')
        elif self.GetDataType() == 6:
            obj.setDataType('FLOAT')
        elif self.GetDataType() == 7:
            obj.setDataType('DOUBLE')  # SHORT, LONG, FLOAT, DOUBLE, etc
        else:
            obj.setDataType('CFLOAT')  # not totally right, may be wrong
        # obj.setBands(1)   # "self" requires a single band
        # obj.setAccessMode('read')
        obj.setCaster('read', 'FLOAT')  # fixed as float
        obj.createImage()
        self.iscepointer = obj
Example #4
0
class ComplexExtractor(Filter):
    """Extracts components (real, imaginary, magnitude, phase) from a complex datatype"""

    #Use kwargs so each subclass can add parameters to the init function.
    #If nameOut is a string then create the image using the input image info,
    #otherwise check if it is an image object and raise an exception if not.

    def init(self, imgIn, nameOut, **kwargs):
        """Method to pass the input and output image to the  filter"""
        # check if the output image nameOut is provided. If it is a string create the image here using
        # the input image as template
        if isinstance(nameOut, str):
            #create generic image
            self._imgOut = Image()
            width = imgIn.getWidth()
            accessmode = 'write'
            bands = imgIn.getBands()
            scheme = imgIn.getInterleavedScheme()
            typec = imgIn.getDataType()
            #The assumption is that the imgIn is complex. The single component is the imgIn data type without the C
            # for instace CREAL becomes REAL
            typeF = typec[1:]
            #create output image of the same type as input
            self._imgOut.initImage(nameOut, accessmode, width, typeF, bands,
                                   scheme)
            self._imgOut.createImage()
            #if created here then need to finalize at the end
            self._outCreatedHere = True
        elif (nameOut, Image):
            self._imgOut = nameOut

        else:
            print(
                "Error. The second argument of ComplexExtractor.init() must be a string or an Image object"
            )
            raise TypeError

        imgIn.createImage(
        )  # just in case has not been run before. if it was run then it does not have any effect
        accessorIn = imgIn.getImagePointer()
        accessorOut = self._imgOut.getImagePointer()
        FL.init(self._filter, accessorIn, accessorOut)

    def finalize(self):  #extend base one
        """Finalize filter baseclass and output accessor if created here and not passed"""
        if self._outCreatedHere:
            self._imgOut.finalizeImage()
        Filter.finalize(self)

    def __getstate__(self):
        d = dict(self.__dict__)
        del d['logger']
        return d

    def __setstate__(self, d):
        self.__dict__.update(d)
        self.logger = logging.getLogger(
            'isce.isceobj.ImageFilter.ComplexExtractor')
        return

    def __init__(self, typeExtractor, fromWhat):
        """Initialize the filter passing what is extracted and from what type of complex image"""
        Filter.__init__(self)
        self.logger = logging.getLogger(
            'isce.isceobj.ImageFilter.ComplexExtractor')
        #possible inputs
        #(MagnitudeExctractor,'cartesian')
        #(MagnitudeExctractor,'polar')
        #(PhaseExctractor,'cartesian')
        #(PhaseExctractor,'polar')
        #(RealExctractor,'cartesian')
        #(ImagExctractor,'cartesian')
        #(RealExctractor,'polar')
        #(ImagExctractor,'polar')
        #get the filter C++ object pointer calling the Filtermodule.cpp which calls the FilterFactory.cpp
        self._filter = FL.createFilter(typeExtractor, fromWhat)
        self._outCreatedHere = False
        self._imgOut = None
Example #5
0
import matplotlib.pyplot as plt

# import xml.etree.ElementTree as ET

def getImageSize(infile):
    ds = gdal.Open(infile + ".vrt")
    b = ds.GetRasterBand(1)
    return b.XSize, b.YSize


if __name__ == '__main__':
    listFile = "/media/jiechencyz/Experiments_1/P120_Lena_stackProcess/merged/interferograms/unw_list"
    with open(listFile, 'r') as fileHandle:
        try:
            for fileName in fileHandle:
                fileName = fileName.rstrip()
                imageWidth, imageLength = getImageSize(fileName)
                unw = ts.load_mmap(fileName, imageWidth, imageLength, quiet=True, map='BIL',
                                   nchannels=2, channel=2, conv=False)
                # print(unw[1000:1004, 1000:1005])
                # print(getImageSize(fileName))
        finally:
            fileHandle.close()
    obj = Image()
    obj.load(fileName + ".xml")
    obj.setAccessMode('read')
    obj.createImage()
    imageOut = obj.memMap('r', 1)
    plt.imshow(imageOut, cmap='jet', vmin=-60, vmax=-30)
    plt.colorbar()
    plt.show()