How to Download Free High-Resolution Satellite Images

Mário Bittencourt
5 min readMay 1, 2024

--

Free high-resolution satellite images: learn how to obtain 5-meter resolution images for free from Planet’s mosaic database; see also the code for digital processing in R

Downloading high-resolution satellite images for free is a significant challenge in remote sensing.

A good option for this is the 5-meter resolution images that are part of the NICFI program mosaics, directly from the Planet platform.

Planet updates its database monthly, ideal for regular temporal analysis.

The images come with the BLUE, GREEN, RED, and NIR bands, enabling the acquisition of various vegetation indices crucial for agriculture and forest monitoring.

Additionally, the images can be downloaded directly into QGIS via a Planet plugin. See how to do this in this article. Happy reading!

What is the NICFI program?

The NICFI program is an International Climate and Forest Initiative from Norway, where users can access high-resolution mosaics ready for analysis of the world’s tropics.

The program’s objectives are:

- Help reduce and reverse tropical forest losses;
- Combat climate change;
- Conserve biodiversity;
- Facilitate sustainable development.

NICFI began in 2020, following a $43 million contract with KSAT (Kongsberg Satellite Services), partnering with Airbus and Planet.

The images are for non-commercial use.

Step-by-step guide to downloading free high-resolution satellite images from Planet

The procedure for downloading high-resolution satellite images from Planet for free is straight forward.

Follow these steps:

1. Access the NICFI program on the Planet website;
2. Click “Sign up” and register with the necessary information;
3. Access the Planet plugin website for use in QGIS. Here is the link. Enter your data and download the ZIP to a folder on your device;
4. The next step is to open QGIS and go to “Plugins” and “Install from ZIP” (click the button with three dots and then the ZIP file). Done!

Once done, the plugin will be installed in QGIS, and you should log in with your credentials registered on the platform.

When logged in, a Planet window will open. In “Drawn”, delineate your area of interest or upload a file.

Download the HCMGIS addon

If you don’t already use it, I suggest going to Addons and downloading HCMGIS, where you have the Google Maps base as a reference. Just search for the plugin and download it right there in QGIS.

With your area of interest delineated, go to “Basemaps” on the side panel. I suggest selecting the “Surface reflectance basemaps only” option, as it will show images with surface base correction.

In “Candense”, leave it as “All”, and in “Name” choose “PS Tropical Normalized Analytic Monthly Monitoring”. Monthly images since 2020 will be shown. You can select as many images as you want to download.

Click on the box to select the image you want to download and click “Order”. Another window will open: click “Download Specific AOI from basemaps (UDM Quads)” and then “Next”.

Next, go to “Extent” and click “Current visible extent” to delimit the area of interest. Now, “Find Quads” >> “Next” >> name your file in “Order name”.

You have the option to open a virtual file immediately after downloading in QGIS in “Open as a single virtual layer”. Just check this option before starting to download the image.

Click “Submit Order” and “Order Status panel”. In QGIS, a window will open next to the layer visualization tab. Click “Download”. The image will be stored in a folder automatically created by the Planet plugin on your machine.

A drawback of the image is that they are named only with numbers, without identifying, for example, the month/year, which can delay digital processing.

This is the image I downloaded, in RGB, from March 2024, with a random area of interest as a reference.
In QGIS, I performed digital processing of the image and obtained two vegetation indices, NDVI and NDWI.

I also did digital processing in R, obtaining other indices. The difference is that here I delimited it to my area of interest:

Here is the code used in the digital processing in R:

library(raster)

# Carregar o raster
img <- stack("file path in .tif")

# Renomear as bandas
names(img) <- c("B01", "B02", "B03", "B04", "B05")

# Definir projeção para o raster
utm_proj <- CRS("+proj=utm +zone=23 +south +datum=WGS84")

# Projetar o raster
img_reproj <- projectRaster(img, crs = utm_proj)

# Carregar o arquivo .shp da área de interesse
area_interesse <- shapefile("file path in .shp")

# Projetar a área de interesse
area_interesse_reproj <- spTransform(area_interesse, crs(img_reproj))

