RSGISLib Image Utilities Module

The imageutils module contains general utilities for applying to images.

class rsgislib.imageutils.ImageBandInfo(fileName=None, name=None, bands=None)

Create a list of these objects to pass to the extractZoneImageBandValues2HDF function

Parameters
  • fileName – is the input image file name and path.

  • name – is a name associated with this layer - doesn’t really matter what you use but needs to be unique; this is used as a dict key in some functions.

  • bands – is a list of image bands within the fileName to be used for processing (band numbers start at 1).

  • fileName – is the input image file name and path.

  • name – is a name associated with this layer - doesn’t really matter what you use but needs to be unique; this is used as a dict key in some functions.

  • bands – is a list of image bands within the fileName to be used for processing (band numbers start at 1).

class rsgislib.imageutils.RSGISTimeseriesFillInfo(year=1900, day=0, compImg=None, imgRef=None, outRef=False)

Create a list of these objects to pass to the fillTimeSeriesGaps function

Parameters
  • year – year the composite represents.

  • day – the (nominal) day within the year the composite represents (a value of zero and day will not be used)

  • compImg – The input compsite image which has been generated.

  • imgRef – The reference layer (e.g., from createMaxNDVIComposite or createMaxNDVINDWICompositeLandsat) with zero for no data regions

  • outRef – A boolean variable specify which layer a fill reference layer is to be produced.

  • year – year the composite represents.

  • day – the (nominal) day within the year the composite represents (a value of zero and day will not be used)

  • compImg – The input compsite image which has been generated.

  • imgRef – The reference layer (e.g., from createMaxNDVIComposite or createMaxNDVINDWICompositeLandsat) with zero for no data regions

  • outRef – A boolean variable specify which layer a fill reference layer is to be produced.

class rsgislib.imageutils.SharpBandInfo(band=None, status=None, name=None)

Create a list of these objects to pass to the sharpenLowResBands function.

Parameters
  • band – is the band number (band numbering starts at 1).

  • status – needs to be either rsgislib.SHARP_RES_IGNORE, rsgislib.SHARP_RES_LOW or rsgislib.SHARP_RES_HIGH lowres bands will be sharpened using the highres bands and ignored bands will just be copied into the output image.

  • name – is a name associated with this image band - doesn’t really matter what you put in here.

  • band – is the band number (band numbering starts at 1).

  • status – needs to be either ‘ignore’, ‘lowres’ or ‘highres’ - lowres bands will be sharpened using the highres bands and ignored bands will just be copied into the output image.

  • name – is a name associated with this image band - doesn’t really matter what you put in here.

Image Stats and Pyramids

rsgislib.imageutils.popImageStats(image, usenodataval=True, nodataval=0, calcpyramids=True, pyscales=list)

Calculate the image statistics and build image pyramids populating the image file.

Where:

Parameters
  • image – is a string containing the name of the input file

  • usenodataval – is a boolean stating whether the no data value is to be used (default=True).

  • nodataval – is a floating point value to be used as the no data value (default=0.0).

  • calcpyramids – is a boolean stating whether image pyramids should be calculated (default=True).

  • pyscales – is a list which allows the levels of the image pyramid to be specified. If not provided then levels automatically calculated.

Example:

from rsgislib import imageutils
inputImage = './TestOutputs/injune_p142_casi_sub_utm.kea'
imageutils.popImageStats(inputImage,True,0.,True)
# OR Define the pyramids levels.
imageutils.popImageStats(inputImage,True,0.,True, [4,8,16,32,64,128])
rsgislib.imageutils.combineImageOverviews(base=string, images=list, pyscales=list)

A function to combine (mosaic) the image overviews (pyramids) from the list of input images and add them to the base image, enables pyramids to be created using a tiled processing chain for large images. Note. For small images use rsgislib.imageutils.popImageStats.

Where:

Parameters
  • base – is a string containing the name of the input image file the overviews will be added to

  • images – is a list of input images that have the same number of bands and overviews and are within the extent of the base image.

  • pyscales – is a list specifying the scales (levels) of the pyramids which will be defined in the base image (Note. the input images need to have the same pyramids scales; use rsgislib.imageutils.popImageStats).

Example:

from rsgislib import imageutils
baseImage = './TestOutputs/injune_p142_casi_sub_utm.kea'
imgTiles = ['./TestOutputs/injune_p142_casi_sub_utm_tile1.kea', './TestOutputs/injune_p142_casi_sub_utm_tile2.kea']
imageutils.combineImageOverviews(baseImage, imgTiles, [4,8,16,32,64,128])

Projection

rsgislib.imageutils.assignProj(inputImage, wktString, wktFile)

Assign a projection to the input GDAL image file.

Where:

Parameters
  • inputImage – is a string containing the name of the input file

  • wktString – is the wkt string to be assigned to the image. If None then it will be read from the wktStringFile.

  • wktFile – is a file path to a text file containing the WKT string to be assigned. This is ignored if wktString is not None.

Example:

from rsgislib import imageutils
wktString = '''PROJCS["WGS 84 / UTM zone 55S",
 GEOGCS["WGS 84",
     DATUM["WGS_1984",
         SPHEROID["WGS 84",6378137,298.257223563,
             AUTHORITY["EPSG","7030"]],
         AUTHORITY["EPSG","6326"]],
     PRIMEM["Greenwich",0],
     UNIT["degree",0.0174532925199433],
     AUTHORITY["EPSG","4326"]],
 PROJECTION["Transverse_Mercator"],
 PARAMETER["latitude_of_origin",0],
 PARAMETER["central_meridian",147],
 PARAMETER["scale_factor",0.9996],
 PARAMETER["false_easting",500000],
 PARAMETER["false_northing",10000000],
 UNIT["metre",1,
     AUTHORITY["EPSG","9001"]],
 AUTHORITY["EPSG","32755"]]'''
inputImage = './TestOutputs/injune_p142_casi_sub_utm.kea'
imageutils.assignProj(inputImage, wktString)
rsgislib.imageutils.assignSpatialInfo(inputImage, tlX, tlY, resX, resY, rotX, rotY)

Assign the spatial information to an input GDAL image file.

Where:

Parameters
  • inputImage – is a string containing the name and path of the input file

  • tlX – is a double representing the top left X coordinate of the image.

  • tlY – is a double representing the top left Y coordinate of the image.

  • resX – is a double representing X resolution of the image.

  • resY – is a double representing Y resolution of the image.

  • rotX – is a double representing X rotation of the image.

  • rotY – is a double representing Y rotation of the image.

rsgislib.imageutils.copyProjFromImage(inputImage, refImage)

Copy the projection from a reference image to an input GDAL image file.

Where:

Parameters
  • inputImage – is a string containing the name and path of the input file

  • refImage – is a string containing the name and path of the reference image.

rsgislib.imageutils.copySpatialAndProjFromImage(inputImage, refImage)

Copy the spatial information and projection from a reference image to an input GDAL image file.

Where:

Parameters
  • inputImage – is a string containing the name and path of the input file

  • refImage – is a string containing the name and path of the reference image.

rsgislib.imageutils.resampleImage2Match(inRefImg, inProcessImg, outImg, gdalformat, interpMethod, datatype=None, noDataVal=None, multicore=False)

A utility function to resample an existing image to the projection and/or pixel size of another image.

Where:

Parameters
  • inRefImg – is the input reference image to which the processing image is to resampled to.

  • inProcessImg – is the image which is to be resampled.

  • outImg – is the output image file.

  • gdalformat – is the gdal format for the output image.

  • interpMethod – is the interpolation method used to resample the image [bilinear, lanczos, cubicspline, nearestneighbour, cubic, average, mode]

  • datatype – is the rsgislib datatype of the output image (if none then it will be the same as the input file).

  • multicore – use multiple processing cores (Default = False)

rsgislib.imageutils.reprojectImage(inputImage, outputImage, outWKT, gdalformat='KEA', interp='cubic', inWKT=None, noData=0.0, outPxlRes='image', snap2Grid=True, multicore=False, gdal_options=[])

This function provides a tool which uses the gdalwarp function to reproject an input image. When you want an simpler interface use the rsgislib.imageutils.gdal_warp function. This handles more automatically.

Where:

Parameters
  • inputImage – the input image name and path

  • outputImage – the output image name and path

  • outWKT – a WKT file representing the output projection

  • gdalformat – the output image file format (Default is KEA)

  • interp – interpolation algorithm. Options are: near, bilinear, cubic, cubicspline, lanczos, average, mode. (Default is cubic)

  • inWKT – if input image is not well defined this is the input image projection as a WKT file (Default is None, i.e., ignored)

  • noData – float representing the not data value (Default is 0.0)

  • outPxlRes – three inputs can be provided. 1) ‘image’ where the output resolution will match the input (Default is image). 2) ‘auto’ where an output resolution maintaining the image size of the input image will be used. You may consider using rsgislib.imageutils.gdal_warp instead of this option. 3) provide a floating point value for the image resolution (note. pixels will be sqaure)

  • snap2Grid – is a boolean specifying whether the TL pixel should be snapped to a multiple of the pixel resolution (Default is True).

  • nCores – the number of processing cores available for processing (-1 is all cores: Default=-1)

  • gdal_options – GDAL file creation options e.g., [“TILED=YES”, “COMPRESS=LZW”, “BIGTIFF=YES”]

rsgislib.imageutils.getWKTProjFromImage(inImg)

A function which returns the WKT string representing the projection of the input image.

Parameters

inImg – input image from which WKT string will be read.

Mosaic

rsgislib.imageutils.createImageMosaic(inputimagelist, outputimage, backgroundVal, skipVal, skipBand, overlapBehaviour, gdalformat, datatype)

Create mosaic from list of input images.

Where

Parameters
  • inputimagelist – is a list of input images.

  • outputimage – is a string containing the name of the output mosaic

  • backgroundVal – is a float providing the background (nodata) value for the mosaic

  • skipVal – is a float providing the value to be skipped (nodata values) in the input images

  • skipBand – is an integer providing the band to check for skipVal

  • overlapBehaviour – is an integer specifying the behaviour for overlaping regions * 0 - Overwrite * 1 - Overwrite if value of new pixel is lower (minimum) * 2 - Overwrite if value of new pixel is higher (maximum)

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

import rsgislib
from rsgislib import imageutils
import glob

# Search for all files with the extension 'kea'
inputList = glob.glob('./TestOutputs/Tiles/*.kea')
outImage = './TestOutputs/injune_p142_casi_sub_utm_mosaic.kea'
backgroundVal = 0.
skipVal = 0.
skipBand = 1
overlapBehaviour = 0
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32FLOAT
imageutils.createImageMosaic(inputList, outImage, backgroundVal, skipVal, skipBand, overlapBehaviour, gdalformat, datatype)
rsgislib.imageutils.includeImages(baseImage, inputImages, inputBands=None, skipVal=None)

Create mosaic from list of input images.

Where:

Parameters
  • baseImage – is a string containing the name of the input image to add image to

  • inputimagelist – is a list of input images

  • inputBands – is a subset of input bands to use (optional)

  • skipVal – is a float specifying a value which should be ignored and not copied into the new image (optional). To use you must also provided a list of subset image bands.

Example:

import rsgislib
from rsgislib import imageutils
import glob
# Search for all files with the extension 'kea'
baseImage = './TestOutputs/injune_p142_casi_sub_utm_mosaic.kea'
inputList = glob.glob('./TestOutputs/Tiles/*.kea')
imageutils.includeImages(baseImage, inputList)
rsgislib.imageutils.includeImagesWithOverlap(baseImage, inputImages, pxlOverlap)

Create mosaic from list of input images where the input images have an overlap.

Where:

Parameters
  • baseImage – is a string containing the name of the input image to add image to

  • inputimagelist – is a list of input images

  • inputBands – is a subset of input bands to use (optional)

Example:

     import rsgislib
     from rsgislib import imageutils
     import glob
inputImg = 'LandsatImg.kea'
tilesImgBase = './tiles/LandsatTile'
outputImg = 'LandsatImgProcessed.kea'
imageutils.createTiles(inputImg, tilesImgBase, 1000, 1000, 10, False, 'KEA', rsgislib.TYPE_32FLOAT, 'kea')
# Do some processing on the tiles... 
imageutils.createCopyImage(inputImg, outputImg, 6, 0, 'KEA', rsgislib.TYPE_32FLOAT)
     inputList = glob.glob('./tiles/LandsatTile*.kea')
     imageutils.includeImagesWithOverlap(outputImg, inputList, 10)
rsgislib.imageutils.includeImagesIndImgIntersect(baseImage, inputImages)

Create mosaic from list of input images written to the base image. The no data value will be honered and values over written.

Where:

Parameters
  • baseImage – is a string containing the name of the input image to add image to

  • inputimagelist – is a list of input images

Example:

import rsgislib
from rsgislib import imageutils
import glob
# Search for all files with the extension 'kea'
baseImage = './TestOutputs/injune_p142_casi_sub_utm_mosaic.kea'
inputList = glob.glob('./TestOutputs/Tiles/*.kea')
imageutils.includeImagesIndImgIntersect(baseImage, inputList)
rsgislib.imageutils.combineImages2Band(inimages=list, outimage=string, gdalformat=string, datatype=int, nodata=float)

Combine images together into a single image band by excluding the no data value.

Where:

Parameters
  • inimages – is a list of strings containing the names and paths of the input image files

  • outimage – is a string containing the name of the output file.

  • gdalformat – is a string with the GDAL output file format.

  • datatype – is an containing one of the values from rsgislib.TYPE_*

  • nodata – is the no data value which will be ignored (Default is 0)

Example:

from rsgislib import imageutils
inputImages = ['./forest.kea', './urban.kea', './water.kea']
outputImage = './classes.kea'
datatype = rsgislib.TYPE_8UINT
format = 'KEA'
imageutils.combineImages2Band(inputImages, outputImage, format, datatype, 0.0)

Composite

rsgislib.imageutils.imagecomp.createMaxNDVIComposite(inImgsPattern, rBand, nBand, outRefImg, outCompImg, tmpPath='./tmp', gdalformat='KEA', dataType=None, calcStats=True)

Create an image composite from multiple input images where the pixel brought through into the composite is the one with the maximum NDVI.

Parameters
  • inImgsPattern – is a pattern (ready for glob.glob(inImgsPattern)) so needs an ‘*’ within the pattern to find the input image files.

  • rBand – is the image band within the input images (same for all) for the red band - note band indexing starts at 1.

  • nBand – is the image band within the input images (same for all) for the nir band - note band indexing starts at 1.

  • outRefImg – is the output reference image which details which input image is forming the output image pixel value (Note. this file will always be a KEA file as RAT is used).

  • outCompImg – is the output composite image for which gdalformat and dataType define the format and data type.

  • tmpPath – is a temp path for intemediate files, if this path doesn’t exist is will be created and deleted at runtime.

  • gdalformat – is the output file format of the outCompImg, any GDAL compatable format is OK (Defaut is KEA).

  • dataType – is the data type of the output image (outCompImg). If None is provided then the data type of the first input image will be used (Default None).

  • calcStats – calculate image statics and pyramids (Default=True)

rsgislib.imageutils.imagecomp.createMaxNDVINDWIComposite(refImg, inImages, rBand, nBand, sBand, outRefImg, outCompImg, outMskImg, tmpPath='./tmp', gdalformat='KEA', dataType=None, calcStats=True, reprojmethod='cubic', use_mode=True)

Create an image composite from multiple input images where the pixel brought through into the composite is the one with the maximum NDVI over land and NDWI over water. A mask of land and water regions is also produced. The reference image is used to define the spatial extent of the output images and spatial projection.

Parameters
  • refImg – is a reference image with any number of bands and data type which is used to define the output image extent and projection.

  • inImages – a list of all the input images being used to build the composite.

  • rBand – is an integer specifying the red band in the input images (starts at 1), used in the NDVI index.

  • nBand – is an integer specifying the NIR band in the input images (starts at 1), used in the NDVI and NDWI index.

  • sBand – is an integer specifying the SWIR band in the input images (starts at 1), used in the NDVI and NDWI index.

  • outRefImg – is the output reference image which details which input image is forming the output image pixel value (Note. this file will always be a KEA file as RAT is used).

  • outCompImg – is the output composite image for which gdalformat and dataType define the format and data type.

  • outMskImg – is the output mask image for regions of water and land where ndvi vs ndwi are used (0=nodata, 1=land, 2=water)

  • tmpPath – is a temp path for intemediate files, if this path doesn’t exist is will be created and deleted at runtime.

  • gdalformat – is the output file format of the outCompImg, any GDAL compatable format is OK (Defaut is KEA).

  • dataType – is the data type of the output image (outCompImg). If None is provided then the data type of the first input image will be used (Default None).

  • calcStats – calculate image statics and pyramids (Default=True)

  • reprojmethod – specifies the interpolation method used to reproject the input images which are in a different projection and/or pixel size as the reference image (default: cubic).

  • use_mode – True: the land/water masks are combined using the mode and False: the land water masks are combined using median.

rsgislib.imageutils.imagecomp.createMaxNDVINDWICompositeLandsat(inImgsPattern, outRefImg, outCompImg, outMskImg, tmpPath='./tmp', gdalformat='KEA', dataType=None, calcStats=True, use_mode=True)

