Satellite Image Classification

Teach a computer to read the Earth from space

High School Space Systems 2–4 weeks
Last reviewed: March 2026

Overview

Every day, hundreds of satellites photograph Earth's surface in incredible detail. But raw images aren't useful until someone — or something — interprets them. In this project, you'll build a machine learning classifier that automatically identifies what's in a satellite image: city, farmland, forest, or ocean.

You'll use scikit-learn, the most approachable ML library in Python, to train a model on the EuroSAT dataset — 27,000 labeled satellite images from the European Space Agency's Sentinel-2 satellite. By the end, you'll have a working classifier and a solid understanding of how ML is applied to real aerospace data.

This is the same type of work that powers precision agriculture, deforestation monitoring, disaster response, and military intelligence.

What You'll Learn

  • Load and explore a real satellite image dataset using Python
  • Understand how pixel data becomes feature vectors for ML
  • Train and evaluate a classification model with scikit-learn
  • Interpret a confusion matrix and classification report
  • Connect remote sensing to real-world aerospace applications

Step-by-Step Guide

1

Set Up Your Environment

Install Python 3, then install the libraries you'll need:

pip install scikit-learn numpy matplotlib pillow

Use VS Code or Jupyter Notebook — Jupyter is especially good for this project because you can see images inline as you work.

2

Download the EuroSAT Dataset

Download the EuroSAT RGB dataset from the official source. It contains 27,000 images in 10 land-use classes: Annual Crop, Forest, Herbaceous Vegetation, Highway, Industrial, Pasture, Permanent Crop, Residential, River, and Sea/Lake.

Each image is 64×64 pixels — small enough to process on any laptop, but real satellite data captured by Sentinel-2 at 10m resolution.

3

Explore and Visualize

Write a Python script to display sample images from each class. Use matplotlib to create a grid showing one example per category. This helps you understand what the model needs to learn.

Look for patterns: How do forests differ from pastures? Can you tell highways from rivers? The features that are obvious to your eye are what the model needs to discover statistically.

4

Prepare the Data

Load all images and flatten each 64×64×3 image into a single feature vector of 12,288 values. Split the data into training (80%) and test (20%) sets using scikit-learn's train_test_split.

Normalize pixel values to the 0–1 range by dividing by 255. This helps the ML algorithm converge faster.

5

Train Your Classifier

Start with a Random Forest classifier — it's fast, works well on image data, and doesn't require GPU acceleration. Train it on your training set:

from sklearn.ensemble import RandomForestClassifier

Try 100 estimators first. Training should take under a minute on most laptops. Then predict on the test set and check your accuracy.

6

Evaluate the Results

Generate a confusion matrix and a classification report using scikit-learn. Which classes does the model confuse? (Hint: Annual Crop and Permanent Crop are often mixed up — can you see why?)

Plot the confusion matrix as a heatmap using matplotlib. This visualization is standard in ML and something you'll use throughout your career.

7

Improve and Experiment

Try improving accuracy by experimenting with different classifiers: SVM, k-Nearest Neighbors, or a simple neural network (MLPClassifier). Compare their performance.

Document what worked best and why. Did some classes remain hard to classify? What additional data or features might help?

Go Further

Take this project further:

  • Try deep learning — use PyTorch or TensorFlow to build a CNN (convolutional neural network) that can achieve 95%+ accuracy on EuroSAT
  • Add multispectral bands — Sentinel-2 has 13 spectral bands, not just RGB. The infrared bands are especially useful for vegetation classification
  • Build a web app — create a simple interface where users can upload a satellite image and get a classification result
  • Enter a Kaggle competition — several active competitions use satellite imagery for land use, building detection, and change monitoring