It was fairly early on in my data science explorations that I discovered ‘remote sensing’. I have always known that satellite imaging was extant tech, and that most people interact with it in one way or another, probably through something akin to Google Maps. Though I had never given it much ‘formal’ thought, I assumed that this type of space age tech was limited to governments and powerful corporations.
That assumption was markedly false—I was interested to learn.
While the ability to actually put satellites into space and build the massive requisite infrastructure is still relegated to those entities, some of them open source the data and give it away for free. The bleeding edge of this world is still far outside our hands; under ideal weather conditions some satellites are capable of recognizing individual human faces if they gaze skyward at an inopportune moment, and other satellites are experimenting with live video feeds. At this point, several corporations and governments are capturing the full land surface of the Earth, every day, in high-resolution.
Nerds like you and I are walled within that panopticonian garden, but we still have access to other, lesser resolved, but still very useful remote sensed data. Anyone can learn to interact with this data and use it for whatever they want.
A TLDR Intro to Sentinel-2 Satellites
In this article, I am going to focus exclusively on Sentinel data. First though, I will describe some of the basics. There are many types of imaging satellites: some like Sentinel-1 capture radar, others like Sentinel-2, capture light. As you may be aware, the light spectrum is significantly larger than what our human eyes can see, and the Sentinel-2 satellites can see far more than we can.
Sentinel-2 satellites carry the Multi-Spectral Instrument (MSI) that images Earth in 13 spectral bands across different wavelengths. Here are the specific wavelengths for both Sentinel-2A and Sentinel-2B satellites.
Band | Sentinel-2A Central Wavelength (nm) | Sentinel-2B Central Wavelength (nm) | Spatial Resolution (m) |
---|---|---|---|
1 | 442.7 | 442.2 | 60 |
2 | 492.4 | 492.1 | 10 |
3 | 559.8 | 559.0 | 10 |
4 | 664.6 | 664.9 | 10 |
5 | 704.1 | 703.8 | 20 |
6 | 740.5 | 739.1 | 20 |
7 | 782.8 | 779.7 | 20 |
8 | 832.8 | 832.9 | 10 |
8A | 864.7 | 864.0 | 20 |
9 | 945.1 | 943.2 | 60 |
10 | 1373.5 | 1376.9 | 60 |
11 | 1613.7 | 1610.4 | 20 |
12 | 2202.4 | 2185.7 | 20 |
These bands range from visible light (bands 2-4), through near-infrared (bands 5-9), to short-wave infrared (bands 10-12), with specialized bands for coastal aerosol detection (band 1) and cirrus cloud detection (band 10).
The spatial resolution and spectral nature of this data is quite intuitive and easy to understand with the right explanation.
What Exactly is a Raster?
We get one raster file for each band within the Sentinel-2 data. The raster file contains cells ordered and arranged in a big grid. At the 10 meter resolution, a 10 by 10 meter square accounts for a single cell’s worth of information. At the 60 meter resolution, a 60 by 60 meter square area gives us a single cell’s worth of information. The information within each cell is simply a measurement of amplitude. So if we open a 10 meter band 3 raster file from the Sentinel-2A sat and look at the value of the top left cell, it is telling us the MSI measured amplitude of the 559.8 (green) wavelength of light at a 10 by 10 meter spot on the Earth. Literally, it tells us how green that spot is.
Rasters are similar to images in many ways; digital images are simply visual representations of rasters. If we take the raster file for a single band, and map each cell to a 0 to 255 value of black, and save the result, we get a grey scale image where each pixel is representing one cell of 10 by 10 meter spot on Earth.
That is pretty wildly blurry, and it is difficult to make out individual features, but we can still learn much from it.
If we combine rasters from bands 2 (blue), 3 (green), and 4 (red), we can make a ’natural color’ image (never mind that a pre-generated natural color image at each resolution is supplied within Sentinel products).

Understanding Reflection and Spectral Signatures
We can do a lot of wild stuff with all this data. We can even do math between rasters of different bands. First though, we need to talk a little about reflection. Surfaces reflect light differently; intuitively, we both know that. If you look at a mirror, you’ll notice that it reflects much more than whatever surface you are standing on at the time. But have you ever noticed that sometimes you look a little ‘off’ when you look in a mirror you are less familiar with? Two mirrors reflect differently because they have literal physical differences, their surfaces’ reflect different wavelengths based on their molecular structure and composition. So what about that color difference you see?
Surfaces appear different from one another and have a perceptible color because of their structural and material properties. When light hits a surface, some wavelengths are absorbed while others are reflected. The wavelengths that are reflected determine the color we perceive. The green leaf of a plant isn’t appearing green simply because it is green, we see it as green because the leaf is absorbing all the rest of the spectrum of light that we as humans can see, and reflecting green wavelengths of light.
One way to think about it is to change the positive to a negative. Instead of calling the plant’s leaf green, we should say that the plant’s leaf is not green, on the basis that it is accepting of all light excepting for green.
Our experience that differing materials reflect and absorb light differently is wildly useful when you have 13 differing wavelengths to choose from on a satellite. Our blurry-ass 13 bands from the free Sentinel data contains a TROVE of information.
🌱 Why NDVI and NDBI Matter These indexes transform raw satellite data into actionable insights, highlighting vegetation health (NDVI) and built-up areas (NDBI).
So what can we do with all these bands? One example can be seen in Normalized Difference Vegetation Index (NDVI). This method which was published in 1974, is calculated by subtracting red from the near-infrared, and dividing it by the sum of near-infrared and red. The near-infrared is strongly reflected by healthy vegetation, while the red band is absorbed for photosynthesis.
With Sentinel-2 specifically this looks like: NDVI=(Band 8 - Band 4)/(Band 8 + Band 4). The result is a raster where photosynthesizing organisms are highlighted!

