Visualizzazione post con etichetta Envi. Mostra tutti i post
Visualizzazione post con etichetta Envi. Mostra tutti i post

mercoledì 18 febbraio 2026

Spectral waste dataset

Questo interessante progetto (avrei voluto fare anche io una cosa praticamente identica) mette a disposizione una serie di immagini di rifiuti ripresi sia con camera RGB che iperspettrale a 224 bande e modelli gia' calcolati di segmentazione di alcune reti neurali 


 

 

Lo scopo e' di effettuare una segmentazione sulle seguenti classi

  • film
  • basket
  • videotape
  • filament
  • trashbag
  • cardboard 

lo scopo principale e' quindi quello di individuare il materiale che potrebbe bloccare i macchinari del trattamento rifiuti 

Il link Github e' il seguente https://github.com/ferpb/spectralwaste-segmentation/tree/main mentre la pagina del progetto e' https://sites.google.com/unizar.es/spectralwaste

L'articolo e' consultabile a questo link 

Per far funzionare il progetto e' necessario Python 3.9 (con Debian Trixie siamo a 13.3 e non compila con cython)

si deve quindi prima creare un ambiente idoneo 



curl https://pyenv.run | bash
pyenv install 3.9.19
pyenv shell 3.9.19
python -m venv my_39_envgit clone https://github.com/ferpb/spectralwaste-segmentation
pip install -e .


Le immagini raw subiscono un primo passaggio di riduzione della dimensionalita' tramite PCA o FastICA o FactorAnalysis (vedi dim_reduction.py)
Successivamente vengono testate le reti neurali Segformer, Segformer multimodale, Mininet, Mininet Multimodale, e CMX 
A questo punto si avranno i checkpoint dei modelli gia' addestrati a questo link. I files .pth sono divisi per modello e per tipo di pretrattamento delle immagini
I files pth possono essere utilizzati per fare inferenza utilizzando il notebook python nel folder del repository GitHub
 
Le immagini iperspettrali sono state acquisite con una Specim FX17 (900-1700 nm)
Il formato in cui incluse nel dataset e' un tiff multipagina che non e' immediato da gestire

 Per otterne lo spettro di un punto a coordinate x,y mi sono fatto uno script
import matplotlib.pyplot as plt
from PIL import Image

x=50
y=100

pixel_values = []

with Image.open('1.tiff') as img:
for i in range(img.n_frames):
img.seek(i)
pixel = img.getpixel((x , y))
pixel_values.append(pixel)

x_values = [900 + (i * 3.57) for i in range(len(pixel_values))]

# Plotting
plt.figure(figsize=(10, 6))
plt.plot(x_values, pixel_values, color='blue', label='Intensity')

plt.title('Pixel Value')
plt.xlabel('Lambda (nm)')
plt.ylabel('Pixel Intensity')
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()
plt.show()
 

 Le maschere di addestramento della rete sono in formato tiff e devono essere stretchate 
 Il valore del pixel corrisponde alla classe 
 

 per rendere la cosa piu' agevole l'immagine geotiff multipagina puo' essere convertita in formato ENVI
 In questo modo in ESA Snap si puo' usare lo strumento Spectrum View
 

 
 
import rasterio
from PIL import Image
import numpy as np

input_file = '1.tiff'
output_base = 'output_envi'
output_dat = f'{output_base}.dat'
output_hdr = f'{output_base}.hdr'
start_wavelength = 900.0
step = 3.57

with Image.open(input_file) as img:
n_bands = img.n_frames
width, height = img.size

wavelength_values = [start_wavelength + (i * step) for i in range(n_bands)]

with rasterio.open(
output_dat, 'w',
driver='ENVI',
height=height, width=width,
count=n_bands,
dtype='float32'
) as dst:
with Image.open(input_file) as img:
for i in range(n_bands):
img.seek(i)
band_data = np.array(img).astype('float32') / 65535.0
dst.write(band_data, i + 1)

wavelength_str = ", ".join([f"{w:.2f}" for w in wavelength_values])

hdr_content = f"""ENVI    
description = {{ Prodotto convertito per ESA SNAP }}
samples = {width}
lines = {height}
bands = {n_bands}
header offset = 0
file type = ENVI Standard
data type = 4
interleave = bsq
byte order = 0
wavelength units = nanometers
wavelength = {{
{wavelength_str}
}}
"""

with open(output_hdr, 'w') as f:
f.write(hdr_content)

print(f"Conversione completata. Apri il file {output_hdr} in SNAP.")
 
 
 

 

Spectral waste dataset

Questo interessante progetto (avrei voluto fare anche io una cosa praticamente identica) mette a disposizione una serie di immagini di rifiu...