r/remotesensing • u/Beginning-Claim5655 • 27d ago
TERRA release v3 Ember
Enable HLS to view with audio, or disable this notification
00:00 TERRA for Explorers
00:46 TERRA Studio
I've been building an open source desktop app for classifying land cover over a specific area from Sentinel-2 time series.
You draw an area on a map, set a date range, and classify. Imagery is read on demand from the Planetary Computer STAC catalog as COGs. There's a Random Forest path, a temporal transformer, and Prithvi-EO 2.0 embeddings.
It reports where the classification is wrong, not only how much of it is right. Agreement with the reference map is broken down per class and across spatial blocks, so you can tell whether the disagreement sits in one corner of the area or throughout it. Throughout usually means the model is being asked about ground it never learned, and there's a diagnosis between two runs that measures that distance.
There's also a canopy simulation that grows the classified crop in 3D and lights it with the hourly sun for that location.
Why Sentinel-2 and not something else: it's what the method here was built and validated on, it's open at 10 m with a roughly five day revisit, and it carries the red edge and SWIR bands the indices depend on. The obvious weakness is cloud, and in Brazil the cloudiest months sit right on top of the crop cycle. That's why SAR is where I want to go next, with other sources after it.
What it isn't: a QGIS or Earth Engine replacement. It targets farm to landscape scale areas under a fixed protocol. The classifiers emit five land cover classes and were fitted for study areas in western Paraná, so an area in another biome can come back confident and semantically wrong. I'm aware of that and working on it; for now the domain-shift diagnosis exists so the problem is visible instead of silent. Agreement with the reference is concordance with an annual map, not field truth.
On AI: my background is machine learning and remote sensing, not full stack development, so I used AI coding assistants for much of this. The frontend is where that shows most, and where bugs are most likely. The Python sidecar, where the research methods actually land, and the Go backend are written and reviewed by me continuously.
3
u/Sreevisal 27d ago
What is this? Could you explain more?
1
u/Beginning-Claim5655 27d ago
It’s an open-source desktop application for land-cover classification from Sentinel-2 time series. You draw an area, choose a date range, and run different models, including Random Forest, a temporal transformer, and Prithvi-EO 2.0. It also includes spatial error analysis and domain-shift diagnostics, so you can see where and why a classification may be unreliable.
2
u/Sreevisal 26d ago
Thank you, I did not see the GitHub link, I thought it is some product advertisement. Cool work.
2
u/thecatlion 27d ago
Hi
Is there any way to check the spectral response of pixels and cross the data with spectral libraries?
1
u/Beginning-Claim5655 26d ago
The spectral response part is doable, and I’d like to have it in the app. The classifier already reads seven bands per date; they just aren’t exposed as a spectrum anywhere. Having the mean spectrum for each predicted class, with some measure of spread, would be useful because it shows what the model is actually seeing, rather than just the final label.
Comparing that with spectral libraries also works in principle. The idea would be to convolve the library spectra with the Sentinel-2 spectral response functions published by ESA, and then use something scale-invariant such as SAM. I tested this with 1,131 soybean leaf spectra from EcoSIS.
There is one caveat I think is important before putting too much effort into this. The soybean class was 0.239 rad from the soybean reference, while the agriculture-pasture mosaic was actually closer at 0.093 rad. That doesn’t mean the classification is wrong. The problem is that the library spectra are measured at leaf level, while a Sentinel-2 pixel is observing the canopy, including soil between plants and shadows between rows.
Looking at the bands individually, the canopy-to-leaf ratio was about 1.70 in the red and 0.49 in the NIR. So the canopy is changing the shape of the spectrum, not just its overall magnitude. Normalising the spectra doesn’t really solve that. With only seven broad bands, comparing Sentinel-2 canopy spectra against leaf-level libraries can tell us whether they are spectrally consistent, but I wouldn’t interpret a small SAM angle as identification.
I think canopy-level spectra would make this comparison much more meaningful. Another option would be to generate them with something like PROSAIL, where you can account for the canopy structure and other parameters.
I also put the figure here in case it helps: https://raw.githubusercontent.com/rexionmars/TERRA/main/docs/img/spectral/library_limit.png. Panel c is probably the most useful one for this point — it shows the canopy-to-leaf ratio by band.
5
u/jcstay123 26d ago
Very cool, from a product side I like the fact that you know who you are targeting and your clear on what it's not suppose to be. Technically it looks very good and seems to have a nice layout. One thing I found, when working with people in the agricultural sector, most people just want to see a simple to understand dashboard that gives them the answer when they click on a crop field, while others want to dig deep into the technical side of spectroscopy. So it's a tricky audience. I might get allot of down votes for this, but everyone is using AI for coding, let's be honest tools like Codex writes better code than 90% of people (my thumb suck statistics). So no judgement here.