
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.
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à TOPSsymetrise
: 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, ilsymetrise
il parametro può essere impostato suFalse
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.
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)
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 interadespeckle_from_coordinates
per rimuovere i puntini da una sottoparte delle immagini definita da alcune coordinatedespeckle_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 inimage_path.
noisy:
le immagini rumorose preelaborate in entrambi .npy E .png formatidenoised:
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.
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)
IL
despeckle_from_crop
la funzione avvierà prima lo strumento di ritaglio: seleziona semplicemente un'area e premi “q” quando sei soddisfatto del ritaglio
Poi il despeckle_from_crop
la funzione creerà:
- Le stesse cartelle di
despeckle
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