lunedì 20 maggio 2024

Regressione umidita' su dati iperspettrali con Tensorflow

 Ho trovato su GitHub un dataset iperspettrale  con data di taratura di umidita' su suoli naturali

Felix M. Riese and Sina Keller, “Introducing a Framework of Self-Organizing Maps for Regression of Soil Moisture with Hyperspectral Data,” in IGARSS 2018 - 2018 IEEE International Geoscience and Remote Sensing Symposium, Valencia, Spain, 2018, pp. 6151-6154. (Link)

@inproceedings{riese2018introducing,
    author = {Riese, Felix~M. and Keller, Sina},
    title = {{Introducing a Framework of Self-Organizing Maps for Regression of Soil Moisture with Hyperspectral Data}},
    booktitle = {IGARSS 2018 - 2018 IEEE International Geoscience and Remote Sensing Symposium},
    year = {2018},
    month = {July},
    address = {Valencia, Spain},
    doi = {10.1109/IGARSS.2018.8517812},
    ISSN = {2153-7003},
    pages = {6151--6154},
}

Si tratta di circa 680 spettri con frequenze da 454 a 950 nm (125 bande). L'umidita' nel dataset varia da un minimo di 25.5% ad un massimo di 42.5% con un valore medio di 31.7%...purtroppo la variabilita' non e' enorme)




L'umidita' agisce sulla risposta spettrale non mediante un assorbimento localizzato su un picco ad una precisa lunghezza d'onda ma agisce su tutte le lunghezze d'onda abbasando la riflettanza all'aumentare dell'umidita'

Per questo motivo non e' banale fare una regressione tramite la rimozine del continuo

Ho provato ad usare lo script visto qui  

 

dallo scatterplot dei dati realmente misurati e quelli del modello derivanti dagli spettri nel dataset di test si vede una buona correlazione
 


 

In dottorato avevo visto che  si otteneva una buona correlazione fissando una lunghezza d'onda e misurando la riflettanza dopo la rimozione del continuo ma come si vede dal grafico sottostante i coefficienti sono in funzione della lunghezza d'onda presa in considerazione




 

 

giovedì 16 maggio 2024

Unmixing iperspettrale di campioni di terreno naturale

Aggiornamento

Ho trovato che USGS Spectral library mette a disposizione anche degli spettri Fieldspec (2151 bande da 350 a 2500 nm) di campioni puri di specie mineralogiche e quindi sono stato in grado di avere gli spettri di tutti e 6  gli endmember mineralogici che descrivono per oltre il 95% la composizione dei campioni di suolo naturale. Ho provato a fare girare l'unmixing con tutte

Diciamo risultati piuttosto scarsi









 

-------------------------------------------------------------------------------------------

