Eliminare il rumore delle immagini satellitari radar con Python non è mai stato così facile |  di Hadrien Mariaccia |  Aprile 2024

 | Intelligenza-Artificiale

Presentazione dell'ultima versione di deepdespeckling

Immagine ottica e radar di un'area agricola vicino a Nîmes, Francia

Le immagini radar ad apertura sintetica (SAR) sono ampiamente utilizzate in un'ampia varietà di settori (aerospaziale, militare, meteorologia, ecc.). Il problema è questo tipo di immagini soffrire di rumore nel loro formato grezzo. Anche se queste immagini sono solitamente file pesanti, il compito di eliminarne il rumore in modo efficiente sembra essere impegnativo dal punto di vista scientifico e molto utile nel mondo reale.

In questo Articolo Verso la scienza dei datiabbiamo presentato smacchiatura profondaun pacchetto Python open source che consente di eliminare le macchie dalle immagini del radar ad apertura sintetica (SAR) utilizzando a nuovo metodo basato sul deep learning.

Siamo felici di annunciare che abbiamo rilasciato a nuova versione di smacchiatura profonda, consentendo di utilizzarli entrambi MERLINO E SAR2SAR metodi per rimuovere i puntini dalle immagini satellitari radar.

Un breve promemoria sulle immagini satellitari

Ci sono due grandi categorie di immagini satellitari:

  • Immagini ottiche: quelli che siamo abituati a vedere quando guardiamo ad esempio le previsioni del tempo. Queste immagini sono prese da sensori ottici.
    Sebbene queste immagini forniscano generalmente un elevato livello di dettaglio, incontrano almeno due sfide significative nel catturare le complessità della Terra: i limiti posti da condizioni notturne E tempo avverso.
  • Immagini radar: mentre i sistemi ottici si basano sulla luce solare (il sensore è passivo), i radar inviano un'onda elettromagnetica e misurano la componente retrodiffusa dagli oggetti al suolo (il sensore è attivo). i sensori radar possono acquisire dati a qualsiasi ora del giorno e con qualsiasi condizione meteorologica, poiché la lunghezza d'onda dell'onda trasmessa le consente di penetrare le nuvole. Tuttavia incontrano un problema intrinseco: rumore di macchioline.

Cos'è il rumore maculato?

Macchiolina è un'interferenza granulare dovuta alle proprietà di rimbalzo delle onde radio emesse che degrada la qualità delle immagini e quindi la loro interpretabilità con l'occhio umano.

Esempio di un'immagine rispettivamente senza e con rumore speckle

Come liberarsene

Esistono diversi metodi, ma il deep learning ha apportato miglioramenti significativi a questo compito. Emanuele DalsassoLoïc Denis e Florence Tupin ha sviluppato due metodi basati sul deep learning per la despeckling delle immagini SAR:

  • MERLINO (complex self-supervised despeckLINg) : una strategia auto-supervisionata basata sulla separazione delle parti reale e immaginaria delle immagini SAR complesse single-look che abbiamo presentato nel precedente articolo Articolo Verso la scienza dei dati
  • SAR2SAR : Le serie temporali multitemporali vengono sfruttate per addestrare la rete neurale a ripristinare le immagini SAR osservando solo le acquisizioni rumorose. Questo metodo fa parte delle novità dell'ultima versione di smacchiatura profonda. Pertanto, ci concentreremo su questo metodo in questo articolo

Proprio come MERLIN, anche SAR2SAR trae ispirazione dall’algoritmo noise2noise, che ha dimostrato che è possibile addestrare un modello a eliminare il rumore senza guardare esempi privi di rumore. Questa caratteristica è di particolare importanza nella despeckling SAR, poiché non esistono acquisizioni senza macchie.

SAR2SAR si basa sul presupposto che due immagini acquisite sulla stessa area in momenti diversi siano danneggiate due realizzazioni macchioline non correlatecorrispondenza con l’ipotesi che consente l’applicazione del principio noise2noise. Ciò consente di sviluppare un modello per rimuovere lo speckle dalle immagini SAR Ground Range Detected (GRD), che sono disponibili solo in ampiezza (la fase viene soppressa durante la fase di rilevamento) e quindi MERLIN non può essere utilizzato su tali dati. Le acquisizioni temporali vengono sfruttate per generare un set di dati contenente realizzazioni macchioline indipendenti della stessa scena (una strategia di compensazione delle modifiche basata su un modello pre-addestrato viene utilizzata per garantire che le acquisizioni temporali differiscano solo per la componente macchiolina).