Create an image composite from multiple input images where the pixel brought through into the composite is the one with the maximum NDVI over land and NDWI over water. A mask of land and water regions is also produced. Landsat 8 images are identified as image file names are expected to start ‘LS8’. If composite includes a mix of LS8 and LS7 images then the LS8 images are submitted to match the images bands of LS7 (i.e., coastal band removed).

Parameters
  • inImgsPattern – is a pattern (ready for glob.glob(inImgsPattern)) so needs an ‘*’ within the pattern to find the input image files.

  • outRefImg – is the output reference image which details which input image is forming the output image pixel value (Note. this file will always be a KEA file as RAT is used).

  • outCompImg – is the output composite image for which gdalformat and dataType define the format and data type.

  • outMskImg – is the output mask image for regions of water and land where ndvi vs ndwi are used (0=nodata, 1=land, 2=water)

  • tmpPath – is a temp path for intemediate files, if this path doesn’t exist is will be created and deleted at runtime.

  • gdalformat – is the output file format of the outCompImg, any GDAL compatable format is OK (Defaut is KEA).

  • dataType – is the data type of the output image (outCompImg). If None is provided then the data type of the first input image will be used (Default None).

  • calcStats – calculate image statics and pyramids (Default=True)

  • use_mode – True: the land/water masks are combined using the mode and False: the land water masks are combined using median.

rsgislib.imageutils.imagecomp.checkBuildLS8VRTs(in_imgs, outdir)

A function which checks for Landsat 8 (LS8) images in the input list and creates a band subset (i.e., removes the coastal (1) band). This function should be used ahead of createMaxNDVINDWIComposite when combining LS8 with earlier landsat (i.e., LS5 and LS7) data. Note, files who’s file name contain ‘LS8’ are considered to be Landsat 8 images.

Parameters
  • in_imgs – input list of image file paths.

  • outdir – output directory for the VRT images (Note. an absolute path to the input image is used when building the VRT.)

rsgislib.imageutils.genTimeseriesFillCompositeImg(compInfo=list, validMask=string, outRefFillImg=string, outCompImg=string, gdalformat=string, datatype=int)

A function which aids the creation of timeseries composites. This function uses reference images to identify which pixels should be used to in-fill composite gaps.

Where:

Parameters
  • compInfo – is a list of rsgislib.imageutils.RSGISTimeseriesFillInfo objects

  • validMask – is a string with the name and path to an image specifying the valid area within which the compsites are being generated.

  • outRefFillImg

  • outCompImg

  • outCompRefImg

  • gdalformat – is a string with the GDAL outCompImg file format.

  • datatype – is an integer containing one of the values from rsgislib.TYPE_*, used for outCompImg

rsgislib.imageutils.createRefImgCompositeImg(inimages=list, outimage=string, refimg=string, gdalformat=string, datatype=int, outnodata=float)

A function which creates a composite image where the pixel values going into the output image by the reference image. The reference image can be created using the rsgislib.imagecalc.getImgIdxForStat function.

Where:

Parameters
  • inimages – is a list of input images, each image must have the same number of bands in the same order.

  • outputImage – is a string with the name and path of the output image.

  • refimg – is an image which specifies index of the image in inimages for which output pixel will be derived. Indexes start at 1, where 0 is no data.

  • gdalformat – is a string with the GDAL output file format.

  • datatype – is an integer containing one of the values from rsgislib.TYPE_*

  • outnodata – is the value which will be given to no data pixels in the output image.

Example:

import rsgislib
import rsgislib.imagecalc
import rsgislib.imageutils
import rsgislib.rastergis

import glob
import os.path

# Get List of input images:
inImages = glob.glob('./Outputs/*stdsref.kea')

# Generate Comp Ref layers:
refLyrsLst = []
refLayerPath = './CompRefLyrs/'
idx = 1
for img in inImages:
    print('In Image ('+str(idx) + '):       ' + img)
    baseImgName = os.path.splitext(os.path.basename(img))[0]
    refLyrImg = os.path.join(refLayerPath, baseImgName+'_ndvi.kea')
    rsgislib.imagecalc.calcNDVI(img, 3, 4, refLyrImg)
    refLyrsLst.append(refLyrImg)
    idx = idx + 1

# Create REF Image
pxlRefImg = 'LS5TM_19851990CompRefImg_lat7lon3896_r65p166_vmsk_mclds_topshad_rad_srefdem_stdsref.kea'
rsgislib.imagecalc.getImgIdxForStat(refLyrsLst, pxlRefImg, 'KEA', -999, rsgislib.SUMTYPE_MAX)

# Pop Ref Image with stats
rsgislib.rastergis.populateStats(pxlRefImg, True, True, True)

# Create Composite Image
outCompImg = 'LS5TM_19851990CompRefImgMAX_lat7lon3896_r65p166_vmsk_mclds_topshad_rad_srefdem_stdsref.kea'
rsgislib.imageutils.createRefImgCompositeImg(inImages, outCompImg, pxlRefImg, 'KEA', rsgislib.TYPE_16UINT, 0.0)

# Calc Stats
rsgislib.imageutils.popImageStats(outCompImg, usenodataval=True, nodataval=0, calcpyramids=True)
rsgislib.imageutils.combineBinaryMasks(msk_imgs_dict, out_img, output_lut, gdalformat='KEA')

A function which combines up to 8 binary image masks to create a single output image with a unique value for each combination of intersecting masks. A JSON LUT is also generated to identify the image values to a ‘class’.

Parameters
  • msk_imgs_dict – dict of input images.

  • out_img – output image file.

  • output_lut – output file path to JSON LUT file identifying the image values.

  • gdalformat – output GDAL format (e.g., KEA)

rsgislib.imageutils.exportSingleMergedImgBand(inputImg=string, inputBandRefImg=string, outputImg=string, gdalformat=string, datatype=int)

A function which exports a single image band where the reference image specifies from which image band the output pixel is extracted from.

Where:

Parameters
  • inputImg – is a string for the full (multi-band) image.

  • inputBandRefImg – is a string with the reference image specifying the band to be outputted for each pixel.

  • outputImg – is a string for the single band output image.

  • gdalformat – is a string with the GDAL outCompImg file format.

  • datatype – is an integer containing one of the values from rsgislib.TYPE_*, used for outCompImg

Tile

rsgislib.imageutils.createTiles(inputimage, baseimage, width, height, overlap, offsettiling, gdalformat, datatype, ext)

Create tiles from a larger image, useful for splitting a large image into multiple smaller ones for processing.

Where