# Recortar o raster para a área de interesse
img_recortada <- crop(img_reproj, area_interesse_reproj)

# Verificar a imagem recortada
img_recortada

# Calculando o NDVI
NDVI <- (img_recortada$B04 - img_recortada$B03) / (img_recortada$B04 + img_recortada$B03)

# Definir a paleta de cores para o NDVI
cores_ndvi <- colorRampPalette(c("#8B0000", "#CD853F", "#FFFF00", "#ADFF2F", "#006400"))(100)

# Normalizar os valores do NDVI entre -1 e 1
min_ndvi <- cellStats(NDVI, min)
max_ndvi <- cellStats(NDVI, max)
NDVI_normalized <- (NDVI - min_ndvi) / (max_ndvi - min_ndvi) * 2 - 1

################################ NDWI

NDWI <- (img_recortada$B02 - img_recortada$B04) / (img_recortada$B02 + img_recortada$B04)

# Definir a paleta de cores para o NDWI
cores_ndwi <- colorRampPalette(c("#8B4513", "#D2B48C", "#FFFFFF", "#ADD8E6", "#00008B"))(100)

# Normalizar os valores do NDVI entre -1 e 1
min_ndwi <- cellStats(NDWI, min)
max_ndwi <- cellStats(NDWI, max)
NDWI_normalized <- (NDWI - min_ndwi) / (max_ndwi - min_ndwi) * 2 - 1

######################### EVI

EVI <- (2.5 * ((img_recortada$B04 - img_recortada$B03 / 10000)) / (img_recortada$B04 / 10000 + 6 * img_recortada$B03 / 10000 - 7.5 * img_recortada$B01 / 10000 + 1))

# Normalizar os valores do EVI entre -1 e 1
min_evi <- cellStats(EVI, min)
max_evi <- cellStats(EVI, max)
EVI_normalized <- (EVI - min_evi) / (max_evi - min_evi) * 2 - 1

# Definir a paleta de cores para o EVI
cores_evi <- colorRampPalette(c("#8B0000", "#CD853F", "#FFFF00", "#ADFF2F", "#006400"))(100)

########################### MSAVI2

msavi2 <- (2 * img_recortada$B04 + 1 - sqrt((2 * img_recortada$B04 + 1)^2 - 8 * (img_recortada$B04 - img_recortada$B03))) / 2

# Encontrar o mínimo e o máximo dos valores do MSAVI2
min_msavi2 <- cellStats(msavi2, min)
max_msavi2 <- cellStats(msavi2, max)
msavi2_normalized <- (msavi2 - min_msavi2) / (max_msavi2 - min_msavi2) * 2 - 1

# Verificar os valores mínimo e máximo do MSAVI2 normalizado
range_msavi2_normalized <- c(min_msavi2, max_msavi2)
range_msavi2_normalized


# Definir a paleta de cores para o MSAVI2
cores_msavi2_normalized <- colorRampPalette(c("#8B0000", "#CD853F", "#FFFF00", "#ADFF2F", "#006400"))(100)

# Extrair informações de metadados da imagem
projection_info <- crs(img_reprog)
src_info <- proj4string(projection_info)
escala_info <- paste(res(img)[10], "km")

layout(matrix(1:4, nrow = 2, byrow = TRUE))

# Plotar os índices gerados
plot(NDVI_normalized, main = "NDVI", col = cores_ndvi)
plot(EVI_normalized, main = "EVI", col = cores_evi)
plot(NDWI_normalized, main = "NDWI", col = cores_ndwi)
plot(msavi2_normalized, main = "MSAVI2", col = cores_msavi2)


# Adicionar informações sobre a imagem abaixo dos plots
mtext(paste("SRC: ", src_info), side = 1, line = 5)

Other adjustments can be made to the code according to your interest, such as color palettes.

Conclusion

The NICFI program offers a great option for free use of high-resolution satellite images. The spectral bands available favor the obtaining of various vegetation indices, especially for academic studies and environmental and agricultural monitoring, especially for temporal analyzes ranging from 2020 to the current period.

--

--

Mário Bittencourt

SEO Copywriter | Precision Agriculture | Remote Sensing | Data Science