Una volta addestrato il modello, durante l'inferenza SAR2SAR richiede una singola immagine GRD e può essere utilizzato in modo efficace per eliminare lo speckle dalle immagini SAR Sentinel-1 GRD.

Esistono diverse modalità di acquisizione a seconda del compromesso tra la scena illuminata (la striscia) e la risoluzione dell'immagine. Ciascuna modalità di acquisizione produce quindi immagini con una risoluzione diversa, quindi l'aspetto degli oggetti è specifico per ciascuna modalità di acquisizione.

Per questo motivo è necessario sviluppare un modello specifico per ciascuna modalità. Data la semplicità di applicazione di MERLIN, che richiede singole immagini SAR, è possibile raccogliere senza problemi set di dati per ciascuna modalità specifica. Abbiamo addestrato MERLIN sulle seguenti immagini:

  • Immagini TerraSAR-X acquisite in modalità Stripmap
  • Immagini TerraSAR-X acquisite in modalità HighResolution SpotLight
  • Immagini Sentinel-1 acquisite in modalità TOPS

Installazione del pacchetto

Prima di installare deepdespeckling, assicurati di installare le dipendenze gdal, puoi farlo usando conda con il seguente comando:

conda install -c conda-forge gdal

Quindi puoi installare il pacchetto in questo modo:

pip install deepdespeckling

Elimina i puntini di un'immagine con MERLIN

Per eliminare i puntini dalle immagini SAR utilizzando MERLIN, le immagini devono essere in formato .cos o .npy.

È necessario impostare due parametri:

  • model_name : "spotlight" per le immagini SAR recuperate con la modalità Spotlight, "stripmap" per le immagini SAR recuperate con la modalità stripmap o "Sentinel-TOPS" per le immagini recuperate con la modalità TOPS
  • symetrise: DDurante le fasi di preelaborazione dell’immagine rumorosa per MERLIN, le parti reale e immaginaria sono “simmetrizzato” (per corrispondere ai presupposti teorici di MERLIN). Per saltare questo passaggio, il symetrise il parametro può essere impostato su False
from deepdespeckling.utils.load_cosar import cos2mat
from deepdespeckling.utils.constants import PATCH_SIZE, STRIDE_SIZE
from deepdespeckling.merlin.merlin_denoiser import MerlinDenoiser

# Path to one image (cos or npy file)
image_path="path/to/cosar/image"
# Model name, can be "spotlight", "stripmap" or "Sentinel-TOPS"
model_name = "spotlight"
symetrise = True

image = cos2mat(image_path).astype(np.float32)

denoiser = MerlinDenoiser(model_name=model_name, symetrise=symetrise)
denoised_image = denoiser.denoise_image(image, patch_size=PATCH_SIZE, stride_size=STRIDE_SIZE)

Questo frammento di codice memorizzerà l'immagine smacchiata in un file array numpy nel denoised_image variabile.

Esempio di un'immagine SAR rumorosa a grandezza naturale
La stessa immagine denoizzata utilizzando MERLIN

Elimina i puntini di un'immagine con SAR2SAR

Per rimuovere i puntini dalle immagini SAR utilizzando SAR2SAR, le immagini devono essere in formato .tiff o .npy.

from deepdespeckling.utils.load_cosar import cos2mat
from deepdespeckling.utils.constants import PATCH_SIZE, STRIDE_SIZE
from deepdespeckling.sar2sar.sar2sar_denoiser import Sar2SarDenoiser

# Path to one image (tiff or npy file)
image_path="path/to/cosar/image"

# Works exactly the same as with MERLIN
image = cos2mat(image_path).astype(np.float32)

# Denoise the image with SAR2SAR
denoiser = Sar2SarDenoiser()
denoised_image = denoiser.denoise_image(image, patch_size=PATCH_SIZE, stride_size=STRIDE_SIZE)

Esempio di risultato utilizzando SAR2SAR (visualizzato dopo una conversione in png)

Elimina i puntini da una serie di immagini utilizzando MERLIN o SAR2SAR

Sia per MERLIN che per SAR2SAR, puoi scegliere tra 3 diverse funzioni per rimuovere i puntini da una serie di immagini SAR contenute in una cartella:

  • despeckle per eliminare i puntini dalle immagini a dimensione intera
  • despeckle_from_coordinates per rimuovere i puntini da una sottoparte delle immagini definita da alcune coordinate
  • despeckle_from_crop per rimuovere i puntini da una sottoparte delle immagini definite utilizzando uno strumento di ritaglio

