27,000 small image patches of European land, 64 × 64 pixels each, cut by the EuroSAT authors (Helber et al.) from Sentinel-2A satellite images and sorted into 10 land-use and land-cover classes. The paper describes scenes over European cities in over 34 countries, recorded throughout the year. Neither the paper nor the tiles give an acquisition date or a location for any individual tile.
This page follows the data from the Sentinel-2 Multispectral Imager to the 12,000 × 768 pooled-pixel matrix: what was measured, what the EuroSAT RGB release holds, and how 27,000 held tiles become the matrix. The earliest level held is the released JPEG tiles, so the steps before them are documented by the EuroSAT authors, and the steps after them are reproduced here.
Patrick Helber, Benjamin Bischke, Andreas Dengel and Damian Borth.
Upstream image content: Zenodo v2; local ZIP packaging differs.
The EuroSAT authors took their images from Sentinel-2A, one of two identical Sentinel-2 land-monitoring satellites. Both carry the Multispectral Imager (MSI), which records 13 spectral bands at 10, 20 or 60 m per pixel. Together they cover almost all of Earth’s land surface about every five days. The authors downloaded Sentinel-2A images via Amazon S3 and chose images with a low cloud level, using the cloud value ESA provides for each image (Helber et al., §III-A).
The RGB release keeps the optical red, green and blue bands, as JPEG (release description). In the paper’s Table I these are B04 (665 nm), B03 (560 nm) and B02 (490 nm), all at 10 m per pixel; the authors’ repository converts bands 4, 3 and 2, in that order. This page cannot show the MSI’s measurements, only the released 8-bit tiles.
From the satellite to the held file
- DocumentedSentinel-2A MSI
Multispectral Imager, 13 bands at 10, 20 or 60 m. Scenes over European cities, low cloud level, recorded throughout the year (paper, §III-A).
- DocumentedEuroSAT authors
64 × 64 patches in 10 classes. No atmospheric correction, and images with the resulting colour cast were kept. All images checked by hand several times; mislabelled patches and patches full of snow or ice removed (paper, §III-B).
- DocumentedRGB conversion
Red, green and blue written as 8-bit JPEG. The exact scaling for the release is not published; the authors’ repository gives one option (bands 4, 3, 2) and warns that it clips.
- DocumentedEuroSAT RGB release
Zenodo version v2, DOI 10.5281/zenodo.7711810.
- ReproducedMember-by-member match
27,000 of 27,000 JPEGs identical to the release by name and SHA-256.
- HeldHeld file
One ZIP, 94.3 MB, 27,000 JPEG members. A repackaged copy: the container differs from the official one, and who repacked it is not recorded.
Documented: described by the EuroSAT authors, not rerun here. Reproduced: rerun or checked here. Held: the bytes this page reads.
One acquisition unit: one tile
A tile is one 64 × 64-pixel patch with three colour channels, stored as one JPEG in the folder of its class. The archive is organised by tile, and a tile is also the unit the authors labelled.
What each tile records
| Field | Unit | Meaning |
|---|---|---|
| member name | — | EuroSAT_RGB/<Class>/<Class>_<n>.jpg. The folder is the class label; n is a sequence number from 1 within each class, not a place or a date |
| pixel row, column | pixel | 0–63 from the top left; 10 m per pixel (paper) |
| R | 8-bit, 0–255 | Red: Sentinel-2 band B04, 665 nm |
| G | 8-bit, 0–255 | Green: band B03, 560 nm |
| B | 8-bit, 0–255 | Blue: band B02, 490 nm. For all three channels: display intensities from the RGB conversion, not calibrated reflectance |
Pixel size: 10 m, from the paper. Measured here: all 27,000 headers give 64 × 64 pixels, so one tile spans 640 m (64 × 10 m).
The archive, opened
One top-level folder, 10 class folders, and nothing but JPEGs: 27,000 of 27,000 members. There is no README, licence, metadata or index file inside.
eurosat-rgb.zip 27,000 members, 94.3 MB └─ EuroSAT_RGB/ ├─ AnnualCrop/ AnnualCrop_1.jpg … AnnualCrop_3000.jpg 3,000 ├─ Forest/ Forest_1.jpg … Forest_3000.jpg 3,000 ├─ HerbaceousVegetation/ HerbaceousVegetation_1.jpg … HerbaceousVegetation_3000.jpg 3,000 ├─ Highway/ Highway_1.jpg … Highway_2500.jpg 2,500 ├─ Industrial/ Industrial_1.jpg … Industrial_2500.jpg 2,500 ├─ Pasture/ Pasture_1.jpg … Pasture_2000.jpg 2,000 ├─ PermanentCrop/ PermanentCrop_1.jpg … PermanentCrop_2500.jpg 2,500 ├─ Residential/ Residential_1.jpg … Residential_3000.jpg 3,000 ├─ River/ River_1.jpg … River_2500.jpg 2,500 └─ SeaLake/ SeaLake_1.jpg … SeaLake_3000.jpg 3,000
| Class | Tiles | Numbers | Unpacked | Tiles with a clipped pixel |
|---|---|---|---|---|
| AnnualCrop | 3,000 | 1–3,000 | 9.8 MB | 826 |
| Forest | 3,000 | 1–3,000 | 7.9 MB | 0 |
| HerbaceousVegetation | 3,000 | 1–3,000 | 10.6 MB | 432 |
| Highway | 2,500 | 1–2,500 | 9.5 MB | 869 |
| Industrial | 2,500 | 1–2,500 | 11.4 MB | 2,464 |
| Pasture | 2,000 | 1–2,000 | 6.2 MB | 58 |
| PermanentCrop | 2,500 | 1–2,500 | 9.9 MB | 1,037 |
| Residential | 3,000 | 1–3,000 | 13.1 MB | 1,791 |
| River | 2,500 | 1–2,500 | 8.5 MB | 459 |
| SeaLake | 3,000 | 1–3,000 | 5.0 MB | 33 |
One tile, opened
The segments of EuroSAT_RGB/Residential/Residential_2420.jpg (4,795 bytes), in file order up to the image data. Every tile in the archive has the same 10 segments.
| Segment | Bytes | Content |
|---|---|---|
SOI | — | |
APP0 | 16 | JFIF 1.01, density 1×1 (unit 0) |
DQT | 67 | quantisation table 0: all 64 values 1 |
DQT | 67 | quantisation table 1: all 64 values 1 |
SOF0 baseline | 17 | 64×64, 3 components, 8-bit, sampling 2×2 / 1×1 / 1×1 |
DHT | 26 | |
DHT | 38 | |
DHT | 25 | |
DHT | 35 | |
SOS | 12 |
One tile as values
The 4,096 pixels of the same tile, counted by value in each channel. Below it, the same count over all 27,000 tiles: the spike at 255 is clipping.
What the archive covers
One lane per class, one mark per tile, placed by the sequence number in its name. There are no gaps and no duplicates: 0 byte-identical and 0 pixel-identical pairs. Nothing inside the tiles can place them in time or on a map, so this is the only layout the data supports.
What the raw record does not give you directly
- No tile carries a date, a place or a scene. All 27,000 JPEGs carry only a JFIF header, with no Exif, GPS or comment segment. The paper and the release describe the images as geo-referenced, but the RGB JPEGs keep none of that.
- The only dates are packing dates. The ZIP stores 23 distinct member timestamps, 2025-03-06 04:03:46 to 04:04:30. They record when the archive was written, not when the ground was imaged.
- The values are display-scaled and clip. 7,969 tiles contain at least one pixel at 255, and 0.86% of all pixels do. The authors’ example conversion maps 0–2,750 to 1–255 and notes that it clips.
- JPEG stores colour at half resolution. Every header samples luminance 2 × 2 against colour 1 × 1 (4:2:0). The quantisation tables are all ones in 27,000 tiles, the setting of the highest quality, but colour detail finer than 2 pixels is already averaged.
- The classes are unequal. 2,000 to 3,000 tiles per class; any count over the whole archive inherits that imbalance.
Steps 1 to 3 are the EuroSAT authors’; the rest is the satellite demo’s loader, replayed here on the held archive. It keeps every readable tile, draws a balanced sample and averages 4 × 4 blocks. No tile is rejected for quality: the only reduction is the sample.
| Step | Evidence | Operation | Result |
|---|---|---|---|
| 1 | Documented | Sentinel-2A images over European cities, low cloud level, throughout the year | no scene count published |
| 2 | Documented | Cut 64 × 64 patches in classes chosen for their European Urban Atlas coverage; check by hand; no atmospheric correction | 27,000 patches, 10 classes (paper) |
| 3 | Documented | Write red, green and blue as 8-bit JPEG; scaling not published | EuroSAT RGB, version v2 |
| 4 | Reproduced | Match every held member to the release by name and SHA-256 | 27,000 of 27,000 identical |
| 5 | Reproduced | Read each member; its folder is its class (sorted, ids 0–9); decode to 64 × 64 × 3 values | 27,000 tiles, 0 unreadable |
| 6 | Reproduced | Draw 1,200 tiles per class without replacement: one random generator, seed 0, used class by class in sorted order | 12,000 tiles (−15,000) |
| 7 | Reproduced | Average each 4 × 4 block of pixels in each channel | 12,000 × 16 × 16 × 3 |
| 8 | Reproduced | Flatten, divide by 255 in 32-bit floats; keep the class and the member name aside as labels, never features | 12,000 × 768 |
Where the tiles go
Counts by class
| Class | Held | Decoded | Drawn | Not drawn |
|---|---|---|---|---|
| AnnualCrop | 3,000 | 3,000 | 1,200 | 1,800 |
| Forest | 3,000 | 3,000 | 1,200 | 1,800 |
| HerbaceousVegetation | 3,000 | 3,000 | 1,200 | 1,800 |
| Highway | 2,500 | 2,500 | 1,200 | 1,300 |
| Industrial | 2,500 | 2,500 | 1,200 | 1,300 |
| Pasture | 2,000 | 2,000 | 1,200 | 800 |
| PermanentCrop | 2,500 | 2,500 | 1,200 | 1,300 |
| Residential | 3,000 | 3,000 | 1,200 | 1,800 |
| River | 2,500 | 2,500 | 1,200 | 1,300 |
| SeaLake | 3,000 | 3,000 | 1,200 | 1,800 |
| All | 27,000 | 27,000 | 12,000 | 15,000 |
Follow one tile
Pick a tile to see it at each step, from its JPEG to the row the matrix stores.
Checks against the release and the workflow
| Check | Result |
|---|---|
| Held JPEGs against EuroSAT RGB v2, by name and SHA-256 | 27,000 of 27,000 identical |
| Held ZIP against the official ZIP | container differs: 94,317,673 vs 94,658,721 bytes |
| Tiles and class sizes against the paper (27,000; 2,000 to 3,000 per class) | 27,000; 2,000 to 3,000 |
| Image headers | 27,000 of 27,000: 64 × 64, 3 channels, 8-bit baseline |
| Replayed sample against the Satellite image vector quantization row list | identical: same 12,000 members in the same order |
| Replayed matrix against the Satellite image vector quantization input | identical, 12,000 × 768, byte for byte |
The page keeps the held bytes. Their image content is the official release’s, and the matrix built from them is exactly the one the Satellite image vector quantization workflow analyses.
Each row is one sampled tile. Rows are grouped by class in sorted order, 1,200 per class, and within a class they follow the order of the draw. The 768 columns are the 16 × 16 blocks times three channels; each cell is a block’s mean value divided by 255. Below, each row is drawn as the picture its 768 values make: the first 20 rows of every class. Hover a picture to read it.
Display copy: values rounded to the nearest 1/255, the precision of the 8-bit source; the stored values are 32-bit block means from 0.07304 to 1.00000. 1,933 cells in 391 rows are exactly 1: blocks that are clipped in all 16 pixels.
The 200 drawn rows, with their mean per channel
| Features | Unit | Meaning |
|---|---|---|
| columns 0–767 | fraction of 255 | Column j is channel j mod 3 (R, G, B) of block b = ⌊j / 3⌋, which sits at block row ⌊b / 16⌋ and block column b mod 16; one block is 4 × 4 pixels, 40 × 40 m |
Labels kept beside the matrix
| Label | Unit | Meaning |
|---|---|---|
| class | id 0–9 | Position of the class folder in sorted order: AnnualCrop, Forest, HerbaceousVegetation, Highway, Industrial, Pasture, PermanentCrop, Residential, River, SeaLake. For evaluation only, never an input |
| member name | — | The JPEG the row came from; ties every row back to the archive |
The EuroSAT authors license the dataset under the MIT licence and also refer users to the Copernicus Sentinel Data Terms and Conditions. Copyright © 2023 Patrick Helber. The MIT copyright and permission notices must accompany copies or substantial portions. The authors request citation of their two EuroSAT papers: Helber et al., IEEE JSTARS 2019, and Helber et al., IGARSS 2018.
- The sample holds 1,200 tiles per class, so its class proportions are equal; the archive’s range from 2,000 to 3,000.
- 4 × 4 averaging removes detail finer than 40 m (4 pixels × 10 m); nothing downstream can recover it.
- The values are block means of display-scaled JPEG intensities, not reflectance. 1,933 cells in 391 rows are exactly 1 because the source pixels are clipped.
- Rows cannot be grouped by scene, place or date: no tile carries any of them.
- The tiles are JPEG with colour at half resolution, so any reconstruction error computed from this matrix is measured against already-compressed values.
Helber, P., Bischke, B., Dengel, A., and Borth, D. (2019). EuroSAT: A Novel Dataset and Deep Learning Benchmark for Land Use and Land Cover Classification. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, 12(7), 2217–2226. DOI: 10.1109/JSTARS.2019.2918242.
Satellite image vector quantization: its Design matrix and PCA variance curve are this 12,000 × 768 matrix; its clustering and patch codebook read the same 12,000 tiles through other descriptions; its classification experiment splits the same tiles into training, validation and test images; and its Key Findings page rebuilds the 2,400 test images from patch numbers.