def StatsImage(self):		

			#Input files
			source = os.path.join(self.Folder,"*.tif")
			output = self.OutImage
			listImages = glob.glob(source)
			NumberOfImages = len(listImages)
			
			#Get properties images
			Type = gdal.GDT_Float32
			driver = gdal.GetDriverByName('GTiff')
			setup = gdal.Open(listImages[0],gdal.GA_ReadOnly)
			Xsize = setup.RasterXSize 
			YSize = setup.RasterYSize
			proj = setup.GetProjection()
			geo = setup.GetGeoTransform()
			
			#Create output image
			ImageOut = driver.Create(output,Xsize,YSize,1,Type,['COMPRESS=LZW'])
			ImageOut.SetProjection(proj)
			ImageOut.SetGeoTransform(geo)			
			
			#Create log error file
			LogFolder = os.path.join(os.path.dirname(output),"Log.txt",)
			LogError = open(LogFolder,'w')
			
			BadImages = utils.verifyImageDimension(listImages)
			typeSt = self.Stats
			if BadImages == 0:
				
				for i in xrange(YSize):
					aCom = numpy.zeros((NumberOfImages,1,Xsize))
									
					for j in xrange(len(listImages)):
						GetImages = gdal.Open(listImages[j],gdal.GA_ReadOnly)
						band = GetImages.GetRasterBand(1).ReadAsArray(0,i,Xsize,1).astype(numpy.float16)
									
						#Crop Nodata Values
						if type(self.NoData) is float:
							band = numpy.where(band == self.NoData,None,band)	
						aCom[j] = band
						band = None

					StatsBand = self.CalcStats(self.Stats,aCom)	
					ImageOut.GetRasterBand(1).WriteArray(StatsBand,0,i)

					if not self.NoData == '':
						ImageOut.GetRasterBand(1).SetNoDataValue(self.NoData)
										
					aCom = None
					StatsBand = None
					
					perc = int(100.00*(float(i+1)/float(YSize)))
					self.progress.emit(perc)
									
				self.finished.emit(BadImages)
			else:
				self.finished.emit(BadImages)
    def SavitzkyGolayFilter(self):

        #Input files
        source = os.path.join(self.inFolder, "*.tif")
        desti = self.outFolder
        listImages = sorted(glob.glob(source))
        NumberOfImages = len(listImages)

        #Get properties images
        Type = gdal.GDT_Float32
        driver = gdal.GetDriverByName('GTiff')
        setup = gdal.Open(listImages[0], gdal.GA_ReadOnly)
        Xsize = setup.RasterXSize
        YSize = setup.RasterYSize
        proj = setup.GetProjection()
        geo = setup.GetGeoTransform()
        listImageOut = []

        #Create output's images
        for li in listImages:
            output = os.path.join(self.outFolder, os.path.basename(li))
            imageOut = driver.Create(output, Xsize, YSize, 1, Type,
                                     ['COMPRESS=LZW'])
            imageOut.SetProjection(proj)
            imageOut.SetGeoTransform(geo)
            listImageOut.append(imageOut)

        BadImages = utils.verifyImageDimension(listImages)
        if BadImages == 0:

            for i in xrange(YSize):
                print i
                aCom = numpy.zeros((NumberOfImages, 1, Xsize), numpy.float32)
                for j in xrange(len(listImages)):
                    GetImages = gdal.Open(listImages[j], gdal.GA_ReadOnly)
                    aCom[j] = GetImages.GetRasterBand(1).ReadAsArray(
                        0, i, Xsize, 1)

                for k in xrange(Xsize):
                    signal = aCom[numpy.array(range(NumberOfImages)), 0, k]
                    if numpy.max(signal) != numpy.min(signal):
                        savGol = savgol_filter(signal, self.WindowSize,
                                               self.Polynomial)
                        aCom[numpy.array(range(NumberOfImages)), 0, k] = savGol

                for l in xrange(len(listImages)):
                    listImageOut[l].GetRasterBand(1).WriteArray(aCom[l], 0, i)

                perc = int(100.00 * (float(i + 1) / float(YSize)))
                aCom = None
                self.progress.emit(perc)
            self.finished.emit(0)
        else:
            self.finished.emit(BadImages)
	def SavitzkyGolayFilter(self):		

			#Input files
			source = os.path.join(self.inFolder,"*.tif")
			desti = self.outFolder
			listImages = sorted(glob.glob(source))
			NumberOfImages = len(listImages)
		
			#Get properties images
			Type = gdal.GDT_Float32
			driver = gdal.GetDriverByName('GTiff')
			setup = gdal.Open(listImages[0],gdal.GA_ReadOnly)
			Xsize = setup.RasterXSize 
			YSize = setup.RasterYSize
			proj = setup.GetProjection()
			geo = setup.GetGeoTransform()
			listImageOut = []
			
			#Create output's images
			for li in listImages:				
				output = os.path.join(self.outFolder,os.path.basename(li))
				imageOut = driver.Create(output,Xsize,YSize,1,Type,['COMPRESS=LZW'])
				imageOut.SetProjection(proj)
				imageOut.SetGeoTransform(geo)
				listImageOut.append(imageOut)			
						
			BadImages = utils.verifyImageDimension(listImages)
			if BadImages == 0:
						
				for i in xrange(YSize):
					print i
					aCom = numpy.zeros((NumberOfImages,1,Xsize),numpy.float32)					
					for j in xrange(len(listImages)):
						GetImages = gdal.Open(listImages[j],gdal.GA_ReadOnly)
						aCom[j] = GetImages.GetRasterBand(1).ReadAsArray(0,i,Xsize,1)																	
					
					for k in xrange(Xsize):
						signal = aCom[numpy.array(range(NumberOfImages)),0,k]
						if numpy.max(signal) != numpy.min(signal):
							savGol = savgol_filter(signal,self.WindowSize,self.Polynomial)
							aCom[numpy.array(range(NumberOfImages)),0,k] = savGol																		
							
					for l in xrange(len(listImages)):						
						listImageOut[l].GetRasterBand(1).WriteArray(aCom[l],0,i)					
						
					perc = int(100.00*(float(i+1)/float(YSize)))					
					aCom = None			
					self.progress.emit(perc)
				self.finished.emit(0)
			else:
				self.finished.emit(BadImages)