Elimina i puntini dalle immagini a grandezza naturale

from deepdespeckling.despeckling import despeckle

# Path to a folder of several images
# images have to be in .tiff or .npy formats if using sar2sar
# images have to be in .cos or .npy formats is using merlin ("spotlight", "stripmap" or "Sentinel-TOPS")
image_path="path/to/cosar/image"
# Folder where results are stored
destination_directory="path/where/to/save/results"

# Can be "sar2sar", "spotlight' or "stripmap"
model_name = "spotlight"
# symetrise parameter if using "spotlight", "stripmap" or "Sentinel-TOPS" (harmless if using "sar2sar")
symetrise = True

despeckle(image_path, destination_directory, model_name=model_name, symetrise=symetrise)

IL despeckle la funzione creerà diverse cartelle nel file destination_directory :

  • processed_images: IL npy file (conversione di array numpy) delle immagini raw archiviate nella cartella definita in image_path.
  • noisy:le immagini rumorose preelaborate in entrambi .npy E .png formati
  • denoised: le immagini denoizzate in entrambi .npy E .png formati

Elimina i puntini dalle parti delle immagini utilizzando coordinate personalizzate

from deepdespeckling.despeckling import despeckle_from_coordinates

# Path to a folder of several images
# images have to be in .tiff or .npy formats if using sar2sar
# images have to be in .cos or .npy formats is using merlin ("spotlight", "stripmap" or "Sentinel-TOPS")
image_path="path/to/cosar/image"
# Folder where results are stored
destination_directory="path/where/to/save/results"
# Example of coordinates of the subparts of the images to be despeckled
coordinates_dictionnary = {'x_start':2600,'y_start':1000,'x_end':3000,'y_end':1200}

# Can be "sar2sar", "spotlight", "stripmap" or "Sentinel-TOPS"
model_name = "spotlight"
# symetrise parameter if using "spotlight", "stripmap" or "Sentinel-TOPS" (harmless if using "sar2sar")
symetrise = True

despeckle_from_coordinates(image_path, coordinates_dict, destination_directory,
model_name=model_name, symetrise=symetrise)

ILdespeckle_from_coordinates la funzione creerà le stesse cartelle didespeckle funzione, con le immagini ritagliate con le coordinate specificate.

Esempio di immagine denoizzata utilizzando coordinate personalizzate (visualizzata dopo una conversione in png)

Elimina i puntini dalle immagini utilizzando uno strumento di ritaglio

from deepdespeckling.merlin.inference.despeckling import despeckle_from_crop

# Path to a folder of several images
# images have to be in .tiff or .npy formats if using sar2sar
# images have to be in .cos or .npy formats is using merlin ("spotlight", "stripmap" or "Sentinel-TOPS")
image_path="path/to/cosar/image"
# Folder where results are stored
destination_directory="path/where/to/save/results"

# If True it will crop a 256*256 image from the position of your click
# If False you will draw free-handly the area of your interest
fixed = True
# Can be "sar2sar", "spotlight", "stripmap" or "Sentinel-TOPS"
model_name = "spotlight"
# symetrise parameter if using "spotlight""stripmap" or "Sentinel-TOPS" (harmless if using "sar2sar")
symetrise = True

despeckle_from_crop(image_path, destination_directory, model_name=model_name, fixed=fixed, symetrise=symetrise)

ILdespeckle_from_crop la funzione avvierà prima lo strumento di ritaglio: seleziona semplicemente un'area e premi “q” quando sei soddisfatto del ritaglio

lo strumento di ritaglio in azione
Risultati del denoising utilizzando lo strumento di ritaglio

Poi il despeckle_from_crop la funzione creerà:

  • Le stesse cartelle didespeckle funzione, con le immagini ritagliate utilizzando lo strumento di ritaglio
  • cropping_coordinates.txt file contenente le coordinate della coltura selezionata

Andare avanti

Ora che sai come usare il deepdespeckling, per capire meglio come funziona puoi controllare il repository github. Forniamo anche una documentazione sulla sfinge disponibile qui.

Non esitate a contattarmi per qualsiasi domanda e feedback!

Autori

Se non diversamente specificato, tutte le immagini sono degli autori

Contatto

Non esitate a contattarmi se avete domande.

Per saperne di più su Hi! PARIS e il suo team di ingegneri:

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *