Tools for Remote Sensing Data Analysis

Toolbox for remote sensing image processing and analysis such as calculating spectral indices, principal component transformation, unsupervised and supervised classification or fractional cover analyses.

Build Status CRAN version codecov

RStoolbox is an R package providing a wide range of tools for your every-day remote sensing processing needs. The available tool-set covers many aspects from data import, pre-processing, data analysis, image classification and graphical display. RStoolbox builds upon the raster package, which makes it suitable for processing large data-sets even on smaller workstations. Moreover in most parts decent support for parallel processing is implemented.

For more details have a look at the functions overview.


The package is now on CRAN and can be installed as usual via


To install the latest version from GitHub you need to have r-base-dev (Linux) or Rtools (Windows) installed. Then run the following lines:



RStoolbox 0.2.4


  • function oneHotEncode: splits a single rasterLayer into multiple layers (one per class) with one-hot encoding, i.e. pixel value = 1 for matches, pixel value = 0 for all other classes (background).
  • ggR() can now display more than one layer. Each layer can be plotted to a subplot in a multi-panel grafic.
  • encodeQA(), decodeQA() and classifyQA() can now deal with the new QA format introduced with Landsat Collection data. Legacy QA designations can still be interpreted by setting the legacy argument.
  • new predict() method for unsupervised classification models (unsuperClass).


  • all radCor DOS methods now work for Landsat 8 OLI


  • fix unsuperClass for algorithms other than Hartigan-Wong (reported by Alex Ilich)

