venerdì 24 aprile 2026

Convertire USGS Spectral LIbrary in formato Envi

 

 


import os
import pandas as pd
import numpy as np
import spectral.io.envi as envi

def create_envi_library(input_folder, output_filename):
spectra_data = []
names = []
wavelengths = None

files = sorted([f for f in os.listdir(input_folder) if f.endswith('.txt')])

if not files:
print("No .txt files found in the directory!")
return

for file in files:
file_path = os.path.join(input_folder, file)
try:
df = pd.read_csv(file_path, sep=r'\s+', comment='#', header=None, engine='python')
# Clean up: ensure we only have numeric rows
df = df[pd.to_numeric(df[0], errors='coerce').notnull()]
df = df.astype(float)
if wavelengths is None:
wavelengths = df[0].values
spectra_data.append(df[1].values)
names.append(os.path.splitext(file)[0])
print(f"Processed: {file}")
except Exception as e:
print(f"Skipping {file}: {e}")


lib_array = np.array(spectra_data).astype(np.float32)
lib_array = lib_array.reshape((lib_array.shape[0], 1, lib_array.shape[1]))
lib_array[lib_array < -100] = 0
metadata = {
'file type': 'ENVI Spectral Library',
'wavelength': list(wavelengths.astype(str)),
'wavelength units': 'Micrometers',
'spectra names': names,
'data type': 4, # Float32
'interleave': 'bsq'
}


output_path = output_filename if output_filename.endswith('.sli') else output_filename + '.sli'
envi.save_image(output_path + '.hdr', lib_array, metadata=metadata, force=True)
print(f"\nSuccess! Created {output_path} and associated header.")

# Usage
input_dir = '/home/luca/Downloads/ASCIIdata/ASCIIdata_splib07b_cvASD/ChapterM_Minerals'
output_name = 'USGS_splib07b_ASD_Library'
create_envi_library(input_dir, output_name)



Apire immagini Emit in Enmap Box

Per visualizzare immagini Emit in formato netcdf non si deve passare dal menu ma si deve aprire Processing Toolbox e cercare emit (vedi immagine_

  

Gli spettri Emit sono molto puliti




Raster Math iin Enmap-Box

Per utilizzare le formule con le bande in Enmap Box si deve prima aprire 

Processing Toolbox -> Raster Analysis -> Raster Math 

 




In parameter si scrive la formula . Quella di seguito calcola la profondita' di picco normalizzata per il crisotilo sull'assorbimento a 2325 nm (Banda 117) con spalla destra 2390 nm (Banda 126) e spalla sinistra a 2230 nm (Banda 106)

Attenzione : si deve inserire il raster in Raster layer mapped to R1. Qui il numero delle bande non inizia da 1 ma da zero quindi l'indice per la banda 117 sara' R1[116]

 

R_cont = R1[105] + (2325.0 - 2230.0) / (2390.0 - 2230.0) * (R1[125] - R1[105])
NBD_chrysotile = 1.0 - (R1[116] / R_cont) 

 


 

domenica 19 aprile 2026

Pleiadi

Pensavo non fosse possibile fotografare le Pleiaidi da Firenze, mentre scendevano all'orizzonte subito dopo il tramonto e con una reflex..ad occhio nudo non erano visibili..ed invece se ne vedono 9 (f/20, 8 sec, 3200 iso, focale 300 mm, Canon Eos 500D)

 



L'immagine successiva per riferimento (fonte Nasa) 

  


domenica 12 aprile 2026

Color fringing

In alcune immagini di Google Maps ci sono degli aloni in particolare sugli aerei (color fringing)

Questo e' dovuto al fatto che il sensore del satellite non acquisisce in contemporanea tutte le bande ma in successione con uno sfasamento di pochi centesimi di secondo.. 

Questo metodo puo' essere impiegato per la stima della velocita'


Maciej Adamiak, Yulia Grinblat, Julian Psotta, Nir Fulman, Himshikhar Mazumdar, Shiyu Tang, Alexander Zipf, Deep learning enhanced road traffic analysis: Scalable vehicle detection and velocity estimation using PlanetScope imagery, International Journal of Applied Earth Observation and Geoinformation, Volume 142,2025,104707,ISSN 1569-8432,
https://doi.org/10.1016/j.jag.2025.104707.

In questa immagine del dataset pubblico di WorlView (pansharpening a 30 cm di 4 bande multispettrali di Monaco OR2A_30cm_4-Band_Pansharpened _Munich-Germany le macchine non mostrano alone 

 
Indicativamente il delta di tempo tra due bande di WordVIew e' tra 1 e 2 centesimi di secondo ..per avere uno spostamento significativo si devono prendere in considerazione almeno 2 pixels quindi la velocita' del veicolo deve essere in movimento ad almeno 140 Km/h..in condizioni ottimali si puo' scendere a 110 Km/h

 

 

 

 

 

 

Lenovo IX2 Iomega Storcenter

Mi sono comprato usato un Iomega Storcenter (che si presenta sulla rete come un Lenovo IX2) come NAS da battaglia (1.8 Tb). Per usarlo su Linux queste sono le impostazione

sudo apt update
sudo apt install cifs-utils 

sudo mount -t cifs //192.168.1.100/backups /media/iomega/backups -o username=admin,vers=1.0

sudo mount -t cifs //192.168.1.100/documents /media/iomega/documents -o username=admin,vers=1.0



e cosi' via seguendo l'immagine sottostante

 


 

Convertire USGS Spectral LIbrary in formato Envi

    import os import pandas as pd import numpy as np import spectral.io.envi as envi def create_envi_library ( input_folder , out...