Beispiel #4
0
	def HagensFilterCalc(self):		
			
			BadImages = utils.verifyImageDimension(self.inFolder)							
			if BadImages == 0:
				
				#Get properties images
				Type = gdal.GDT_Float32
				driver = gdal.GetDriverByName('GTiff')
				setup = gdal.Open(self.inFolder[0],gdal.GA_ReadOnly)
				Xsize = setup.RasterXSize 
				YSize = setup.RasterYSize
				proj = setup.GetProjection()
				geo = setup.GetGeoTransform()
				listImageOut = []				
				
				#Create output's images
				for li in self.inFolder:				
					output = os.path.join(self.outFolder,os.path.basename(li))
					imageOut = driver.Create(output,Xsize,YSize,1,Type,['COMPRESS=LZW'])
					imageOut.SetProjection(proj)
					imageOut.SetGeoTransform(geo)
					listImageOut.append(imageOut)										
				
				#Create typical year
				tYear = os.path.join(self.outFolder,'TypicalYear.tif')
				typicalYearImage = driver.Create(tYear,Xsize,YSize,self.Composite,Type,['COMPRESS=LZW'])
				typicalYearImage.SetProjection(proj)
				typicalYearImage.SetGeoTransform(geo)
				
				#Create images Quality pixels - Used in Create typical year
				iQuality = os.path.join(self.outFolder,'QualityTypicalYear.tif')
				imageQuality = driver.Create(iQuality,Xsize,YSize,self.Composite,Type,['COMPRESS=LZW'])
				imageQuality.SetProjection(proj)
				imageQuality.SetGeoTransform(geo)
				
				NumberOfImages = len(self.inFolder)	
				
				#Process BIL
				for i in xrange(YSize):					
					iArray = numpy.zeros((NumberOfImages,1,Xsize),numpy.float32)					
					iFlag = numpy.zeros((NumberOfImages,1,Xsize),numpy.byte)						
										
					#Get Values in Image
					for j in xrange(len(self.inFolder)):
						
						GetImages = gdal.Open(self.inFolder[j],gdal.GA_ReadOnly)
						GetImagesFlags = gdal.Open(self.inFlag[j],gdal.GA_ReadOnly)							
						iArray[j] = GetImages.GetRasterBand(1).ReadAsArray(0,i,Xsize,1)																							
						iFlag[j] = GetImagesFlags.GetRasterBand(1).ReadAsArray(0,i,Xsize,1) 	
					
					#Products Hagens Filter
					typicalYear = HagensFilter_tools.AveregeYearDoy(iArray,iFlag,self.Composite,0,Xsize)[0]
					arrayQA = HagensFilter_tools.AveregeYearDoy(iArray,iFlag,self.Composite,0,Xsize)[1]
					devAveregeAnual	= HagensFilter_tools.DevAveregeAnual(iArray,iFlag,self.Composite,typicalYear,0,Xsize)	
					devNeighborhoodDay = HagensFilter_tools.DevNeighborhoodDay(iArray,iFlag,0,Xsize)
					devNeighborhoodAnual = HagensFilter_tools.DevNeighborhoodAnual(iArray,iFlag,self.Composite,0,Xsize)	
					fillGaps = HagensFilter_tools.FillGaps(iArray,iFlag,self.Composite,typicalYear,devAveregeAnual,devNeighborhoodDay,devNeighborhoodAnual,0,Xsize)

					#Update Typical Year
					for k in xrange(int(self.Composite)):
						
						typicalYearImage.GetRasterBand(k+1).WriteArray(typicalYear[k],0,i)
						imageQuality.GetRasterBand(k+1).WriteArray(arrayQA[k],0,i)

					#Update Hagens Filter
					for l in xrange(len(self.inFolder)):						
						listImageOut[l].GetRasterBand(1).WriteArray(fillGaps[l],0,i)																		
						
					perc = int(100.00*(float(i+1)/float(YSize)))					
					iArray = None			
					iFlag = None
					
					self.progress.emit(perc)
				
				self.finished.emit(0)
			else:
				self.finished.emit(BadImages)
    def StatsImage(self):

        #Input files
        source = os.path.join(self.Folder, "*.tif")
        output = self.OutImage
        listImages = glob.glob(source)
        NumberOfImages = len(listImages)

        #Get properties images
        Type = gdal.GDT_Float32
        driver = gdal.GetDriverByName('GTiff')
        setup = gdal.Open(listImages[0], gdal.GA_ReadOnly)
        Xsize = setup.RasterXSize
        YSize = setup.RasterYSize
        proj = setup.GetProjection()
        geo = setup.GetGeoTransform()

        #Create output image
        ImageOut = driver.Create(output, Xsize, YSize, 1, Type,
                                 ['COMPRESS=LZW'])
        ImageOut.SetProjection(proj)
        ImageOut.SetGeoTransform(geo)

        #Create log error file
        LogFolder = os.path.join(
            os.path.dirname(output),
            "Log.txt",
        )
        LogError = open(LogFolder, 'w')

        BadImages = utils.verifyImageDimension(listImages)
        typeSt = self.Stats
        if BadImages == 0:

            for i in xrange(YSize):
                aCom = numpy.zeros((NumberOfImages, 1, Xsize))

                for j in xrange(len(listImages)):
                    GetImages = gdal.Open(listImages[j], gdal.GA_ReadOnly)
                    band = GetImages.GetRasterBand(1).ReadAsArray(
                        0, i, Xsize, 1).astype(numpy.float16)

                    #Crop Nodata Values
                    if type(self.NoData) is float:
                        band = numpy.where(band == self.NoData, None, band)
                    aCom[j] = band
                    band = None

                StatsBand = self.CalcStats(self.Stats, aCom)
                ImageOut.GetRasterBand(1).WriteArray(StatsBand, 0, i)

                if not self.NoData == '':
                    ImageOut.GetRasterBand(1).SetNoDataValue(self.NoData)

                aCom = None
                StatsBand = None

                perc = int(100.00 * (float(i + 1) / float(YSize)))
                self.progress.emit(perc)

            self.finished.emit(BadImages)
        else:
            self.finished.emit(BadImages)