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)
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)