Parameters
  • inputImage – is a string containing the name of the input file

  • baseimage – is a string containing the base name of the output file the number of the tile and file extension will be appended.

  • width – is the width of each tile, in pixels.

  • height – is the height of each tile, in pixels.

  • overlap – is the overlap between tiles, in pixels

  • offsettiling – is a bool, determining if tiles should start halfway into the image useful for generating overlapping sets of tiles.

  • gdalformat – is a string providing the output gdalformat of the tiles (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the output data type of the tiles.

  • ext – is a string providing the extension for the tiles (as required by the specified data type).

Returns

list of tile file names

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
outBase = './TestOutputs/Tiles/injune_p142_casi_sub_utm'
width = 100
height = width
overlap = 5
offsettiling = False
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32INT
ext='kea'
tiles = imageutils.createTiles(inputImage, outBase, width, height, overlap, offsettiling, gdalformat, datatype, ext)
rsgislib.imageutils.createTilesMultiCore(inputimage, baseimage, width, height, gdalformat, datatype, ext, ncores=1)

Function to generate a set of tiles for the input image.

Parameters
  • inputimage – input image to be subset.

  • baseimage – output image files base path.

  • width – width in pixels of the tiles.

  • height – height in pixels of the tiles.

  • gdalformat – output image file format

  • datatype – datatype is a rsgislib.TYPE_* value providing the data type of the output image.

  • ext – output file extension to be added to the baseimage path (e.g., kea)

  • ncores – number of cores to be used; uses python multiprocessing module.

rsgislib.imageutils.tilingutils.createMinDataTiles(inputImage, outshp, outclumpsFile, width, height, validDataThreshold, maskIntersect=None, offset=False, force=True, tmpdir='tilestemp', inImgNoDataVal=0.0)

A function to create a tiling for an input image where each tile has a minimum amount of valid data.

Where:

Parameters
  • inputImage – is a string for the image to be tiled

  • outshp – is a string for the output shapefile the tiling will be written to (if None a shapefile won’t be outputted).

  • outclumpsFile – is a string for the output image file containing the tiling

  • width – is an int for the width of the tiles

  • height – is an int for the height of the tiles

  • validDataThreshold – is a float (0-1) with the proportion of valid data needed within a tile.

  • force – is a boolean (default True) to delete the output shapefile if it already exists.

  • tmpdir – is a string with a temporary directory for temp outputs to be stored (they will be deleted). if tmpdir doesn’t exist it will be created and then deleted during the processing.

  • inImgNoDataVal – is a float for providing the input image no data value (Default: 0.0)

rsgislib.imageutils.tilingutils.createTileMaskImagesFromShp(inputImage, tileShp, tilesNameBase, tilesMaskDIR, tmpdir='tilestemp', imgFormat='KEA')

A function to create individual image masks from the tiles shapefile which can be individually used to mask (using rsgislib mask function) each tile from the inputimage.

Where:

Parameters
  • inputImage – is the input image being tiled.

  • tileShp – is a shapefile containing the shapefile tiles.

  • tilesNameBase – is the base file name for the tile masks

  • tilesMaskDIR – is the directory where the output images will be outputted

  • tmpdir – is a string with a temporary directory for temp outputs to be stored (they will be deleted) If tmpdir doesn’t exist it will be created and then deleted during the processing.

rsgislib.imageutils.tilingutils.createTileMaskImagesFromClumps(clumpsImage, tilesNameBase, tilesMaskDIR, gdalformat='KEA')

A function to create individual image masks from the tiles shapefile which can be individually used to mask (using rsgislib mask function) each tile from the inputimage.

Where:

Parameters
  • clumpsImage – is an image file with RAT where each clump represented a tile region.

  • tilesNameBase – is the base file name for the tile masks

  • tilesMaskDIR – is the directory where the output images will be outputted

  • gdalformat – is the output image file format of the tile masks

rsgislib.imageutils.tilingutils.createTilesFromMasks(inputImage, tilesBase, tilesMetaDIR, tilesImgDIR, datatype, gdalformat)

A function to apply the image tile masks defined in createTileMaskImages to the input image to extract the individual tiles.

Where:

Parameters
  • inputImage – is the input image being tiled.

  • tileMasksBase – is the base path for the tile masks. glob will be used to find them with *.kea added to the end.

  • outTilesBase – is the base file name for the tiles.

Visualisation / Normalisation

rsgislib.imageutils.stretchImage(inputimage, outputimage, saveoutstats, outstatsfile, ignorezeros, onepasssd, gdalformat, datatype, stretchtype, stretchparam)

Stretches (scales) pixel values to a range of 0 - 255, which is typically for visualisation but the function can also be used for normalisation.

Where:

Parameters
  • inputImage – is a string containing the name of the input file

  • outputImage – is a string containing the name of the output file

  • saveoutstats – is a bool specifying if stats should be saved to a text file.

  • outstatsfile – is a string providing the name of the file to save stats to.

  • ignorezeros – is a bool specifying if pixels with a value of zero should be ignored.

  • onepasssd – is a bool specifying if is single pass should be used for calculating standard deviation (faster but less accurate)

  • gdalformat – is a string providing the output gdalformat of the tiles (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the output data type.

  • stretchtype – is a STRETCH_* value providing the type of stretch, options are: * imageutils.STRETCH_LINEARMINMAX - Stretches between min and max. * imageutils.STRETCH_LINEARPERCENT - Stretches between percentage of image range. Parameter defines percent. * imageutils.STRETCH_LINEARSTDDEV - Stretches between mean - sd to mean + sd. Parameter defines number of standard deviations. * imageutils.STRETCH_EXPONENTIAL - Exponential stretch between mean - 2*sd to mean + 2*sd. No parameter. * imageutils.STRETCH_LOGARITHMIC - Logarithmic stretch between mean - 2*sd to mean + 2*sd. No parameter. * imageutils.STRETCH_POWERLAW - Power law stretch between mean - 2*sd to mean + 2*sd. Parameter defines power.

  • stretchparam – is a float, providing the input parameter to the stretch (if required).

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_2sd.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_8INT
imageutils.stretchImage(inputImage, outputImage, False, '', True, False, gdalformat, datatype, imageutils.STRETCH_LINEARSTDDEV, 2)
rsgislib.imageutils.stretchImageWithStats(inputimage, outputimage, instatsfile, gdalformat, datatype, stretchtype, stretchparam)

Stretches (scales) pixel values to a range of 0 - 255, which is typically for visualisation but the function can also be used for normalisation. This function uses pre-calculated statistics - normally from rsgislib.imageutils.stretchImage.

Where:

Parameters
  • inputImage – is a string containing the name of the input file

  • outputImage – is a string containing the name of the output file

  • instatsfile – is a string providing the name of the file to read stats from.

  • ignorezeros – is a bool specifying if pixels with a value of zero should be ignored.

  • onepasssd – is a bool specifying if is single pass should be used for calculating standard deviation (faster but less accurate)

  • gdalformat – is a string providing the output gdalformat of the tiles (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the output data type.

  • stretchtype – is a STRETCH_* value providing the type of stretch, options are: * imageutils.STRETCH_LINEARMINMAX - Stretches between min and max. * imageutils.STRETCH_LINEARPERCENT - Stretches between percentage of image range. Parameter defines percent. * imageutils.STRETCH_LINEARSTDDEV - Stretches between mean - sd to mean + sd. Parameter defines number of standard deviations. * imageutils.STRETCH_EXPONENTIAL - Exponential stretch between mean - 2*sd to mean + 2*sd. No parameter. * imageutils.STRETCH_LOGARITHMIC - Logarithmic stretch between mean - 2*sd to mean + 2*sd. No parameter. * imageutils.STRETCH_POWERLAW - Power law stretch between mean - 2*sd to mean + 2*sd. Parameter defines power.

  • stretchparam – is a float, providing the input parameter to the stretch (if required).

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
inputImageStats = './Rasters/injune_p142_casi_sub_utm_stats.txt'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_2sd.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_8UINT
imageutils.stretchImageWithStats(inputImage, outputImage, inputImageStats, True, False, gdalformat, datatype, imageutils.STRETCH_LINEARSTDDEV, 2)
rsgislib.imageutils.normaliseImagePxlVals(inputimage=string, outputimage=string, gdalformat=string, datatype=rsgislib.TYPE_*, innodataval=float, outnodataval=float, outmin=float, outmax=float, stretchtype=imageutils.STRETCH_*, stretchparam=float)

Normalises the image pixel values to a range of outmin to outmax (default 0-1) where the no data value is specified by the user. This function is largely similar to rsgislib.imageutils.stretchImage but deals with no data values correctly and intended for data processing normalisation rather than visualisation.

Where:

Parameters
  • inputImage – is a string containing the name of the input file

  • outputImage – is a string containing the name of the output file

  • gdalformat – is a string providing the output gdalformat of the tiles (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the output data type.

  • innodataval – is a float with the input image no data value. (Default = 0)

  • outnodataval – is a float with the no data value used within the output image. (Default = -1)

  • outmin – is a float which specifies the output minimum pixel value (Default = 0)

  • outmax – is a float which specifies the output maximum pixel value (Default = 1)

  • stretchtype – is a STRETCH_* value providing the type of stretch, options are: * imageutils.STRETCH_LINEARMINMAX - Stretches between min and max. * imageutils.STRETCH_LINEARPERCENT - Stretches between percentage of image range. Parameter defines percent. * imageutils.STRETCH_LINEARSTDDEV - Stretches between mean - sd to mean + sd. Parameter defines number of standard deviations. * imageutils.STRETCH_EXPONENTIAL - Exponential stretch between mean - 2*sd to mean + 2*sd. No parameter. * imageutils.STRETCH_LOGARITHMIC - Logarithmic stretch between mean - 2*sd to mean + 2*sd. No parameter. * imageutils.STRETCH_POWERLAW - Power law stretch between mean - 2*sd to mean + 2*sd. Parameter defines power.

  • stretchparam – is a float, providing the input parameter to the stretch (if required; Default=2.0).

Example:

import rsgislib
import rsgislib.imageutils

inImg = './LS5TM_19851990Comp_lat7lon3896_r65p166_stdsref.kea'

outImg = 'LS5TM_19851990Comp_lat7lon3896_r65p166_stdsref_NORM_0-255.kea'
rsgislib.imageutils.normaliseImagePxlVals(inImg, outImg, 'KEA', rsgislib.TYPE_8UINT, innodataval=0, outnodataval=0, outmin=0, outmax=255,
                                          stretchtype=rsgislib.imageutils.STRETCH_LINEARSTDDEV, stretchparam=2)
rsgislib.imageutils.popImageStats(outImg, usenodataval=True, nodataval=0, calcpyramids=True)

outImg = 'LS5TM_19851990Comp_lat7lon3896_r65p166_stdsref_NORM_0-1.kea'
rsgislib.imageutils.normaliseImagePxlVals(inImg, outImg, 'KEA', rsgislib.TYPE_32FLOAT, innodataval=0, outnodataval=0, outmin=0, outmax=1,
                                          stretchtype=rsgislib.imageutils.STRETCH_LINEARSTDDEV, stretchparam=2)
rsgislib.imageutils.popImageStats(outImg, usenodataval=True, nodataval=0, calcpyramids=True)

Subset / Mask

rsgislib.imageutils.maskImage(inputimage, imagemask, outputimage, gdalformat, datatype, outvalue, maskvalue)

This command will mask an input image using a single band mask image - commonly this is a binary image.

Where:

Parameters
  • inputImage – is a string containing the name and path of the input image file.

  • imagemask – is a string containing the name and path of the mask image file.

  • outputimage – is a string containing the name and path for the output image following application of the mask.

  • gdalformat – is a string representing the output image file format (e.g., KEA, ENVI, GTIFF, HFA etc).

  • datatype – is a rsgislib.TYPE_* value for the data type of the output image.

  • outvalue – is a float representing the value written to the output image in place of the regions being masked.

  • maskvalue – is a float or list of floats representing the value(s) within the mask image for the regions which are to be replaced with the outvalue.

Example:

import rsgislib
from rsgislib import imageutils

inImg = './LS5/Outputs/LS5TM_20110926_lat53lon511_r23p205_rad_toa.kea'
imgMask = './LS5/Outputs/LS5TM_20110926_lat53lon511_r23p205_clouds.kea'
outImg = './LS5/Outputs/LS5TM_20110926_lat53lon511_r23p205_rad_toa_mclds.kea'

imageutils.maskImage(inImg, imgMask, outImg, 'KEA', rsgislib.TYPE_16UINT, 0, [1,2])
imageutils.popImageStats(outImg, True, 0.0, True)
rsgislib.imageutils.subset(inputimage, inputvector, outputimage, gdalformat, datatype)

Subset an image to the bounding box of a vector.

Where:

Parameters
  • inputimage – is a string providing the name of the input file.

  • inputvector – is a string providing the vector which the image is to be clipped to.

  • outputimage – is a string providing the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
inputVector = './Vectors/injune_p142_plot_location_utm.shp'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_subset.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32FLOAT
imageutils.subset(inputImage, inputVector, outputImage, gdalformat, datatype)
rsgislib.imageutils.subset2img(inputimage, inputROIimage, outputimage, gdalformat, type)

Subset an image to the bounding box of an image.

Where:

Parameters
  • inputimage – is a string providing the name of the input file.

  • inputROIimage – is a string providing the image which the ‘inputimage’ is to be clipped to.

  • outputimage – is a string providing the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
inputROIimage = './Vectors/injune_p142_roi.kea'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_subset.kea'
gdalformat = 'KEA'
gdaltype = rsgislib.TYPE_32FLOAT
imageutils.subset2img(inputImage, inputROIimage, outputImage, gdalformat, datatype)
rsgislib.imageutils.subset2polys()

rsgislib.imageutils.subset(inputimage, inputvector, attribute, baseimage, gdalformat, datatype, ext) Subset an image to the bounding box of a each polygon in an input vector. Useful for splitting an image into tiles of unequal sizes.

Where:

Parameters
  • inputimage – is a string providing the name of the input file.

  • inputvector – is a string providing the vector which the image is to be clipped to.

  • attribute – is a string providing the attribute in the vector to use for the ouput name

  • baseimage – is a string providing the base name of the output file. The specified attribute of each polygon and extension will be appended.

  • gdalformat – is a string providing the output gdalformat of the subsets (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the output data type of the subsets.

  • ext – is a string providing the extension for the tiles (as required by the specified data gdalformat).

Returns

A list of strings containing the filenames.

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
inputVector = './Vectors/injune_p142_plot_location_utm.shp'
attribute = 'PLOTNO'
outputImageBase = './TestOutputs/injune_p142_casi_sub_utm_subset_polys_'
gdalformat = 'KEA'
gdaltype = rsgislib.TYPE_32FLOAT
ext = 'kea'
imageutils.subset2polys(inputImage, inputVector, attribute, outputImageBase, gdalformat, gdaltype, ext)
rsgislib.imageutils.subsetImgs2CommonExtent(inImagesDict, outShpEnv, gdalformat)

A command to subset a set of images to the same overlapped extent.

Where:

Parameters
  • inImagesDict – is a list of dictionaries containing values for IN (input image) OUT (output image) and TYPE (data type for output)

  • outShpEnv – is a file path for the output shapefile representing the overlap extent.

  • gdalformat – is the gdal format of the output images.

Example:

from rsgislib import imageutils

inImagesDict = []
inImagesDict.append({'IN': './Images/Lifeformclip.tif', 'OUT':'./Subsets/Lifeformclip_sub.kea', 'TYPE':rsgislib.TYPE_32INT})
inImagesDict.append({'IN': './Images/chmclip.tif', 'OUT':'./Subsets/chmclip_sub.kea', 'TYPE':rsgislib.TYPE_32FLOAT})
inImagesDict.append({'IN': './Images/peakBGclip.tif', 'OUT':'./Subsets/peakBGclip_sub.kea', 'TYPE':rsgislib.TYPE_32FLOAT})

outputVector = 'imgSubExtent.shp'
imageutils.subsetImgs2CommonExtent(inImagesDict, outputVector, 'KEA')
rsgislib.imageutils.subsetbbox(inputimage, outputimage, gdalformat, datatype, xMin, xMax, yMin, yMax)

Subset an image to the bounding box of a vector.

Where:

Parameters
  • inputimage – is a string providing the name of the input file.

  • outputimage – is a string providing the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

  • xMin – double within the minimum X for the bounding box

  • xMax – double within the maximum X for the bounding box

  • yMin – double within the minimum Y for the bounding box

  • yMax – double within the maximum X for the bounding box

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_subset.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32FLOAT
xMin = 295371.5
xMax = 295401.5
yMin = 359470.8
yMax = 359500.8
imageutils.subsetbbox(inputImage, outputImage, gdalformat, datatype, xMin, xMax, yMin, yMax)
rsgislib.imageutils.subsetPxlBBox(inputimage, outputimage, gdalformat, datatype, xMinPxl, xMaxPxl, yMinPxl, yMaxPxl)

Function to subset an input image using a defined pixel bbox.

Parameters
  • inputimage – input image to be subset.

  • outputimage – output image file.

  • gdalformat – output image file format

  • datatype – datatype is a rsgislib.TYPE_* value providing the data type of the output image.

  • xMinPxl – min x in pixels

  • xMaxPxl – max x in pixels

  • yMinPxl – min y in pixels

  • yMaxPxl – max y in pixels

rsgislib.imageutils.buildImgSubDict(globFindImgsStr, outDir, suffix, ext)

Automate building the dictionary of image to be used within the subsetImgs2CommonExtent(inImagesDict, outShpEnv, imgFormat) function.

Where:

Parameters
  • globFindImgsStr – is a string to be passed to the glob module to find the input image files.

  • outDir – is the output directory path for the images.

  • suffix – is a suffix to be appended on to the end of the file name (can be a blank string, i.e., ‘’)

  • ext – is a string with the output file extension

Example:

from rsgislib import imageutils

inImagesDict = imageutils.buildImgSubDict("./Images/*.tif", "./Subsets/", "_sub", ".kea")
print(inImagesDict)

outputVector = 'imgSubExtent.shp'
imageutils.subsetImgs2CommonExtent(inImagesDict, outputVector, 'KEA')
rsgislib.imageutils.genFiniteMask(inimage=string, outimage=string, gdalformat=string)

Generate a binary image mask defining the finite image regions.

Where:

Parameters
  • inimage – is a string containing the name of the input file

  • outimage – is a string containing the name of the output file.

  • gdalformat – is a string with the GDAL output file format.

Example:

from rsgislib import imageutils
inputImage = './injune_p142_casi_sub_utm.kea'
outputImage = './injune_p142_casi_sub_utm.kea'
imageutils.genFiniteMask(inputImage, outputImage, 'KEA')
rsgislib.imageutils.genValidMask(inimages=string | list, outimage=string, gdalformat=string, nodata=float)

Generate a binary image mask defining the regions which are not ‘no data’.

Where:

Parameters
  • inimages – can be either a string or a list containing the input file(s)

  • outimage – is a string containing the name of the output file.

  • gdalformat – is a string with the GDAL output file format.

  • nodata – is a float defining the no data value (Optional and default is 0.0)

Example:

from rsgislib import imageutils
inputImage = './injune_p142_casi_sub_utm.kea'
outputImage = './injune_p142_casi_sub_utm.kea'
imageutils.genValidMask(inputImage, outputImage, 'KEA', 0.0)

Extract

rsgislib.imageutils.ImageBandInfo(fileName=None, name=None, bands=None)

Create a list of these objects to pass to the extractZoneImageBandValues2HDF function

Parameters
  • fileName – is the input image file name and path.

  • name – is a name associated with this layer - doesn’t really matter what you use but needs to be unique; this is used as a dict key in some functions.

  • bands – is a list of image bands within the fileName to be used for processing (band numbers start at 1).

rsgislib.imageutils.extractZoneImageValues2HDF(inputImage, imageMask, outputHDF, maskValue, datatype)

Extract the all the pixel values for raster regions to a HDF5 file (1 column for each image band).

Where:

Parameters
  • inputImage – is a string containing the name and path of the input file

  • imageMask – is a string containing the name and path of the input image mask file; the mask file must have only 1 image band.

  • outputHDF – is a string containing the name and path of the output HDF5 file

  • maskValue – is a float containing the value of the pixel within the mask for which values are to be extracted

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

rsgislib.imageutils.extractZoneImageBandValues2HDF(inputImageInfo, imageMask, outputHDF, maskValue, datatype)

Extract the all the pixel values for raster regions to a HDF5 file (1 column for each image band). Multiple input rasters can be provided and the bands extracted selected.

Where:

Parameters
  • inputImageInfo – is a list of rsgislib::imageutils::ImageBandInfo objects with the file names and list of image bands within that file to be extracted.

  • imageMask – is a string containing the name and path of the input image mask file; the mask file must have only 1 image band.

  • outputHDF – is a string containing the name and path of the output HDF5 file

  • maskValue – is a float containing the value of the pixel within the mask for which values are to be extracted

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

import rsgislib.imageutils
fileInfo = []
fileInfo.append(rsgislib.imageutils.ImageBandInfo('InputImg1.kea', 'Image1', [1,3,4]))
fileInfo.append(rsgislib.imageutils.ImageBandInfo('InputImg2.kea', 'Image2', [2]))
rsgislib.imageutils.extractZoneImageBandValues2HDF(fileInfo, 'ClassMask.kea', 'ForestRefl.h5', 1.0)
rsgislib.imageutils.mergeExtractedHDF5Data(h5Files, outH5File, datatype=None)

A function to merge a list of HDF files (e.g., from rsgislib.imageutils.extractZoneImageBandValues2HDF) with the same number of variables (i.e., columns) into a single file. For example, if class training regions have been sourced from multiple images.

Parameters
  • h5Files – a list of input files.

  • outH5File – the output file.

  • datatype – is the data type used for the output HDF5 file (e.g., rsgislib.TYPE_32FLOAT). If None (default) then the output data type will be float32.

Example:

inTrainSamples = ['MSS_CloudTrain1.h5', 'MSS_CloudTrain2.h5', 'MSS_CloudTrain3.h5']
cloudTrainSamples = 'LandsatMSS_CloudTrainingSamples.h5'
rsgislib.imageutils.mergeExtractedHDF5Data(inTrainSamples, cloudTrainSamples)
rsgislib.imageutils.randomSampleHDF5File(inputh5, outputh5, sample, seed, datatype)

A function which randomly samples a HDF5 of extracted values.

Where:

Parameters
  • inputh5 – is a string with the path to the input file.

  • outputh5 – is a string with the path to the output file.

  • sample – is an integer with the number values to be sampled from the input file.

  • seed – is an integer which seeds the random number generator

.:param datatype: is a rsgislib.TYPE_* value providing the data type of the output image.

rsgislib.imageutils.performRandomPxlSampleInMask(inputImage=string, outputImage=string, gdalformat=string, maskvals=int|list, numSamples=unsigned int)

Randomly sample with a mask (e.g., classification). The same number of samples will be identified within each mask value listed by maskvals.

Where:

Parameters
  • inputImage – is a string for the input image mask - mask is typically whole values within regions (e.g., classifications).

  • outputImage – is a string with the name and path of the output image. Output is the mask pixel values.

  • gdalformat – is a string with the GDAL output file format.

  • maskvals – can either be a single integer value or a list of values. If a list of values is specified then the total number of points identified (numSamples x n-maskVals).

  • numSamples – is the number of samples to be created within each region.

rsgislib.imageutils.performRandomPxlSampleInMaskLowPxlCount(inputImage=string, outputImage=string, gdalformat=string, maskvals=int|list, numSamples=unsigned int, rndSeed=int)

Randomly sample with a mask (e.g., classification). The same number of samples will be identified within each mask value listed by maskvals. This function produces a similar result to rsgislib.imageutils.performRandomPxlSampleInMask but is more efficient for classes where only a small number of pixels have that value. However, this function uses much more memory.

Where:

Parameters
  • inputImage – is a string for the input image mask - mask is typically whole values within regions (e.g., classifications).

  • outputImage – is a string with the name and path of the output image. Output is the mask pixel values.

  • gdalformat – is a string with the GDAL output file format.

  • maskvals – can either be a single integer value or a list of values. If a list of values is specified then the total number of points identified (numSamples x n-maskVals).

  • numSamples – is the number of samples to be created within each region.

  • rndSeed – is a an integer providing a seed for the random number generator. Please not that if this number is the same then the same random set of points will be generated.

rsgislib.imageutils.extractImgPxlSample(inputImg, pxlNSample, noData=None)

A function which extracts a sample of pixels from the input image file to a number array.

Parameters
  • inputImg – the image from which the random sample will be taken.

  • pxlNSample – the sample to be taken (e.g., a value of 100 will sample every 100th, valid (if noData specified), pixel)

  • noData – provide a no data value which is to be ignored during processing. If None then ignored (Default: None)

Returns

outputs a numpy array (n sampled values, n bands)

rsgislib.imageutils.extractImgPxlValsInMsk(img, img_bands, img_mask, img_mask_val, no_data=None)

A function which extracts the image values within a mask for the specified image bands.

Parameters
  • img – the image from which the random sample will be taken.

  • img_bands – the image bands the values are to be read from.

  • img_mask – the image mask specifying the regions of interest.

  • img_mask_val – the pixel value within the mask defining the region of interest.

Returns

outputs a numpy array (n values, n bands)

rsgislib.imageutils.splitSampleHDF5File(inputh5, outputp1h5, outputp2h5, sample, seed, datatype)

A function which splits samples a HDF5 of extracted values.

Where:

Parameters
  • inputh5 – is a string with the path to the input file.

  • outputp1h5 – is a string with the path to the output file.

  • outputp2h5 – is a string with the path to the output file.

  • sample – is an integer with the number values to be sampled from the input file.

  • seed – is an integer which seeds the random number generator

.:param datatype: is a rsgislib.TYPE_* value providing the data type of the output image.

Create

rsgislib.imageutils.createBlankImage(outputImage, numBands, width, height, tlX, tlY, res, pxlVal, wktFile, wktString, gdalformat, datatype)

Create a new blank image with the parameters specified.

Where:

Parameters
  • outputImage – is a string containing the name and path for the outputted image.

  • numBands – is an integer specifying the number of image bands in the output image.

  • width – is an integer specifying the width of the output image.

  • height – is an integer specifying the height of the output image.

  • tlX – is a double specifying the Top Left pixel X coordinate (eastings) of the output image.

  • tlY – is a double specifying the Top Left pixel Y coordinate (northings) of the output image.

  • res – is a double specifying the pixel resolution of the output image.

  • pxlVal – is a float specifying the pixel value of the output image.

  • wktFile – is a string specifying the location of a file containing the WKT string representing the coordinate system and projection of the output image (if specified this parameter overrides the wktString parameter).

  • wktString – is a string specifying the WKT string representing the coordinate system and projection of the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

rsgislib.imageutils.createBlankImgFromBBOX(bbox, wktstr, outputImg, outImgRes, outImgPxlVal, outImgNBands, gdalformat, datatype, snap2grid=False)

A function to create a new image file based on a bbox to define the extent.

Parameters
  • bbox – bounding box defining the extent of the output image (xMin, xMax, yMin, yMax)

  • wktstr – the WKT string defining the bbox and output image projection.

  • outputImg – output image file.

  • outImgRes – output image resolution, square pixels so a single value.

  • outImgPxlVal – output image pixel value.

  • outImgNBands – the number of image bands in the output image

  • gdalformat – output image file format.

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

  • snap2grid – optional variable to snap the image to a grid of whole numbers with respect to the image pixel resolution.

rsgislib.imageutils.createBlankImgFromRefVector(inVecFile, inVecLyr, outputImg, outImgRes, outImgNBands, gdalformat, datatype)

A function to create a new image file based on a vector layer to define the extent and projection of the output image.

Parameters
  • inVecFile – input vector file.

  • inVecLyr – name of the vector layer, if None then assume the layer name will be the same as the file name of the input vector file.

  • outputImg – output image file.

  • outImgRes – output image resolution, square pixels so a single value.

  • outImgNBands – the number of image bands in the output image

  • gdalformat – output image file format.

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image

rsgislib.imageutils.createCopyImage(inputImage, outputImage, numBands, pxlVal, gdalformat, datatype)

Create a new blank image with the parameters specified.

Where:

Parameters
  • inputImage – is a string containing the name and path for the input image, which is to be copied.

  • outputImage – is a string containing the name and path for the outputted image.

  • numBands – is an integer specifying the number of image bands in the output image.

  • pxlVal – is a float specifying the pixel value of the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_blank.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32FLOAT
imageutils.createCopyImage(inputImage, outputImage, 1, 3, gdalformat, datatype)
rsgislib.imageutils.createCopyImageDefExtent(inputImage, outputImage, numBands, xMin, xMax, yMin, yMax, xRes, yRes, pxlVal, gdalformat, datatype)

Create a new blank image with the parameters specified.

Where:

Parameters
  • inputImage – is a string containing the name and path for the input image, which is to be copied.

  • outputImage – is a string containing the name and path for the outputted image.

  • numBands – is an integer specifying the number of image bands in the output image.

  • xMin – is a double specifying the X minimum coordinate of the output image.

  • xMax – is a double specifying the X maximum coordinate of the output image.

  • yMin – is a double specifying the Y minimum coordinate of the output image.

  • yMax – is a double specifying the Y maximum coordinate of the output image.

  • xRes – is a double specifying the X resolution of the output image.

  • yRes – is a double specifying the Y resolution of the output image.

  • pxlVal – is a float specifying the pixel value of the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

rsgislib.imageutils.createCopyImageVecExtent(inputImage, shpFile, outputImage, numBands, pxlVal, gdalformat, datatype)

Create a new blank image with the parameters specified but with the extent of the inputted shapefile.

Where:

Parameters
  • inputImage – is a string containing the name and path for the input image, which is to be copied.

  • shpFile – is a string specifying the name and path of the shapefile to which the image extent will be cut

  • outputImage – is a string containing the name and path for the outputted image.

  • numBands – is an integer specifying the number of image bands in the output image.

  • pxlVal – is a float specifying the pixel value of the output image.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
shpFile = './Rasters/injune_p142_roi.shp'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_blank.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32FLOAT
imageutils.createCopyImageVecExtent(inputImage, shpFile, outputImage, 3, 1, gdalformat, datatype)
rsgislib.imageutils.createCopyImageVecExtentSnap2Grid(inVecFile, inVecLyr, outputImg, outImgRes, outImgNBands, gdalformat, datatype, bufnpxl=0)

A function to create a new image file based on a vector layer to define the extent and projection of the output image. The image file extent is snapped on to the grid defined by the vector layer.

Parameters
  • inVecFile – input vector file.

  • inVecLyr – name of the vector layer, if None then assume the layer name will be the same as the file name of the input vector file.

  • outputImg – output image file.

  • outImgRes – output image resolution, square pixels so a single value.

  • outImgNBands – the number of image bands in the output image

  • gdalformat – output image file format.

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image

  • bufnpxl – is an integer specifying the number of pixels to buffer the vector file extent by.

rsgislib.imageutils.createImageForEachVecFeat(vectorFile, vectorLyr, fileNameCol, outImgPath, outImgExt, outImgPxlVal, outImgNBands, outImgRes, gdalformat, datatype, snap2grid=False)

A function to create a set of image files representing the extent of each feature in the inputted vector file.

Parameters
  • vectorFile – the input vector file.

  • vectorLyr – the input vector layer

  • fileNameCol – the name of the column in the vector layer which will be used as the file names.

  • outImgPath – output file path (directory) where the images will be saved.

  • outImgExt – the file extension to be added on to the output file names.

  • outImgPxlVal – output image pixel value

  • outImgNBands – the number of image bands in the output image

  • outImgRes – output image resolution, square pixels so a single value

  • gdalformat – output image file format.

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

  • snap2grid – optional variable to snap the image to a grid of whole numbers with respect to the image pixel resolution.

Select / Stack bands

rsgislib.imageutils.selectImageBands(inputImage, outputImage, gdalformat, datatype, bands)

Copy selected image bands from an image to a new image.

Where:

Parameters
  • inputImage – is a string containing the name and path of the input file

  • outputImage – is a string containing the name and path of the output file.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

  • bands – is a list of integers for the bands in the input image to exported to the output image (Note band count starts at 1).

Example:

import rsgislib.imageutils
import rsgislib
bands = [1,2]
rsgislib.imageutils.selectImageBands('N06W053_07_ALL_sl_sub.kea', 'N06W053_07_ALL_sl_sub_HHVV.kea', 'KEA', rsgislib.TYPE_32INT, bands)
rsgislib.imageutils.stackImageBands(inputImages, imageBandNames, outputImage, skipValue, noDataValue, gdalformat, datatype)

Create a single image from list of input images through band stacking.

Where:

Parameters
  • inputImages – is a list of input images.

  • imageBandNames – is a list of band names (one for each input image). If None then ignored.

  • outputImage – is a string containing the name and path for the outputted image.

  • skipVal – is a float providing the value to be skipped (nodata values) in the input images (If None then ignored)

  • noDataValue – is float specifying a no data value.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

import rsgislib
from rsgislib import imageutils
imageList = ['./Rasters/injune_p142_casi_sub_utm_single_band.vrt','./Rasters/injune_p142_casi_sub_utm_single_band.vrt']
bandNamesList = ['Image1','Image2']
outputImage = './TestOutputs/injune_p142_casi_sub_stack.kea'
gdalformat = 'KEA'
gdaltype = rsgislib.TYPE_32FLOAT
imageutils.stackImageBands(imageList, bandNamesList, outputImage, None, 0, gdalformat, gdaltype)

Sharpen Image Bands

rsgislib.imageutils.panSharpenHCS(inimage=string, outimage=string, gdalformat=string, datatype=int, winsize=unsigned int, useNaiveMethod=boolean)

A function which performs a Hyperspherical Colour Space (HSC) Pan Sharpening of an input image. Padwick, C., Deskevich, M., Pacifici, F., Smallwood, S. 2010. WorldView-2 Pan-Sharpening. ASPRS 2010 Annual Conference, San Diego, California (2010) pp. 26-30.

Where:

Parameters
  • inputImage – is a string for the input file, where the single panchromatic band must be the last in the stack.

  • outputImage – is a string with the name and path of the output image.

  • gdalformat – is a string with the GDAL output file format.

  • datatype – is an containing one of the values from rsgislib.TYPE_*

  • winsize – is an optional integer, which must be an odd number, specifying the window size used for the analysis (Default = 7; Only used if useNaiveMethod=False).

  • useNaiveMethod – is an optional boolean option to specify whether the naive or smart method should be used - False=Smart (Default), True=Naive Method.

Example:

import rsgislib
import rsgislib.imageutils

rsgislib.imageutils.resampleImage2Match('./14SEP03025718-P2AS-054000253010_01_P001.TIF', './14SEP03025718-M2AS-054000253010_01_P001.TIF',
                                    './14SEP03025718-M2AS-054000253010_01_P001_resample.kea', 'KEA', 'nearestneighbour', rsgislib.TYPE_16UINT)

rsgislib.imageutils.stackImageBands(['14SEP03025718-M2AS-054000253010_01_P001_resample.kea', '14SEP03025718-P2AS-054000253010_01_P001.TIF'],
                                     None, 'StackPanImg.kea', 0.0, 0.0, 'KEA', rsgislib.TYPE_16UINT)

rsgislib.imageutils.panSharpenHCS(inimage='StackPanImg.kea', outimage='StackPanImgSharp.kea', gdalformat='KEA', datatype=rsgislib.TYPE_16UINT)

rsgislib.imageutils.popImageStats('StackPanImgSharp.kea', usenodataval=True, nodataval=0, calcpyramids=True)
rsgislib.imageutils.SharpBandInfo(band=None, status=None, name=None)

Create a list of these objects to pass to the sharpenLowResBands function.

Parameters
  • band – is the band number (band numbering starts at 1).

  • status – needs to be either rsgislib.SHARP_RES_IGNORE, rsgislib.SHARP_RES_LOW or rsgislib.SHARP_RES_HIGH lowres bands will be sharpened using the highres bands and ignored bands will just be copied into the output image.

  • name – is a name associated with this image band - doesn’t really matter what you put in here.

rsgislib.imageutils.sharpenLowResBands(inimage=string, outimage=string, bandinfo=list, winsize=unsigned int, nodata=int, gdalformat=string, datatype=int)

A function which performs band sharpening using local linear fitting (orignal method proposed by Shepherd and Dymond).

Where:

Parameters
  • inimage – is a string for the input file where the high resolution input image bands have been resampled (recommend nearest neighbour) to the same resolution has the higher resolution bands

  • outimage – is a string with the name and path of the output image.

  • bandinfo – is a list of the input image bands (type: rsgislib.imageutils.SharpBandInfo) specifying the band number, name and status. the status is either rsgislib.SHARP_RES_IGNORE, rsgislib.SHARP_RES_LOW or rsgislib.SHARP_RES_HIGH

  • winsize – is an integer, which must be an odd number, specifying the window size (in pixels) used for the analysis (Default = 7). Recommend that the window size values fits at least 9 low resolution image pixels. For example, if the high resolution image is 10 m and the low 20 m then a 7 x 7 window will include 12.25 low resolution pixels.

  • nodata – is an integer specifying the no data value for the scene

  • gdalformat – is a string with the GDAL output file format.

  • datatype – is an containing one of the values from rsgislib.TYPE_*

Example:

import rsgislib
from rsgislib import imageutils

bandInfo = []
bandInfo.append(imageutils.SharpBandInfo(band=1, status=rsgislib.SHARP_RES_LOW, name='Blue'))
bandInfo.append(imageutils.SharpBandInfo(band=2, status=rsgislib.SHARP_RES_LOW, name='Green'))
bandInfo.append(imageutils.SharpBandInfo(band=3, status=rsgislib.SHARP_RES_LOW, name='Red'))
bandInfo.append(imageutils.SharpBandInfo(band=4, status=rsgislib.SHARP_RES_LOW, name='NIR'))
bandInfo.append(imageutils.SharpBandInfo(band=5, status=rsgislib.SHARP_RES_HIGH, name='PAN'))

imageutils.sharpenLowResBands(inimage='./wv2/wv2_20140903_panstack.kea',
                              outimage='./wv2/wv2_20140903_panstack_sharp.kea',
                              bandinfo=bandInfo, winsize=7, nodata=0,
                              gdalformat='KEA', datatype=rsgislib.TYPE_UINT16)

Band Names

rsgislib.imageutils.setBandNames(inputImage, bandNames, feedback=False)

A utility function to set band names. Where:

Parameters
  • inImage – is the input image

  • bandNames – is a list of band names

  • feedback – is a boolean specifying whether feedback will be printed to the console (True= Printed / False (default) Not Printed)

Example:

from rsgislib import imageutils

inputImage = 'injune_p142_casi_sub_utm.kea'
bandNames = ['446nm','530nm','549nm','569nm','598nm','633nm','680nm','696nm','714nm','732nm','741nm','752nm','800nm','838nm']

imageutils.setBandNames(inputImage, bandNames)
rsgislib.imageutils.getBandNames(inputImage)

A utility function to get band names.

Where:

Parameters

inImage – is the input image

Returns

list of band names

Example:

from rsgislib import imageutils

inputImage = 'injune_p142_casi_sub_utm.kea'
bandNames = imageutils.getBandNames(inputImage)

Image Data Types

rsgislib.imageutils.getGDALDataType(inImg)

Returns the rsgislib datatype ENUM for a raster file

Parameters

inImg – The file to get the datatype for

Returns

The rsgislib datatype enum, e.g., rsgislib.TYPE_8INT

rsgislib.imageutils.getRSGISLibDataType(inImg)

Returns the rsgislib datatype ENUM for a raster file

Parameters

inImg – The file to get the datatype for

Returns

The rsgislib datatype enum, e.g., rsgislib.TYPE_8INT

Other

rsgislib.imageutils.stackStats(inputImage, outputImage, numBands, stat, gdalformat, datatype)

Calculate statistics for every pixel in a stack of image. If all bands are used a single band image is produced with the specified statistics. If a number of bands are specified statistics are taken over every n bands to provide an image with B / n bands (where B is the number of input bands. For example, can be used to produce monthly composite images from a stack with images from every day.

Where:

Parameters
  • inputImage – is a string containing the name and path for the input image.

  • outputImage – is a string containing the name and path for the output image.

  • numBands – is an integer specifying the number of image bands in the output image, pass ‘None’ to use all bands.

  • stat – is a string providing the statistics to calculate, options are ‘mean’, ‘min’, ‘max’, and ‘range’.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • datatype – is a rsgislib.TYPE_* value providing the data type of the output image.

Example:

import rsgislib
from rsgislib import imageutils
inputImage = './Rasters/injune_p142_casi_sub_utm.kea'
outputImage = './TestOutputs/injune_p142_casi_sub_utm_stackStats.kea'
gdalformat = 'KEA'
datatype = rsgislib.TYPE_32FLOAT
imageutils.stackStats(inputImage, outputImage, None, 'mean', gdalformat, datatype)
rsgislib.imageutils.orderImageUsingValidPxls(inputImages, noDataVal)

Order the list of input images based on the their proportion of valid image pixels. The primary use of this function is expected to be order (rank) images ahead of mosaicing.

Where:

Parameters
  • inputImages – is a list of string containing the name and path for the input images.

  • noDataVal – is a float which specifies the no data value used to defined ‘invalid’ pixels.

Returns

a list of images ordered, from low to high (i.e., the first image will be the image with the smallest number of valid image pixels).

rsgislib.imageutils.genSamplingGrid(onputImage, outputImage, gdalformat, pxlRes, minVal, maxVal, singleLine)

Generate a regular sampling grid.

Where:

Parameters
  • inputImage – is a string specifying an image which defines the area of interest.

  • outputImage – is a string specifying an output image location.

  • gdalformat – is a string providing the gdalformat of the output image (e.g., KEA).

  • pxlRes – is a float specifying the output image resolution.

  • minVal – is a minimum value for the output image pixel values.

  • maxVal – is a maximum value for the output image pixel values.

  • singleLine – is a boolean specifying whether the image is seen as a single line or new line with an offset in the starting value.

rsgislib.imageutils.calcPixelLocations(inputImg, outputImg, gdalformat)

Function which produces a 2 band output image with the X and Y locations of the image pixels.

Where:

Parameters
  • inputImg – the input reference image

  • outputImg – the output image file name and path (will be same dimensions as the input)

  • gdalformat – the GDAL image file format of the output image file.

rsgislib.imageutils.hasGCPs(inImg)

Test whether the input image has GCPs - returns boolean

Parameters

inImg – input image file

Returns

boolean True - has GCPs; False - does not have GCPs

rsgislib.imageutils.copyGCPs(srcImg, destImg)

Copy the GCPs from the srcImg to the destImg

Parameters
  • srcImg – Raster layer with GCPs

  • destImg – Raster layer to which GCPs will be added

rsgislib.imageutils.setImgThematic(imageFile)

Set all image bands to be thematic.

Parameters

imageFile – The file for which the bands are to be set as thematic

rsgislib.imageutils.doImagesOverlap(image1, image2, overThres=0.0)

Function to test whether two images overlap with one another. If the images have a difference projection/coordinate system then corners

Parameters
  • image1 – path to first image

  • image2 – path to second image

  • overThres – the amount of overlap required to return true (e.g., at least 1 pixel)

Returns

Boolean specifying whether they overlap or not.

Example:

import rsgislib.imageutils
img = "/Users/pete/Temp/LandsatStatsImgs/MSS/ClearSkyMsks/LS1MSS_19720823_lat52lon114_r24p218_osgb_clearsky.tif"
tile = "/Users/pete/Temp/LandsatStatsImgs/MSS/RefImages/LandsatWalesRegion_60m_tile8.kea"

overlap = rsgislib.imageutils.doImagesOverlap(tile, img)
print("Images Overlap: " + str(overlap))
rsgislib.imageutils.generateRandomPxlValsImg(inputImg, outputImg, gdalformat, lowVal, upVal)

Function which produces a 1 band image with random values between lowVal and upVal.

Where:

Parameters
  • inputImg – the input reference image

  • outputImg – the output image file name and path (will be same dimensions as the input)

  • gdalformat – the GDAL image file format of the output image file.

  • lowVal – lower value

  • upVal – upper value

rsgislib.imageutils.getUniqueValues(img, img_band=1)

Find the unique image values within an image band. Note, the whole image band gets read into memory.

Parameters
  • img – input image file path

  • img_band – image band to be processed (starts at 1)

Returns

array of unique values.

rsgislib.imageutils.getGDALImageCreationOpts(gdalformat=string)

This function returns a dict from by reading an environment variable to retrieve any creation options for a particular image file format. Variables should have the name RSGISLIB_IMG_CRT_OPTS_<GDAL_FORMAT> where a key value pairs separated by colons (:) is provided. The gdal format string must be upper case. For example: export RSGISLIB_IMG_CRT_OPTS_GTIFF=TILED=YES:COMPRESS=LZW:BIGTIFF=YES export RSGISLIB_IMG_CRT_OPTS_HFA=COMPRESSED=YES:USE_SPILL=YES:AUX=NO:STATISTICS=YES

Where:

Parameters

gdalformat – is a string specifying the GDAL image file format of interest.

Returns

a dict of the options.