RStoolbox 0.2.2


  • added tasseledCap coefficients for Quickbird, Spot5 and RapidEye


  • readEE 'Date' column is now returned as POSIXct instead of POSIXlt


  • corrected tasseledCap coefficient for Landsat 5 TM (#40, reported by @philipperufin)

RStoolbox 0.2.1


  • fixed non-portable c++ headers

RStoolbox 0.2.0


  • function mesma for spectral unmixing (#33, provided by Jakob Schwalb-Willmann)


  • improved NA handling and faster implementation of mlc classifier (#32, pull request by Neal Fultz)
  • adapt to upcoming caret version (new constraint caret >= 6.0-79)

RStoolbox 0.1.10


  • fix tests for upcoming raster version

RStoolbox 0.1.9


  • adapt to new caret version
  • fix readEE for new EarthExplorer formats
  • corrected sign of greenness tasseledCap coefficient for Landsat5 TM band 1 (reported by Thomas Day)
  • adapt readMeta and stackMeta to new Landsat collection 1 metadata

RStoolbox 0.1.8


  • spectralIndices() can now apply a mask internally, e.g. to exclude cloud pixels. New arguments are: maskLayer and maskValue (suggested by Andrea Hess).
  • added spectral index GNDWI


  • update readEE() to deal with new EarthExplorer export columns (reported by Christian Bauer)

RStoolbox 0.1.7


  • spectralIndices() has a new argument skipRefCheck, which skips the heuristic check for reflectance-like values [0,1] which is run if EVI/EVI2 are requested. This can be usefull if clouds with reflectance > 1.5 are part of the image.
  • superClass() now returns the geometries which were used for validation, e.g. polygons (under $validation$geometry) and also the exact samples taken for validation including cell number and coordinates ($validation$validationSamples)
  • added example data-set for spectral library see ?readSLI
  • increased overall test coverage


  • ESUN lookup tables for radCor() are adjusted to match current USGS recommendations from:
  • spectralIndices() swir wavelength ranges are now defined consistently and correctly. Bands formerly provided as swir1 (version <1.7.0) should now (>=1.7.0) be provided as swir2 and former swir2 as swir3 respectively (see docu). The actual calculations were correct, but the naming was off.


  • fix ggR() and ggRGB() in annotation mode (default). No image was drawn and excessive memory allocation requested (= RStudio crash) (reported by Christian Walther)
  • fix spectralIndices() documentation for NDWI. Formula was based on McFeeters1996 but attributed to Gao1996. Now there is NDWI (McFeeters) and NDWI2 (Gao) (reported by Christian Bauer)
  • estimateHaze() now ensures correct histogram order, which could be off when raster had to read from disk (reported by Xavier Bailleau).
  • readMeta() now makes concise bandnames also for Landsat Collection MTL files.
  • fix radCor() for Landsat 4 TM (reported by Thomas Day)
  • classifyQA() confidence layer for type='water' now correctly returns only confidence levels in [1,3]
  • enable reading ENVI plot files in ASCII mode with readSLI()


  • spectralIndices() index LSWI has been deprecated, as it is identical with the now available NDWI2.

RStoolbox 0.1.6


  • fix import issue: replace deprecated export from caret

RStoolbox 0.1.5


  • If the bandSet argument in radCor() is used to process only a subset of bands it will no longer return unprocessed bands along with processed bands. Instead only processed bands are returned.
  • By default superClass() will now use dataType = 'INT2S' for classification maps to avoid issues with raster NA handling in INT1U
  • Allow reading and importing from Landsat MSS MTL files with readMeta() and stackMeta() (@aszeitz, #7)


  • fix readMeta time-stamp conversion now correctly set to GMT time (@mraraju, #12)
  • radCor caused R to crash if bandSet was a single band
  • fix single RasterLayer capability for superClass
  • spectralIndices now calculates all documented indices if specified to do so (@mej1d1, #6)
  • unsuperClass predicted map now handles NAs properly
  • pifMatch did not return adjusted image (@tmb3006, #13)


  • argument norm was dropped from rasterPCA, because it was effectively a duplicate of the standardized pca (spca) argument in the same function.

RStoolbox 0.1.4


  • new function validateMap() for assessing map accuracy separately from model fitting, e.g. after majority or MMU filtering
  • new function getValidation() to extract specific validation results of superClass objects (proposed by James Duffy)
  • new spectral index NDVIc (proposed by Jeff Evans)
  • new argument scaleFactor for spectralIndices() for calculation of EVI/EVI2 based on scaled reflectance values.
  • implemented dark object subtraction radCor(..,method='sdos') for Landsat 8 data (@BayAludra, #4)


  • superClass based on polygons now considers only pixels which have their center coordinate within a polygon
  • rasterCVA now returns angles from 0 to 360° instead of 0:45 by quadrant (reported by Martin Wegmann)
  • improved dark object DN estimation based on maximum slope of the histogram in estimateHaze (@BayAludra, #4)


  • superClass failed when neither valData or trainPartition was specified. regression introduced in 0.1.3 (reported by Anna Stephani)
  • spectralIndices valid value range of EVI/EVI2 now [-1,1]
  • radCor returned smallest integer instead of NA for some NA pixels
  • fix 'sdos' for non-contiguous bands in radCor (@BayAludra, #4)

RStoolbox 0.1.3


  • new logical argument predict for superClass. Disables prediction of full raster (validation is still conducted).
  • new generic predict() function for superClass objects. Useful to separate model training and prediction.
  • new example data set (landcover training polygons) for lsat example data under /extdata/trainingPolygons.rds


  • fix histMatch for single layers (affected also 'ihs' pan-sharpening)
  • fix superClass validation sampling for factors (character based factors could lead to wrong factor conversions and wrong validation results)
  • improved handling of of training polygons with overlaps and shared borders in superClass
  • improved checks and error messages for insufficient training polygons

RStoolbox 0.1.2

New: New model for superClass: maximum likelihood classification (model = "mlc")


  • Restrict calculation of EVI/EVI2 to reflectance data (#3)
  • Enforce valid value ranges in radCor: radiance: [0,+Inf], reflectance: [0,1]. Includes a new argument clamp to turn this on or off (on by default).

RStoolbox 0.1.1

Added kernlab to suggested packages to be able to test \donttest{} examples

RStoolbox 0.1.0

Initial release to CRAN (2015-09-05) with the following functions:

  • classifyQA()
  • cloudMask()
  • cloudShadowMask()
  • coregisterImages()
  • decodeQA()
  • encodeQA()
  • estimateHaze()
  • fortify.raster()
  • fCover()
  • getMeta()
  • ggR()
  • ggRGB()
  • histMatch()
  • ImageMetaData()
  • normImage()
  • panSharpen()
  • pifMatch()
  • radCor()
  • rasterCVA()
  • rasterEntropy()
  • rasterPCA()
  • readEE()
  • readMeta()
  • readRSTBX()
  • readSLI()
  • rescaleImage()
  • rsOpts()
  • sam()
  • saveRSTBX()
  • spectralIndices()
  • stackMeta()
  • superClass()
  • tasseledCap()
  • topCor()
  • unsuperClass()
  • writeSLI()

Included example data sets:

  • data(srtm)
  • data(lsat)
  • data(rlogo)

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.2.6 by Benjamin Leutner, 2 years ago,

Report a bug at

Browse source code at

Authors: Benjamin Leutner [cre, aut] , Ned Horning [aut] , Jakob Schwalb-Willmann [aut] , Robert J. Hijmans [ctb]

Documentation:   PDF Manual  

GPL (>= 3) license

Imports raster, caret, sp, XML, geosphere, ggplot2, reshape2, rgeos, rgdal, codetools, parallel, doParallel, foreach, Rcpp, methods

Suggests randomForest, kernlab, e1071, gridExtra, pls, testthat

Linking to Rcpp, RcppArmadillo

Imported by foster, rtsVis.

Suggested by PlanetNICFI, fieldRS, spatialEco.

See at CRAN