EuroSAT RGB

From the released Sentinel-2 image tiles to a 12,000 × 768 pooled-pixel matrix, the design matrix of the Satellite image vector quantization workflow.

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.

10
classes
1
ZIP archive
27,000
tiles
12,288
values per tile
12,000 × 768
design matrix
Creators

Patrick Helber, Benjamin Bischke, Andreas Dengel and Damian Borth.

Release

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

  1. 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).

  2. 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).

  3. 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.

  4. DocumentedEuroSAT RGB release

    Zenodo version v2, DOI 10.5281/zenodo.7711810.

  5. ReproducedMember-by-member match

    27,000 of 27,000 JPEGs identical to the release by name and SHA-256.

  6. 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

FieldUnitMeaning
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, columnpixel0–63 from the top left; 10 m per pixel (paper)
R8-bit, 0–255Red: Sentinel-2 band B04, 665 nm
G8-bit, 0–255Green: band B03, 560 nm
B8-bit, 0–255Blue: 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).

1
ZIP archive
94.3 MB
stored, 91.8 MB unpacked
27,000
JPEG tiles
12,288
values per tile

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
ClassTilesNumbersUnpackedTiles with a clipped pixel
AnnualCrop3,0001–3,0009.8 MB826
Forest3,0001–3,0007.9 MB0
HerbaceousVegetation3,0001–3,00010.6 MB432
Highway2,5001–2,5009.5 MB869
Industrial2,5001–2,50011.4 MB2,464
Pasture2,0001–2,0006.2 MB58
PermanentCrop2,5001–2,5009.9 MB1,037
Residential3,0001–3,00013.1 MB1,791
River2,5001–2,5008.5 MB459
SeaLake3,0001–3,0005.0 MB33

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.

SegmentBytesContent
SOI—
APP016JFIF 1.01, density 1×1 (unit 0)
DQT67quantisation table 0: all 64 values 1
DQT67quantisation table 1: all 64 values 1
SOF0 baseline1764×64, 3 components, 8-bit, sampling 2×2 / 1×1 / 1×1
DHT26
DHT38
DHT25
DHT35
SOS12

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.

StepEvidenceOperationResult
1DocumentedSentinel-2A images over European cities, low cloud level, throughout the yearno scene count published
2DocumentedCut 64 × 64 patches in classes chosen for their European Urban Atlas coverage; check by hand; no atmospheric correction27,000 patches, 10 classes (paper)
3DocumentedWrite red, green and blue as 8-bit JPEG; scaling not publishedEuroSAT RGB, version v2
4ReproducedMatch every held member to the release by name and SHA-25627,000 of 27,000 identical
5ReproducedRead each member; its folder is its class (sorted, ids 0–9); decode to 64 × 64 × 3 values27,000 tiles, 0 unreadable
6ReproducedDraw 1,200 tiles per class without replacement: one random generator, seed 0, used class by class in sorted order12,000 tiles (−15,000)
7ReproducedAverage each 4 × 4 block of pixels in each channel12,000 × 16 × 16 × 3
8ReproducedFlatten, divide by 255 in 32-bit floats; keep the class and the member name aside as labels, never features12,000 × 768

Where the tiles go

Counts by class
ClassHeldDecodedDrawnNot drawn
AnnualCrop3,0003,0001,2001,800
Forest3,0003,0001,2001,800
HerbaceousVegetation3,0003,0001,2001,800
Highway2,5002,5001,2001,300
Industrial2,5002,5001,2001,300
Pasture2,0002,0001,200800
PermanentCrop2,5002,5001,2001,300
Residential3,0003,0001,2001,800
River2,5002,5001,2001,300
SeaLake3,0003,0001,2001,800
All27,00027,00012,00015,000

Follow one tile

Pick a tile to see it at each step, from its JPEG to the row the matrix stores.

1 · rawThe member in the archive
2 · decode64 × 64 pixels, 3 channels
3 · sampleDrawn into the balanced sample?
4 · poolEach 4 × 4 block replaced by its mean
5 · the stored rowIts 768 values, channel by channel over the 256 blocks

Checks against the release and the workflow

CheckResult
Held JPEGs against EuroSAT RGB v2, by name and SHA-25627,000 of 27,000 identical
Held ZIP against the official ZIPcontainer 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 headers27,000 of 27,000: 64 × 64, 3 channels, 8-bit baseline
Replayed sample against the Satellite image vector quantization row listidentical: same 12,000 members in the same order
Replayed matrix against the Satellite image vector quantization inputidentical, 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.

12,000
rows
768
features
2
label columns

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

FeaturesUnitMeaning
columns 0–767fraction of 255Column 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

LabelUnitMeaning
classid 0–9Position 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

Licence / attribution

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.

Reference

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.