Function to create RGB images from Sentinel-2 reflectances.

  prod_type = NA,
  rgb_bands = 4:2,
  scaleRange = NA,
  outdir = NA,
  subdirs = NA,
  format = NA,
  compress = "DEFLATE",
  bigtiff = FALSE,
  tmpdir = NA,
  rmtmp = TRUE,
  proc_mode = "raster",
  parallel = TRUE,
  overwrite = FALSE,
  .log_message = NA,
  .log_output = NA



A vector of input filenames. Input files are paths of products already converted from SAFE format to a format managed by GDAL (use s2_translate to do it); their names must be in the sen2r naming convention (safe_shortname).


(optional) Output product (see safe_shortname for the list of accepted products). If not provided, it is retrieved from the file name.


(optional) 3-length integer vector, which the number of the bands to be used respectively for red, green and blue. Default is 4:2 (true colours). It is also possible to pass a list of 3-length integer vectors in order to create multiple RGB types for each input file. Notice that this is the actual number name of the bands: so, to use i.e. BOA band 11 (1610nm) use the number 11, even if band 11 is the 10th band of a BOA product (because band 10 is missing).


(optional) Range of valid values. If can be a 2-length integer vector (min-max for all the 3 bands) or a 6-length vector or 3x2 matrix (min red, min green, min blue, max red, max green, max blue). Default is to use c(0,2500) for bands 1-5; c(0,7500) bands 6-12.


(optional) Full name of the existing output directory where the files should be created. Default is the same directory of input reflectance files.


(optional) Logical: if TRUE, different indices are placed in separated outfile subdirectories; if FALSE, they are placed in outfile directory; if NA (default), subdirectories are created only if more than a single spectral index is required.


(optional) Format of the output file (in a format recognised by GDAL). Default is the same format of input images (or "GTiff" in case of VRT input images).


(optional) In the case a GTiff format is present, the compression indicated with this parameter is used.


(optional) Logical: if TRUE, the creation of a BigTIFF is forced (default is FALSE). This option is used only in the case a GTiff format was chosen.


(optional) Path where intermediate files (VRT) will be created. Default is a temporary directory. If tmpdir is a non-empty folder, a random subdirectory will be used.


(optional) Logical: should temporary files be removed? (Default: TRUE)


(optional) Character: if "gdal_calc", gdal_calc routines are used to compute indices; if "raster" or "stars", R functions are instead used (using respectively raster or stars routines). Note: default value ("raster") is the only fully supported mode. "gdal_calc" can be used only if a runtime GDAL environment can be properly configured (no assistance is provided in case of GDAL-related problems). "raster" mode is experimental. See s2_calcindices() for further details.


(optional) Logical: if TRUE, the function is run using parallel processing, to speed-up the computation for large rasters. The number of cores is automatically determined; specifying it is also possible (e.g. parallel = 4). If FALSE (default), single core processing is used.


(optional) Logical value: should existing thumbnails be overwritten? (default: TRUE)


(optional) Internal parameter (it is used when the function is called by sen2r()).


(optional) Internal parameter (it is used when the function is called by sen2r()).


A vector with the names of the created images.


License: GPL 3.0


L. Ranghetti, M. Boschetti, F. Nutini, L. Busetto (2020). "sen2r": An R toolbox for automatically downloading and preprocessing Sentinel-2 satellite data. Computers & Geosciences, 139, 104473. doi:10.1016/j.cageo.2020.104473 , URL:


Luigi Ranghetti, phD (2019)


# \donttest{
# Define file names
ex_in <- system.file(
  package = "sen2r"

# Run function
ex_out <- s2_rgb(
  infiles = ex_in,
  rgb_bands = list(c(11,8,4),c(9,5,4)),
  scaleRange = list(c(0,7500), matrix(c(rep(0,3),8500,6000,4000),ncol=2)),
  outdir = tempdir(),
  compress = 50
#> [2023-06-12 11:41:04] Generating image
#>        S2A2A_20190723_022_Barbellino_RGBb84B_10.tif...
#> [2023-06-12 11:41:05] Generating image
#>        S2A2A_20190723_022_Barbellino_RGB954B_10.tif...
#> 2 output RGB files were correctly created.
#> [1] "C:\\Users\\LUIGI~1.RAN\\AppData\\Local\\Temp\\RtmpQf8vCd/RGBb84B/S2A2A_20190723_022_Barbellino_RGBb84B_10.tif"
#> [2] "C:\\Users\\LUIGI~1.RAN\\AppData\\Local\\Temp\\RtmpQf8vCd/RGB954B/S2A2A_20190723_022_Barbellino_RGB954B_10.tif"

# Show output
oldpar <- par(mfrow = c(1,3), mar = rep(0,4))
image(stars::read_stars(ex_in), rgb = 4:2, maxColorValue = 3500, useRaster = TRUE)
image(stars::read_stars(ex_out[1]), rgb = 1:3, useRaster = TRUE)
image(stars::read_stars(ex_out[2]), rgb = 1:3, useRaster = TRUE)

# }