This repository contains additional resources for our paper:
B. Sovdat, M. Kadunc, M. Batič, G. Milčinski, Natural color representation of Sentinel-2 data. Submitted.
The true color image — defined as an image that strives to offer a natural color rendition of a scene — is one of the most widely used Earth observation products. In the context of satellite imagery, the true color should represent spectral responses of the satellite bands so as to match the color perceived by the human eye. However, most true color satellite products fail to achieve this.
When it comes to Sentinel-2 — an optical mission part of European Space Agency's Copernicus Program — the state-of-the-art true color products map Sentinel-2 MSI bands B4, B3, and B2 directly to sRGB components R, G, and B, respectively (sometimes with additional gain and gamma corrections in the sRGB space). This results in images with overly saturated and sometimes unrealistic colors.
Highlights of our contributions:
- We define the natural color product as the one matching the color perceived by the human eye.
- We propose two approaches for designing efficient algorithms for computing natural color.
- We implement and demonstrate several efficient algorithms for computing the natural color.
- We advocate correct sRGB encoding when preparing images for digital display.
- We urge that levels adjustment always be applied in the CIE LAB space.
The images below showcase the default true color (left) and the natural color (right) that we propose in our work.
True color | Natural color |
---|---|
Carrizo Plain National Monument | Carrizo Plain National Monument |
Izmir, Turkey | Izmir, Turkey |
Amposta, Spain | Amposta, Spain |
Venice, Italy | Venice, Italy |
The table belows is a listing of Sentinel-2 data used throughout the paper. Locations, their acquisition dates and links to EO Browser where user can reproduce the results from the article using JavaScript algorithms provided in the supplementary material.
Location name | Level | Date | Coordinates | EO Browser |
---|---|---|---|---|
Mount Bromo (Indonesia) | 1C | August 9, 2016 | 7.96° S 113.00° E | URL |
Sand dunes (Saudi Arabia) | 1C | September 7, 2017 | 19.57° N 48.63° E | URL |
Venice (Italy) | 1C | July 3, 2017 | 45.50° N 12.20° E | URL |
Carrizo Plain (California, USA) | 1C | March 28, 2017 | 35.05° N 120.00° W | URL |
Amposta (Spain) | 1C | August 4, 2017 | 40.67° N 0.58° E | URL |
Izmir (Turkey) | 1C | September 7, 2017 | 38.54° N 27.08° E | URL |
Venice (Italy) | 2A | July 3, 2017 | 45.50° N 12.20° E | URL |
Amposta (Spain) | 2A | August 4, 2017 | 40.67° N 0.58° E | URL |
You can try out the algorithms we've proposed via Sentinel Playground and EO Browser applications which run atop our interactive Sentinel-Hub platform.
All natural-color algorithms have been implemented as ready-to-use custom scripts (under ./scripts/
) that you can copy-and-paste into Sentinel Playground and/or EO Browser. Needless to say, you can also fiddle with the code!
For convenience we've collected the algorithms into a table with links where you can view them interactively in Sentinel Playground and/or EO Browser.
The table below summarizes each of the procedures used in the paper.
Procedure | Shorthand description | Custom script |
---|---|---|
I | DN -> sRGB |
true_color.js |
II | DN -> S2 -> sRGB*_lin -> sRGB_8bit |
aster_3x4_naive_gamma.js |
III | DN -> S2 -> XYZ -> LAB* -> XYZ -> sRGB_lin -> sRGB_8bit |
aster_3x4_proper_gamma.js |
IV | DN -> S2 -> XYZ -> sRBG_lin -> sRGB_8bit |
aster_3x4_no_gamma |
V | DN -> S2 -> XYZ -> sRGB*_lin -> sRGB_8bit |
aster_3x3_naive_gamma_I.js |
VI | DN -> S2 -> XYZ -> sRGB*_lin -> sRGB_8bit |
aster_3x3_naive_gamma.js |
VII | DN -> S2 -> XYZ -> LAB* -> XYZ -> sRGB_lin -> sRGB_8bit |
aster_3x3_proper_gamma.js |
VIII | DN -> S2 -> XYZ -> sRGB_lin -> sRGB_8bit |
aster_3x3_no_gamma.js |
IX | DN -> S2 -> XYZ -> sRGB*_lin -> sRGB_8bit |
basis_3x4_naive_gamma.js |
X | DN -> S2 -> XYZ -> LAB* -> XYZ -> sRGB_lin -> sRGB_8bit |
basis_3x4_proper_gamma.js |
XI | DN -> S2 -> XYZ -> sRGB_lin -> sRGB_8bit |
basis_3x4_no_gamma.js |
XII | DN -> S2 -> XYZ -> sRGB*_lin -> sRGB_8bit |
default_3x3_naive_gamma.js |
XIII | DN -> S2 -> XYZ -> LAB* -> XYZ -> sRGB_lin -> sRGB_8bit |
default_3x3_proper_gamma.js |
XIV | DN -> S2 -> XYZ -> sRGB_lin -> sRGB_8bit |
default_3x3_no_gamma.js |
We used the ASTER spectral library extensively for our experiments. The file used_aster_spectra.txt
contains the list of ASTER spectra used for fitting the mappings with least-squares method (described in detail in Subsection 2.1 of the paper).