RSGISLib Zonal Stats Module¶
The zonal stats module provides functions to perform pixel-in-polygon or point-in-pixel analysis.
For undertaking a pixel-in-polygon analysis you need to consider the size of the polygons with respect to the size of the pixels being intersected.
Where the pixels are small with respect to the polygons so there is at least one pixel within the polygon then the best function to use is:
rsgislib.zonalstats.calcZonalBandStats
If the pixels are large with respect to the polygons then use the following function which intersects the polygon centroid.
rsgislib.zonalstats.calcZonalPolyPtsBandStats
If the pixel size in between and/or polygons are varied in size such that it is not certain that all polygons will contain a pixel then the following function will first attempt to intersect the polygon with the pixels and if there is not a pixel within the polygon then the centriod is used.
rsgislib.zonalstats.calcZonalBandStatsTestPolyPts
Alternatively, the other functions are slower to execute but have more options with respect to the method of intersection. The options for intersection are:
METHOD_POLYCONTAINSPIXEL = 0 # Polygon completely contains pixel
METHOD_POLYCONTAINSPIXELCENTER = 1 # Pixel center is within the polygon
METHOD_POLYOVERLAPSPIXEL = 2 # Polygon overlaps the pixel
METHOD_POLYOVERLAPSORCONTAINSPIXEL = 3 # Polygon overlaps or contains the pixel
METHOD_PIXELCONTAINSPOLY = 4 # Pixel contains the polygon
METHOD_PIXELCONTAINSPOLYCENTER = 5 # Polygon center is within pixel
METHOD_ADAPTIVE = 6 # The method is chosen based on relative areas of pixel and polygon.
METHOD_ENVELOPE = 7 # All pixels in polygon envelope chosen
METHOD_PIXELAREAINPOLY = 8 # Percent of pixel area that is within the polygon
METHOD_POLYAREAINPIXEL = 9 # Percent of polygon area that is within pixel
-
class
rsgislib.zonalstats.
ZonalAttributes
(minThreshold=None, maxThreshold=None, calcCount=False, calcMin=False, calcMax=False, calcMean=False, calcStdDev=False, calcMode=False, calcSum=False)¶ Object, specifying which stats should be calculated and minimum / maximum thresholds. This is passed to the pixelStats2SHP and pixelStats2TXT functions.
-
class
rsgislib.zonalstats.
ZonalBandAttributes
(band=0, basename='band', minThres=None, maxThres=None, calcCount=False, calcMin=False, calcMax=False, calcMean=False, calcStdDev=False, calcMode=False, calcMedian=False, calcSum=False)¶ Object, specifying which band, the band name and stats should be calculated and minimum / maximum thresholds. This is passed to the polyPixelStatsVecLyr function.
-
rsgislib.zonalstats.
calcZonalBandStats
(veclyr, valsimg, imgbandidx, minthres, maxthres, calcZonalBandStats, minfield=None, maxfield=None, meanfield=None, stddevfield=None, sumfield=None, countfield=None, modefield=None, medianfield=None)¶ A function which calculates zonal statistics for a particular image band. If you know that the pixels in the values image are small with respect to the polygons then use this function.
- Parameters
veclyr – OGR vector layer object containing the geometries being processed and to which the stats will be written.
valsimg – the values image
imgbandidx – the index (starting at 1) of the image band for which the stats will be calculated. If defined the no data value of the band will be ignored.
minthres – a lower threshold for values which will be included in the stats calculation.
maxthres – a upper threshold for values which will be included in the stats calculation.
out_no_data_val – output no data value if no valid pixels are within the polygon.
minfield – the name of the field for the min value (None or not specified to be ignored).
maxfield – the name of the field for the max value (None or not specified to be ignored).
meanfield – the name of the field for the mean value (None or not specified to be ignored).
stddevfield – the name of the field for the standard deviation value (None or not specified to be ignored).
sumfield – the name of the field for the sum value (None or not specified to be ignored).
countfield – the name of the field for the count (of number of pixels) value (None or not specified to be ignored).
modefield – the name of the field for the mode value (None or not specified to be ignored).
medianfield – the name of the field for the median value (None or not specified to be ignored).
-
rsgislib.zonalstats.
calcZonalBandStatsFile
(vecfile, veclyrname, valsimg, imgbandidx, minthres, maxthres, out_no_data_val, minfield=None, maxfield=None, meanfield=None, stddevfield=None, sumfield=None, countfield=None, modefield=None, medianfield=None)¶ A function which calculates zonal statistics for a particular image band. If you know that the pixels in the values image are small with respect to the polygons then use this function.
- Parameters
vecfile – input vector file
veclyrname – input vector layer within the input file which specifies the features and where the output stats will be written.
valsimg – the values image
imgbandidx – the index (starting at 1) of the image band for which the stats will be calculated. If defined the no data value of the band will be ignored.
minthres – a lower threshold for values which will be included in the stats calculation.
maxthres – a upper threshold for values which will be included in the stats calculation.
out_no_data_val – output no data value if no valid pixels are within the polygon.
minfield – the name of the field for the min value (None or not specified to be ignored).
maxfield – the name of the field for the max value (None or not specified to be ignored).
meanfield – the name of the field for the mean value (None or not specified to be ignored).
stddevfield – the name of the field for the standard deviation value (None or not specified to be ignored).
sumfield – the name of the field for the sum value (None or not specified to be ignored).
countfield – the name of the field for the count (of number of pixels) value (None or not specified to be ignored).
modefield – the name of the field for the mode value (None or not specified to be ignored).
medianfield – the name of the field for the median value (None or not specified to be ignored).
-
rsgislib.zonalstats.
calcZonalBandStatsTestPolyPts
(veclyr, valsimg, imgbandidx, minthres, maxthres, out_no_data_val, minfield=None, maxfield=None, meanfield=None, stddevfield=None, sumfield=None, countfield=None, modefield=None, medianfield=None)¶ A function which calculates zonal statistics for a particular image band. If unsure then use this function. This function tests whether 1 or more pixels has been found within the polygon and if not then the centroid use used to find a value for the polygon.
If you are unsure as to whether the pixels are small enough to be contained within all the polygons then use this function.
- Parameters
veclyr – OGR vector layer object containing the geometries being processed and to which the stats will be written.
valsimg – the values image
imgbandidx – the index (starting at 1) of the image band for which the stats will be calculated. If defined the no data value of the band will be ignored.
minthres – a lower threshold for values which will be included in the stats calculation.
maxthres – a upper threshold for values which will be included in the stats calculation.
out_no_data_val – output no data value if no valid pixels are within the polygon.
minfield – the name of the field for the min value (None or not specified to be ignored).
maxfield – the name of the field for the max value (None or not specified to be ignored).
meanfield – the name of the field for the mean value (None or not specified to be ignored).
stddevfield – the name of the field for the standard deviation value (None or not specified to be ignored).
sumfield – the name of the field for the sum value (None or not specified to be ignored).
countfield – the name of the field for the count (of number of pixels) value (None or not specified to be ignored).
modefield – the name of the field for the mode value (None or not specified to be ignored).
medianfield – the name of the field for the median value (None or not specified to be ignored).
-
rsgislib.zonalstats.
calcZonalBandStatsTestPolyPtsFile
(vecfile, veclyrname, valsimg, imgbandidx, minthres, maxthres, out_no_data_val, minfield=None, maxfield=None, meanfield=None, stddevfield=None, sumfield=None, countfield=None, modefield=None, medianfield=None)¶ A function which calculates zonal statistics for a particular image band. If unsure then use this function. This function tests whether 1 or more pixels has been found within the polygon and if not then the centroid use used to find a value for the polygon.
If you are unsure as to whether the pixels are small enough to be contained within all the polygons then use this function.
- Parameters
vecfile – input vector file
veclyrname – input vector layer within the input file which specifies the features and where the output stats will be written.
valsimg – the values image
imgbandidx – the index (starting at 1) of the image band for which the stats will be calculated. If defined the no data value of the band will be ignored.
minthres – a lower threshold for values which will be included in the stats calculation.
maxthres – a upper threshold for values which will be included in the stats calculation.
out_no_data_val – output no data value if no valid pixels are within the polygon.
minfield – the name of the field for the min value (None or not specified to be ignored).
maxfield – the name of the field for the max value (None or not specified to be ignored).
meanfield – the name of the field for the mean value (None or not specified to be ignored).
stddevfield – the name of the field for the standard deviation value (None or not specified to be ignored).
sumfield – the name of the field for the sum value (None or not specified to be ignored).
countfield – the name of the field for the count (of number of pixels) value (None or not specified to be ignored).
modefield – the name of the field for the mode value (None or not specified to be ignored).
medianfield – the name of the field for the median value (None or not specified to be ignored).
-
rsgislib.zonalstats.
calcZonalPolyPtsBandStats
(veclyr, valsimg, imgbandidx, outfield)¶ A funtion which extracts zonal stats for a polygon using the polygon centroid. This is useful when you are intesecting a low resolution image with respect to the polygon resolution.
- Parameters
veclyr – OGR vector layer object containing the geometries being processed and to which the stats will be written.
valsimg – the values image
imgbandidx – the index (starting at 1) of the image band for which the stats will be calculated. If defined the no data value of the band will be ignored.
outfield – output field name within the vector layer.
-
rsgislib.zonalstats.
calcZonalPolyPtsBandStatsFile
(vecfile, veclyrname, valsimg, imgbandidx, outfield)¶ A funtion which extracts zonal stats for a polygon using the polygon centroid. This is useful when you are intesecting a low resolution image with respect to the polygon resolution.
- Parameters
vecfile – input vector file
veclyrname – input vector layer within the input file which specifies the features and where the output stats will be written.
valsimg – the values image
imgbandidx – the index (starting at 1) of the image band for which the stats will be calculated. If defined the no data value of the band will be ignored.
outfield – output field name within the vector layer.
Points¶
These functions take a shapefile with point geomoetry and extract the value of the pixel the point falls within.
-
rsgislib.zonalstats.
pointValue2SHP
(inputimage, inputvector, outputvector, force, useBandNames=True)¶ Extract pixel value for each point in a shape file and output as a shapefile.
Where:
- Parameters
inputimage – is a string containing the name of the input image
inputvector – is a string containing the name of the input vector
outputvector – is a string containing the name of the output vector
force – is a bool, specifying whether to force removal of the output vector if it exists
useBandNames – is a bool, specifying whether to use the band names of the input dataset in the output file (if not uses b1, b2, etc.)
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputvector = './Vectors/injune_p142_stem_locations.shp' outputvector = './TestOutputs/injune_p142_stem_locations_stats.shp' removeExistingVector = True useBandNames = True zonalstats.pointValue2SHP(inputimage, inputvector, outputvector, removeExistingVector, useBandNames)
-
rsgislib.zonalstats.
pointValue2TXT
(inputimage, inputvector, outputtxt, useBandNames=True, shortenBandNames=True)¶ Extract pixel value for each point in a shape file and output as a CSV.
Where:
- Parameters
inputimage – is a string containing the name of the input image
inputvector – is a string containing the name of the input vector
outputtxt – is a string containing the name of the output text file
useBandNames – is a bool, specifying whether to use the band names of the input dataset in the output file (if not uses b1, b2, etc.)
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputvector = './Vectors/injune_p142_stem_locations.shp' outputtxt = './TestOutputs/injune_p142_stem_locations_stats.csv' useBandNames = True zonalstats.pointValue2TXT(inputimage, inputvector, outputtxt, useBandNames)
Polygons¶
These functions take a polygons as input and either calculate statistics from pixels falling within the polygon or save out all pixel values.
-
rsgislib.zonalstats.
pixelVals2TXT
(inputimage, inputvector, outputtxtBase, attribute, noProjWarning=False, pixelInPolyMethod=METHOD_POLYCONTAINSPIXELCENTER)¶ Extract pixel value for all pixels within a polygon and save a seperate CSV for each polygon in the shapefile.
Where:
- Parameters
inputimage – is a string containing the name of the input image.
inputvector – is a string containing the name of the input vector.
outputtxtBase – is a string containing the base name for output text files.
attribute – is a string specifying an identifier for each polygon to be used for the name of each output text file.
noProjWarning – is a bool, specifying whether to skip printing a warning if the vector and image have a different projections.
pixelInPolyMethod – is the method for determining if a pixel is included with a polygon of type rsgislib.zonalstats.METHOD_*.
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputvector = './Vectors/injune_p142_crowns_utm.shp' outputtxtbase = './TestOutputs/ZonalTXT/injune_p142_casi_sub_utm_txt' zonalstats.pixelVals2TXT(inputimage, inputvector, outputtxtBase, 'FID', True, zonalstats.METHOD_POLYCONTAINSPIXELCENTER)
-
rsgislib.zonalstats.
pixelStats2SHP
(inputimage, inputvector, outputvector, zonalattributes, force, useBandNames, noProjWarning=False, pixelInPolyMethod=METHOD_POLYCONTAINSPIXELCENTER)¶ Calculate statistics for pixels falling within each polygon in a shapefile output as a shapefile.
Where:
- Parameters
inputimage – is a string containing the name of the input image
inputvector – is a string containing the name of the input vector
outputvector – is a string containing the name of the output vector
ZonalAttributes – is an rsgislib.zonalstats.zonalattributes object that has attributes in line with rsgis::cmds::RSGISBandAttZStatsCmds * minThreshold, a float providing the minimum pixel value to include when calculating statistics. * maxThreshold, a float providing the maximum pixel value to include when calculating statistics. * calcCount, a bool specifying whether to report a count of pixels between thresholds. * calcMin, a bool specifying whether to report the minimum of pixels between thresholds. * calcMax, a bool specifying whether to report the maximum of pixels between thresholds. * calcMean, a bool specifying whether to report the mean of pixels between thresholds. * calcStdDev, a bool specifying whether to report the standard deviation of pixels between thresholds. * calcMode, a bool specifying whether to report the mode of pixels between thresholds (for integer datasets only). * calcSum, a bool specifying whether to report the sum of pixels between thresholds.
force – is a bool, specifying whether to force removal of the output vector if it exists
noProjWarning – is a bool, specifying whether to skip printing a warning if the vector and image have a different projections.
useBandNames – is a bool, specifying whether to use the band names of the input dataset in the output file (if not uses b1, b2, etc.)
pixelInPolyMethod – is the method for determining if a pixel is included with a polygon of type rsgislib.zonalstats.METHOD_*.
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputImage = './Rasters/injune_p142_casi_sub_utm.kea' inputVector = './Vectors/injune_p142_crowns_utm.shp' outputVector = './TestOutputs/injune_p142_casi_sub_utm_stats.shp' zonalattributes = zonalstats.ZonalAttributes(minThreshold=0, maxThreshold=10000, calcCount=True, calcMin=True, calcMax=True, calcMean=True, calcStdDev=True, calcMode=False, calcSum=True) zonalstats.pixelStats2SHP(inputImage, inputVector, outputVector, zonalattributes, True, True, True, zonalstats.METHOD_POLYCONTAINSPIXELCENTER)
-
rsgislib.zonalstats.
pixelStats2TXT
(inputimage, inputvector, outputtxt, zonalattributes, useBandNames, noProjWarning=False, pixelInPolyMethod=METHOD_POLYCONTAINSPIXELCENTER, shortenBandNames=True)¶ Calculate statistics for pixels falling within each polygon in a shapefile output as a CSV.
Where:
- Parameters
inputimage – is a string containing the name of the input image
inputvector – is a string containing the name of the input vector
outputtxt – is a string containing the name of the output text file
ZonalAttributes – is an rsgislib.rastergis.zonalattributes object that has attributes in line with rsgis::cmds::RSGISBandAttZStatsCmds * minThreshold, a float providing the minimum pixel value to include when calculating statistics. * maxThreshold, a float providing the maximum pixel value to include when calculating statistics. * calcCount, a bool specifying whether to report a count of pixels between thresholds. * calcMin, a bool specifying whether to report the minimum of pixels between thresholds. * calcMax, a bool specifying whether to report the maximum of pixels between thresholds. * calcMean, a bool specifying whether to report the mean of pixels between thresholds. * calcStdDev, a bool specifying whether to report the standard deviation of pixels between thresholds. * calcMode, a bool specifying whether to report the mode of pixels between thresholds (for integer datasets only). * calcSum, a bool specifying whether to report the sum of pixels between thresholds.
useBandNames – is a bool, specifying whether to use the band names of the input dataset in the output file (if not uses b1, b2, etc.)
noProjWarning – is a bool, specifying whether to skip printing a warning if the vector and image have a different projections.
pixelInPolyMethod – is the method for determining if a pixel is included with a polygon of type rsgislib.zonalstats.METHOD_*.
shortenBandNames – is a bool to specify whether the band names should be shorted (as with a shapefile) in creating the column name.
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputImage = './Rasters/injune_p142_casi_sub_utm.kea' inputVector = './Vectors/injune_p142_crowns_utm.shp' outputtxt = './TestOutputs/injune_p142_casi_sub_utm_stats.txt' zonalattributes = zonalstats.ZonalAttributes(minThreshold=0, maxThreshold=10000, calcCount=True, calcMin=True, calcMax=True, calcMean=True, calcStdDev=True, calcMode=False, calcSum=True) zonalstats.pixelStats2SHP(inputImage, inputVector, outputtxt, zonalattributes, True, True, zonalstats.METHOD_POLYCONTAINSPIXELCENTER, False)
-
rsgislib.zonalstats.
imageZoneToHDF
(inputimage, inputvector, outputHDF, noProjWarning=False, pixelInPolyMethod=METHOD_POLYCONTAINSPIXELCENTER)¶ Extract the all the pixel values for regions to a HDF5 file (1 column for each image band).
Where:
- Parameters
inputimage – is a string containing the name of the input image.
inputvector – is a string containing the name of the input vector.
outputHDF – is a string containing name of the output HDF file.
noProjWarning – is a bool, specifying whether to skip printing a warning if the vector and image have a different projections.
pixelInPolyMethod – is the method for determining if a pixel is included with a polygon of type rsgislib.zonalstats.METHOD_*.
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputvector = './Vectors/injune_p142_crowns_utm.shp' outputHDF = './TestOutputs/InjuneP142.hdf' zonalstats.imageZoneToHDF(inputimage, inputvector, outputHDF, True, zonalstats.METHOD_POLYCONTAINSPIXELCENTER)
-
rsgislib.zonalstats.
polyPixelStatsVecLyr
(inputimg=string, vecfile=string, veclyr=string, bandatts=list, pixpolymeth=rsgislib.zonalstats.METHOD_*, noprojwarn=boolean)¶ Calculate statistics for pixels that intersect (defined using the specified method) with a feature in the vector layer.
Where:
- Parameters
inputimg – is a string containing the name of the input image
vecfile – is a string containing the name of the input vector
veclyr – is a string containing the name of the input vector layer
bandatts – is a list of rsgislib.zonalstats.ZonalBandAttributes objects.
pixpolymeth – is the method for determining if a pixel is included with a polygon of type rsgislib.zonalstats.METHOD_*.
noprojwarn – is a bool, specifying whether to skip printing a warning if the vector and image have a different projections.
Endmember Analysis¶
These functions define extract a set of endmembers from an image file to be used for linear spectral unmixing (see imagecalc module).
-
rsgislib.zonalstats.
extractAvgEndMembers
(inputimage, inputvector, outputMatrixFile, pixelInPolyMethod=METHOD_POLYCONTAINSPIXELCENTER)¶ Extract the average endmembers per class which are saved as an appropriate matrix file to be used within the linear spectral unmixing commands. Each polygon defined is another endmember in the outputted matric file.
Where:
- Parameters
inputimage – is a string containing the name of the input image.
inputvector – is a string containing the name of the input vector.
outputMatrixFile – is a string containing name of the output matrix file.
pixelInPolyMethod – is the method for determining if a pixel is included with a polygon of type rsgislib.zonalstats.METHOD_*.
Example:
from rsgislib import zonalstats inputimage = './Rasters/injune_p142_casi_sub_utm.kea' inputvector = './Vectors/injune_p142_crowns_utm.shp' outputHDF = './TestOutputs/InjuneP142.hdf' zonalstats.imageZoneToHDF(inputimage, inputvector, outputHDF, True, zonalstats.METHOD_POLYCONTAINSPIXELCENTER)