There are lots of other types of normalized difference indexes, for snow, water, and more. The important one for us though is NDBI, or Normalized Difference Built-Up Index. This similar calculation NDBI=(B11 - B8)/(B11 + B8) where band 11 is the short-wave Infrared and band 8 is the near-infrared. In the SWIR, human-made built up areas have high reflectance, and in NIR they have lower reflectance.
🛰️ Quick Fact Sentinel-2 satellites revisit every location on Earth approximately every 5 days, creating frequent opportunities to monitor change.

Between the pair of Sentinel-2 sats we have a revisit time of around 5ish days, with a swath width of ~290km. This means that the sats are taking a constant image that is 290km wide; the resultant image data files are square-ish chunks from this neverendingly long swath. In short, we get a full, new picture of the landmass of the planet every 5-ish days.
Luckily for our calculations, Gaza falls directly in the path of one of these swaths, so there is no need to stitch raster together, we always get a clean single raster, weather permitting.
You’ve come a long way, and I hope you are still bearing with me. Thus far we have covered how Sentinel-2 ‘sees’, the nature of reflectance, what bands are, the various bands we have available, what a raster is, swath, revisits, normalized difference calculations, and more. At this point, you should be able to understand how and why we can get a sat image where human-made structures are ‘highlighted’ (NDBI).
There are only 2 more concepts to cover before our ‘oh shit’ moment.
Geospatial Data: Introducing Shapefiles
Let us start with shapefiles. Simply put, they are a geospatial vector data format that stores information such as location, shape, and other attributes. Shapefiles are available for all sorts of information; we are interested in building footprint data. If you take a sat image, and draw a neatly enclosed shape around every building, you’ll get the idea. Shapefiles for all sorts of data are freely available for practically the whole planet.
The second concept is that we can do math between these NDBI rasters.
🔍 Change Detection with ΔNDBI Comparing NDBI rasters from two different dates clearly highlights where buildings have changed or disappeared.
If we take 2 NDBI rasters from 2 dates, and we subtract the earlier date from the later date, the result is a raster where only changes in human-built infrastructure are highlighted. Better yet, we can take our known-good building footprint shapefile and use it to crop the delta NDBI image we just made. Now we have a raster file that displays only changes to buildings which already exist, between 2 dates.

In the case of Gaza, we can use this technique to theoretically detect the destruction of most individual buildings within Gaza, to a temporal resolution of roughly 5 days, when weather permits.
This is what one of those building footprint cropped ΔNDBI images looks like when we categorize change values to fit into 3 categories: zero to little change = transparent, moderate change = red@50% opacity, and lots of change = red at full opacity:

These damage masks can be used like transparencies and placed atop sat images to better visualize damage between any two revisits, but we can do much more than that using advanced geospatial tools. Precise location data is baked into the shapefiles and this type of raster data. Because of this, it should be theoretically possible to build an automated system which detects if a notable change threshold has been detected within any given building footprint, and if so, record the latitude/longitude coordinates of that damage, to be later cross referenced with other location and address specific data.
Current Status
Where the project stands now, I have implemented a system here in my homelab which is capable of automatically downloading and ingesting Sentinel-2 from each new revisit into my PostgreSQL database. While there is MUCH room for improvement, I have also implemented a function which is capable of reading metadata from the rasters concerning cloudcover, and generating all the necessary NDBI and Delta-NDBI rasters accordingly.
While I am not a remote sensing professional in any way, I do feel that this project has value in documenting the genocide and crimes against humanity that are occurring every day in Gaza. I am a single individual working on this in my free time, a little here and there. Because of this, the status of this project is ongoing, but rare and occasional.
⚠️ Why This Matters This project aims not just to leverage technology, but to actively document and potentially assist in holding perpetrators accountable for crimes against humanity.
Ideally, I would make this project my full time job. If you are interested in sponsoring this project in any way, please don’t hesitate to reach out.