Sempre continuando a tirare fuori il materiale del dottorato da cui non avevo tirato fuori niente di significativo (vedi questo post e questo)  ho ripreso la serie di spettri di campioni di terreno naturale del Mugello dei quali era stata fatta la caratterizzazione mineralogica quantitativa  mediante XRD (analisi effettuata dal Dr. Lutterotti con il software https://luttero.github.io/maud/)

le specie mineralogiche erano indicate in 6 con a farla da padrone sono   quarzo (26.7% wt medio) ed  Illite (27.6% medio)  seguiti da Montmorillonite (21.6% medio), Calcite (11.8% medio) e  Kaolinite (3.07% medio)....da notare le concentrazioni perche' saranno determinanti per la discussione successiva

Dei campioni erano stati misurati spettri di laboratorio Fieldspec

Volevo vedere se era possibile fare l'unmixing spettrale mediante CLSU

Durante il dottorato avevo a disposizione dei campioni di standard naturale (illite, kaolinite, montmorillonite e calcite) ragionevolmente puri. Ho usato questi come endmember..il quarzo e' stato escluso perche' non ha assorbimenti significativi nel range del Fieldspec e l'albite e' stata esclusa per mancanza di standard (peraltro avrebbe anche assorbimenti molto modesti)


Per fare l'unmixing ho provato l'algoritmo Constrained LSU in SNAP. Con Octave mi sono create una immagine di 6x6 pixel e 2151 bande usando i primi 32 pixel per i campioni naturali e gli ultimi 4 per inserire di endmember per controllo


Dato che la somma di concentrazione in peso di calcite + montmorillonite + illite + kaolinite e' pari a circa il 43% (con un minimo del 29% ed un massimo del 60%) e visto che albite e quarzo non sono presi in considerazioni tra gli endmember dell'analisi spettrale sono state riscalate le concentrazioni di cal+mont+ill+kao a somma 100


I risultati non sono eccezionali..la correlazione della calcite e' similare a quanto ottenibile mediante la sola profondita' di picco a 2345 nm, per concentrazioni inferiori al 5% (come nel caso della Kaolinite) non c'e' nessun tipo di correlazione con il dato spettrale (questo aspetto e' stato uno dei risultati del dottorato)






domenica 12 maggio 2024

Unmixing spettri sintetici argille

AGGIORNAMENTO

ho provato ad usare questo metodo su campioni di miscele naturali di minerali argillosi (con concentrazioni determinate mediante XRD) ma ho miseramente fallito

Lo spettro dell'illite non viene estratto...anche forzando lo spettro puro nel dataset in modo da influenzare la VCA) non si ottengono risultati

 

=============================================

Per questo prova ho modificato lo script

https://github.com/ricardoborsoi/unmixing_spectral_variability

Non avendo Matlab gli script sono stati eseguiti in Octave con modestissime modifiche al codice per utilizzare i dati del fieldspec

Gli spettri sperimentali dei 3 endmember ssono stati ottenuti da campioni naturali acquistati con un grado di purezza mineralogica superiore al 90% (trattandosi di campioni  naturali di minerali argillosi e' impossibile ottenere campioni puri) in condizioni di laboratorio



Da notare, nonostante siano tutti minerali argillosi, kaolinite e Montmorillonite hanno spettri simili mentre Illite e' molto dissimile.Si vedra' in seguito che cio' avra' ripercusssioni sull'unmixing

 

Esempio di spettro di sintesi

Lo spettro di sintesi viene generato come combinazione linerare degli endmember e applicazione di un livello SNR di 30db e del modello di Hapke (un modello empirico per descrivere di riflettanza direzionale della regolite in assenza di atmosfera)

 Lo script genera 2500 spettri di sintesi con differenti valori di concentrazione calcolate come modello Gaussiano random (mappa 50x50 pixel del 2151 bande)

La distribuzione delle concentrazioni dei 3 endmember e'risultata cosi' distribuita




 

Sugli spettri di sintesi viene applicato VCA per determinare gli endmembers

 




 

 

Gli spettri sono quindi elaborati mediante differenti algoritmi di unmixing (nella matrice A sono contenute le concentrazioni reali). Piu' punti stanno sulla retta y=x migliore e' l'algoritmo

 ELMM




FCLS




 

 

MESMA



RUSAL




In conclusione l'unico algoritmo che e' riuscito ad effettuare l'unmixing corretto e' stato MESMA





 

venerdì 10 maggio 2024

Sulla Consuma


 

Calcareous Tufa a Montemurlo (PO)

Doverosa premessa: alcune delle foto sono state riprese in aree private dopo avere contattato il proprietario.

Durante una girata nel bosco mi sono trovato in un ambiente inaspettato ovvero la presenza di calcareous tufa (io pensavo che si chiamassero travertini fluviali ma aggiornandomi ho scoperto che il termine travertini e' relativo a precipitazione di carbonato derivante da sorgenti termali con materiale compatto e ben stratificato; in questo caso si deve usare il termine calcareous tufa perche' non si tratta di sedimenti porosi,mal stratificati e scarsamente cementati e la temperatura dell'acqua era di 16 gradi C in tutti i punti misurati)


Gli affioramenti sono molto poco estesi arealmente e partono a monte dalla strada asfaltata che conduce a Villa Barone - San Giorgio sino al Borgo di Bagnolo a valle. (circa 500 m lineari per un dislivello di 50 m)

La formazione affiorante e' la Formazione di M.Morello che passa verso il basso a SIllano. La cosa che mi ha incuriosito e' che mi e' capitato di rilevare su diversi fiumi impostati sulla Formazione di M.Morello ma non avevo mai visto la presenza di calcareous tufa

A monte della strada non c'e' circolazione idrica superficiali negli impluvi mentre e' molto abbondante al di sotto della strada forse in corrispondenza di una linea di sorgenti attorno a quota 200 m slm. Da notare una rottura di pendio in corrispondenza della strada che a valle ha un  versante meno acclive dove sono presenti gli ulivi (c'e' sicuramente un intervento antropico di terrazzamento ma non sembra tale da giustificare la differenza di pendenza)

 

Mappa delle foto

 

Con un conduciumetro portatile ho provato a misurare in vari punti la conducibilita' (valori in carta espressi in microS/cm). In generale si ha una conducibilita' modesta che ha la tendenza ad aumentare verso le quote maggiori)
Mappa della misure di conducibilita' (microS/cm)


 

 

Foto 1 Villa Barone

 

 

Foto 2 Vasca con troppo pieno (probabile sorgente)

 

Foto 3 Fosso Pian di Scalini ramo Ovest

 

Foto 4

 

Foto 5 Cascata

Foto 6 Alveo asciutto a monte della strada asfaltata


Foto 7



Foto 8 Borgo di Bagnolo

Foto 9 Acqua di color turchino


Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...