Skip to content

Values, scale and offset

Both missions store pixel values as integers. To get reflectance you apply a scale and an offset, as the STAC raster extension defines:

value = scale × DN + offset

DN is the stored integer (“digital number”). The scale and offset are published per band, and for Sentinel-2 the offset depends on the scene.

Collection Bands Scale Offset Result
sentinel-2-l2a B01 to B12 0.0001 -0.1 for processing baseline 04.00 or later, 0 before reflectance
landsat-ot-l2 SR_B1 to SR_B7 0.0000275 -0.2 reflectance
landsat-ot-l2 ST_B10 (lwir11) 0.00341802 149.0 kelvin

So Sentinel-2 Collection 1 reflectance is DN × 0.0001 − 0.1, and Landsat Collection 2 reflectance is DN × 0.0000275 − 0.2.

From processing baseline 04.00 on, Sentinel-2 L2A values carry an extra 1,000 (ESA’s BOA_ADD_OFFSET), which is where the −0.1 comes from: −1,000 / 10,000. Earth Search’s Collection 1 includes older scenes reprocessed to the same convention. The right offset is chosen per item from its s2:processing_baseline property, never from the acquisition date.

Getting this wrong biases any ratio. NDVI computed as (nir - red) / (nir + red) on raw Collection 1 integers is not the NDVI of the reflectances, because both bands carry the extra 1,000. Convert first, or ask the API for reflectance.

Layers that are classes, probabilities or bit fields, such as Sentinel-2 SCL and Landsat QA_PIXEL, have no scale. They always come back exactly as stored, whatever options you choose.

Available now Three options control the numbers in a GeoTIFF. In POST /v1/process they sit in input.data[].processing; the older download API on tiles.satellitedata.net takes them at the top level with different defaults.

Option POST /v1/process Download API
units units, default REFLECTANCE units, default DN
harmonization harmonize, default offset_removed harmonize, default none
negatives to zero clipNegative, default false clamp, default false
Value You get Type Nodata
DN Stored integers, with the scale and offset written into the GeoTIFF the band’s own type, usually uint16 0
REFLECTANCE Physical values: reflectance for spectral bands, kelvin for lwir11, kilometres for ST_CDIST float32 NaN

With DN, read the scale and offset from the file (GDAL and rasterio expose them) and apply them yourself.

Value Effect
none No adjustment. Sentinel-2 DN keep the +1,000 offset of baseline 04.00 and later.
offset_removed Sentinel-2 DN from baseline 04.00 on are shifted by −1,000, so every baseline shares DN = 10,000 × reflectance. Output becomes int16, so negative values survive. Other collections are unchanged.

offset_removed applies to DN output. With REFLECTANCE the offset is already applied, so the two levels give the same values. See Harmonization levels.

clipNegative: true (process) or clamp: true (download API) sets converted values below zero to zero, which is what Sentinel Hub does with harmonizeValues. It applies to harmonize: "offset_removed" and to units: "REFLECTANCE". Stored DN are never negative, so the download API rejects clamp with units: "DN" and harmonize: "none", and process ignores clipNegative there. Class and QA layers are untouched.

In process, the GeoTIFF type follows from the options: REFLECTANCE gives FLOAT32; DN with offset_removed on Sentinel-2 gives INT16; DN with none, or any Landsat DN, gives UINT16. output.sampleType, if given, must match.

You want POST /v1/process processing Download API
Reflectance as float nothing (the default) units: "REFLECTANCE"
Reflectance as float, never below 0 clipNegative: true units: "REFLECTANCE", clamp: true
Raw stored integers units: "DN", harmonize: "none" nothing (the default)
Integers that keep negative reflectance units: "DN" harmonize: "offset_removed"
Sentinel Hub’s harmonized integers (DN = 10,000 × reflectance, negatives clipped to 0) units: "DN", clipNegative: true harmonize: "offset_removed", clamp: true

The render presets account for the offsets. The NDVI recipes subtract each collection’s offset before taking the ratio, so Sentinel-2 and Landsat NDVI agree, and the Landsat true-colour stretch from DN 7,273 to 18,182 is reflectance 0 to 0.3. See Map tiles.

  • More units: KELVIN, CELSIUS, and units for radar, elevation, angles and fractions.
  • bandpass_adjusted and nbar harmonization.
  • Response metadata reporting the units and harmonization each scene received.