Processing levels
A satellite doesn't measure reflectance. It measures a digital number (DN) for each pixel and band. That number mixes the light reflected by the surface with light absorbed and scattered by the atmosphere, shading from terrain, and the sensor's own response. Turning DNs into something physically meaningful takes several processing steps, and processing levels are the shorthand for how far along that chain a product is. This page explains the standard levels and then the two that Wyvern delivers, L1B and L2A, and how they differ in practice.
There are two kinds of correction. Radiometric correction converts DNs into physical units: first radiance, then reflectance. Geometric correction assembles the image, removes distortions from sensor tilt and terrain, and ties each pixel to a location on the ground.
Standard processing levels
The levels run from 0 to 4. Definitions vary between agencies and sensors, but the framework below is broadly shared.
| Level | Description | Wyvern data |
|---|---|---|
| Level 0 (L0) | Reconstructed, unprocessed instrument data at full resolution, with communication artifacts removed. Includes the image data, image metadata, and relevant ancillary data. | |
| Level 1A (L1A) | Reconstructed, unprocessed instrument data at full resolution, time-referenced and annotated with ancillary information such as camera settings, spacecraft altitude, and orbital ephemeris. | |
| Level 1B (L1B) | Image data radiometrically processed to at-sensor, or top-of-atmosphere (TOA), radiance. Includes geolocation and the calibration parameters used to produce it. | ✔️ |
| Level 2A (L2A) | Image data atmospherically corrected to bottom-of-atmosphere (BOA) surface reflectance. | ✔️ |
| Level 2B (L2B) | Definitions vary by provider. Commonly, variables derived from L2A reflectance at the same resolution and location. | |
| Level 3 (L3) | Data mapped onto a uniform space-time grid, usually averaged over space, time, or both. | |
| Level 4 (L4) | Model outputs or analysis results derived from lower-level data, often from several sources. |
Wyvern's data products
Wyvern delivers two processing levels, and the Open Data Program publishes both. L2A is the default: the root catalog states that all imagery is L2A surface reflectance unless otherwise noted, and a smaller L1B collection holds radiance scenes. Item IDs carry an _l1b or _l2a suffix, and the STAC item's processing:level property states the level directly.
The two products are not interchangeable. They differ in data type, scale factor, NoData value, and coordinate reference system, so code written against one will silently produce wrong numbers on the other.
| L1B top-of-atmosphere radiance | L2A surface reflectance | |
|---|---|---|
| Measures | At-sensor radiance | Bottom-of-atmosphere reflectance |
| Units | W m-2 sr-1 µm-1 | Unitless reflectance, 0 to 1 |
| Data type | float32 | uint16 |
| Scale factor | None | 0.0001, apply after masking |
| NoData | -9999 | 65535 |
| Coordinate reference system | Geographic WGS84 (EPSG:4326) | Per-scene UTM zone, read proj:epsg |
| Pixel geometry | Non-square in angular degrees | Square metres |
| Masks | Data Mask, Pixel Quality Mask | Data Mask, Pixel Quality Mask |
Both are delivered as cloud-optimized GeoTIFF (COG) alongside STAC .json metadata, with the metadata you need for further radiometric and geometric processing and for analysis such as spectral indices, classification, anomaly detection, material identification, sub-pixel unmixing, and target detection.
On L2A, mask NoData before you apply the scale factor. Scaling first turns 65535 into 6.5535, a value that looks plausible and corrupts every statistic you compute afterwards. Note also that the GeoTIFF's own scales tag is 1.0; the 0.0001 factor comes from the STAC item's raster:bands.
L1B geometry
L1B is georeferenced north-up to Geographic WGS84 (EPSG:4326) and radiometrically corrected to at-sensor radiance, using the spacecraft's position and pointing and the solar conditions at the time of acquisition. Because EPSG:4326 is in degrees, pixel size is set to the number of degrees that equals 5.3 m at the latitude of the scene centre. A degree of longitude shrinks towards the poles while a degree of latitude doesn't, so the pixels are non-square in degrees and the values change from scene to scene. At 40°N, for example, 5.3 m translates to roughly 0.0000621° longitude by 0.0000477° latitude.
L2A geometry
L2A is reprojected into the UTM zone that contains the scene, so pixels are square and measured in metres. Read the zone from the STAC item's proj:epsg property rather than assuming one, because scenes in the catalog span many zones. Each item also reports its ground sample distance in gsd; values sit close to 5.3 m and vary slightly with off-nadir angle.
Full specifications for both levels are in the Product Guide.
Working with L1B
L1B is the right starting point if you want to run your own atmospheric correction or study the atmosphere itself. For most surface analysis, start from L2A.
If you do use L1B, remember what radiance contains. On top of practical steps such as reprojecting to your project's coordinate reference system or clipping to your area of interest, the values still include the shape of the solar spectrum and the effect of the atmosphere. Ozone, water vapour, oxygen, and carbon dioxide absorb light at specific wavelengths, so less of it reaches the sensor there and the signal-to-noise ratio (SNR) in those bands is lower. The ranges where the atmosphere lets light through are called atmospheric windows.

A vegetation spectrum as L1B radiance (left) and as L2A reflectance after correction with ENVI QUAC (right). The dip near 760 nm on the left is oxygen absorption in the atmosphere. After correction it's gone, and the red edge between 680 and 750 nm is clear.
To get from L1B to surface reflectance you need an atmospheric correction tool. The atmospheric correction page lists the ones that work with Wyvern data.