Exemplo n.º 1
0
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)

##############################################################################################


Exemplo n.º 5
0
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]
Exemplo n.º 6
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]
Exemplo n.º 7
0
##############################################################################################
# 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'