def attribute_segments(listInputs): dataStack = listInputs[0]# data with values habFile = listInputs[1] # data with habitat codes clumpsFile = listInputs[2] # segments # Populate with stats, so it can be read for the RAT rastergis.populateStats(dataStack) rastergis.populateStats(clumpsFile) rastergis.populateStats(habFile) ratutils.populateImageStats(dataStack, clumpsFile, calcMean=True) # Convert training data to RAT!!! codeStats = [] #list() codeStats.append(rastergis.BandAttStats(band=1, minField='Class')) rastergis.populateRATWithStats(habFile, habFile, codeStats) # Attribute segments with class: yes, so I can compare later !! rastergis.strClassMajority(clumpsFile, habFile, 'Class', 'Class', False)
############################################################################################## # Shepherd segmentation - this output will be used in second script to run classifier ############################################################################################## print('Performing the segmentation...') outputClumps=inputImage.replace('.tif','_clumps2.kea') outputMeanImg=inputImage.replace('.tif','_clumps2_mean.kea') segutils.runShepherdSegmentation(inputImage, outputClumps, outputMeanImg, minPxls=100) bandList=['VV','VH','VVdivVH'] rsgislib.imageutils.setBandNames(outputMeanImg, bandList) rastergis.populateStats(outputClumps, True, True, True, 1) rastergis.populateStats(outputMeanImg, True, True, True, 1) clumps=outputClumps # rename clumps image ratutils.populateImageStats(inputImage, clumps, calcMin=True,calcMax=True,calcMean=True, calcStDev=True) # add radar stats ############################################################################################## # add global urban footprint stats gufSnap=guf.split('.')[0]+'_'+inputImage.split('/')[-1].split('_')[4]+'.tif' inRefImg=clumps # base raster to snap to gdalFormat = 'GTiff' rsgislib.imageutils.resampleImage2Match(inRefImg, guf, gufSnap, gdalFormat, interpMethod='nearestneighbour', datatype=None) # perform resampling/snap bandList=['guf'] rsgislib.imageutils.setBandNames(gufSnap, bandList) ratutils.populateImageStats(gufSnap, clumps, calcMax=True) # add urban footprint stats # remove the intermediate snapped guf image try: os.remove(gufSnap)
print('Performing the segmentation...') segutils.runShepherdSegmentation(inputImg, outputClumps, outputMeanImg, minPxls=100) gdalformat = 'KEA' # rsgislib.segmentation.generateRegularGrid(inputImg, outputClumps, gdalformat, 1, 1) rastergis.populateStats(outputClumps, True, True, True, 1) bandList = ['VV', 'VH', 'VVdivVH'] rsgislib.imageutils.setBandNames(inputImg, bandList) rsgislib.imageutils.setBandNames(outputMeanImg, bandList) rastergis.populateStats(outputMeanImg, True, True, True, 1) # populate RAT with mean stats from S1 clumps = outputClumps # rename clumps image ratutils.populateImageStats(inputImg, clumps, calcMean=True, calcStDev=True) # populate clumps with training data print('Populating clumps with stats...') classesDict = dict() classesDict['Water'] = [ 1, '/Users/Andy/Documents/Zambia/RemoteSensing/WB_classification/Supporting_data/global_surface_water/watermask_barotseland_m18dB_20170704.shp' ] tmpPath = './temp' classesIntCol = 'ClassInt' classesNameCol = 'ClassStr' ratutils.populateClumpsWithClassTraining(clumps, classesDict, tmpPath, classesIntCol, classesNameCol) #
outputMeanImg = inputImage.split('.')[0]+'_clust5_clumps2_mean.kea' segutils.runShepherdSegmentation(inputImage, outputClumps, outputMeanImg, minPxls=100, numClusters=5) # set output band names bandList=['VV','VH','VVdivVH'] #rsgislib.imageutils.setBandNames(inputImage, bandList) rsgislib.imageutils.setBandNames(outputMeanImg, bandList) # rastergis.populateStats(outputMeanImg, True, True, True, 1) # populate RAT with mean stats from S1 clumps=outputClumps # rename clumps image ratutils.populateImageStats(inputImage, clumps, calcMin=True,calcMax=True,calcMean=True, calcStDev=True) ############################################################################################## # snap the sand exclusion layer and populate to RAT bandList=['SEL'] rsgislib.imageutils.setBandNames(sand_exclusion, bandList) sand_exclusion_snap=sand_exclusion.replace('.kea','_snapped.kea') gdalFormat = 'KEA' inRefImg=inputImage rsgislib.imageutils.resampleImage2Match(inRefImg, sand_exclusion, sand_exclusion_snap, gdalFormat, interpMethod='nearestneighbour', datatype=None) # perform resampling/snap ratutils.populateImageStats(sand_exclusion_snap, clumps, calcMax=True,calcMean=True) ##############################################################################################
for clumps in listFiles: try: print('') print('Processing: ' + clumps) #clumps=listFiles[0] outImage = clumps.replace('.kea', '_erf_clumptrain_mode_sel.tif') print('') # print('SEL: ' + sel) # print('clumps: ' + clumps) print('') ratutils.populateImageStats(sel, clumps, calcMax=True, calcMean=True, calcMin=True) # add SEL statistics to RAT ratutils.populateImageStats(guf, clumps, calcMax=True) # add SEL statistics to RAT #ratutils.populateImageStats(waterPerm,clumps,calcMean=True) # add water permanance statistics to RAT # Open RAT ratDataset = gdal.Open(clumps, gdal.GA_Update) data = [] # Read in data from class_cert and sel columns data.append(rat.readColumn(ratDataset, 'OutClass_mode_cert')) data.append(rat.readColumn(ratDataset, 'SELMax')) data.append(rat.readColumn(ratDataset, 'gufMax')) mode_cert = data[0]
noStretch=True, # Issue when this is false noStats=True, # Issue when this is false numClusters=60, minPxls=25, distThres=10, sampling=100, kmMaxIter=200) # ------------------------------------------------- # # Image statistics print('Calculating image statistics...') # Spectral stats rastergis.populateStats(segments_fn) ratutils.populateImageStats( stan_rast_fn, segments_fn, calcMean=True, calcMin=True, calcMax=True, calcStDev=True) # populates clumps file with stats # reading in RAT to add to segment_rat = gdal.Open( segments_fn, gdal.GA_Update) # Read in segments raster as gdal segment_ds = segment_rat.GetRasterBand( 1).GetDefaultRAT() # Read in RAT band = segment_rat.GetRasterBand( 1).ReadAsArray() # read in segment raster band, with seg ids band_data = np.dstack(band) segment_ids = np.unique(band) # extract seg ids # ------------------------------------ # # create list of object stats, where each row is an object ro1[1] = [1,2,3,4,5]
############################################################################################## # add global urban footprint stats gufSnap = guf.split('.')[0] + '_' + inputImage.split('_')[4] + '.tif' inRefImg = clumps # base raster to snap to gdalFormat = 'GTiff' rsgislib.imageutils.resampleImage2Match( inRefImg, guf, gufSnap, gdalFormat, interpMethod='nearestneighbour', datatype=None) # perform resampling/snap bandList = ['guf'] rsgislib.imageutils.setBandNames(gufSnap, bandList) ratutils.populateImageStats(gufSnap, clumps, calcMax=True) # add urban footprint stats # remove the intermediate snapped guf image try: os.remove(gufSnap) except Exception: pass ############################################################################################## # Extracting training data masks ############################################################################################## waterSnap = globalWater.split('.')[0] + '_' + inputImage.split( '_')[4] + '_clump.tif' inRefImg = inputImage # base raster to snap to gdalFormat = 'GTiff'