Eliminar ruido de imágenes de satélite de radar con Python nunca ha sido tan fácil |  de Hadrien Mariaccia |  abril de 2024

Presentación de la última versión de deepdespeckling

Imagen óptica y de radar de una zona agrícola cerca de Nimes, Francia

Las imágenes de radar de apertura sintética (SAR) se utilizan ampliamente en una gran variedad de sectores (aeroespacial, militar, meteorológico, etc.). El problema es este tipo de imágenes. sufrir de ruido en su formato crudo. Si bien estas imágenes también suelen ser archivos pesados, la tarea de eliminarlas de manera eficiente parece ser un desafío desde una perspectiva científica y muy útil en el mundo real.

En esto Artículo Hacia la ciencia de datospresentamos despeje profundoun paquete Python de código abierto que permite eliminar imágenes de radar de apertura sintética (SAR) utilizando un novedoso método basado en el aprendizaje profundo.

Estamos felices de anunciar que hemos lanzado un nueva versión de limpieza profunda, permitiendo utilizar ambos ESMEREJÓN y SAR2SAR Métodos para eliminar manchas de imágenes de satélite de radar.

Un breve recordatorio sobre las imágenes de satélite

Hay dos Grandes categorías de imágenes de satélite:

  • Imágenes ópticas: los que estamos acostumbrados a ver cuando miramos el pronóstico del tiempo por ejemplo. Estas imágenes son tomadas por sensores ópticos.
    Si bien estas imágenes generalmente proporcionan un alto nivel de detalle, encuentran al menos dos desafíos importantes para capturar las complejidades de la Tierra: las limitaciones planteadas por condiciones nocturnas y clima adverso.
  • Imágenes de radar: mientras que los sistemas ópticos dependen de la luz solar (el sensor es pasivo), los radares envían una onda electromagnética y miden el componente retrodispersado por los objetos en el suelo (el sensor está activo). Los sensores de radar pueden adquirir datos en cualquier momento del día y en cualquier condición meteorológica, ya que la longitud de onda de la onda transmitida le permite atravesar las nubes. Sin embargo, se topan con un problema intrínseco: ruido moteado.

¿Qué es el ruido moteado?

Punto Es una interferencia granular debida a las propiedades de rebote de las ondas de radio emitidas que degrada la calidad de las imágenes y, por tanto, su interpretabilidad con el ojo humano.

Ejemplo de una imagen respectivamente sin y con ruido moteado.

Cómo deshacerse de él

Existen varios métodos, pero el aprendizaje profundo ha aportado mejoras significativas para esta tarea. Emanuele DalsassoLoïc Denis y Florencia Tupin Desarrolló dos métodos basados ​​en aprendizaje profundo para eliminar manchas de imágenes SAR:

  • ESMEREJÓN (complejo autosupervisado despeckLINg): una estrategia autosupervisada basada en la separación de las partes reales e imaginarias de imágenes SAR complejas de vista única que presentamos en la sección anterior. Artículo Hacia la ciencia de datos
  • SAR2SAR : Se aprovechan series de tiempo multitemporales para entrenar redes neuronales para restaurar imágenes SAR mirando únicamente adquisiciones ruidosas. Este método es parte de las nuevas características de la última versión de despeje profundo. Por lo tanto, nos centraremos en este método en este artículo.

Al igual que MERLIN, SAR2SAR también se inspira en el algoritmo noise2noise, que demostró que es posible entrenar un modelo para eliminar el ruido sin mirar ejemplos libres de ruido. Esta característica es de particular importancia en la eliminación de manchas de SAR, ya que no existe una adquisición sin manchas.

SAR2SAR se basa en el supuesto de que dos imágenes adquiridas en la misma zona en momentos diferentes se corrompen por dos realizaciones de motas no correlacionadas, coincidiendo con la hipótesis que permite la aplicación del principio ruido2ruido. Esto permite desarrollar un modelo para eliminar manchas de las imágenes SAR con rango de terreno detectado (GRD), que solo están disponibles en amplitud (la fase se suprime durante el paso de detección) y, por lo tanto, MERLIN no se puede utilizar en dichos datos. Las adquisiciones temporales se aprovechan para generar un conjunto de datos que contiene realizaciones moteadas independientes de la misma escena (se utiliza una estrategia de compensación de cambios basada en un modelo previamente entrenado para garantizar que las adquisiciones temporales solo difieran para el componente moteado).

Una vez que se entrena el modelo, durante la inferencia, SAR2SAR requiere una única imagen GRD y se puede implementar de manera efectiva para suprimir las manchas de las imágenes Sentinel-1 GRD SAR.

Existen diferentes modos de adquisición dependiendo del compromiso entre la escena iluminada (la franja) y la resolución de la imagen. Cada modo de adquisición produce así imágenes que tienen una resolución diferente, por lo que la apariencia de los objetos es específica de cada modo de adquisición.

Por este motivo se debe desarrollar un modelo específico para cada modalidad. Dada la simplicidad de aplicación de MERLIN, que requiere imágenes SAR únicas, se pueden recopilar sin problemas conjuntos de datos para cada modalidad específica. Hemos entrenado a MERLIN en las siguientes imágenes:

  • Imágenes TerraSAR-X adquiridas en modo Stripmap
  • Imágenes TerraSAR-X adquiridas en modo HighResolution SpotLight
  • Imágenes de Sentinel-1 adquiridas en modo TOPS

Instalación del paquete

Antes de instalar deepdespeckling, asegúrese de instalar las dependencias de gdal; se puede hacer usando conda con el siguiente comando:

conda install -c conda-forge gdal

Luego puedes instalar el paquete de esta manera:

pip install deepdespeckling

Elimina manchas en una imagen con MERLIN

Para eliminar las manchas de imágenes SAR usando MERLIN, las imágenes deben estar en formato .cos o .npy.

Se deben configurar dos parámetros:

  • model_name : "spotlight" para imágenes SAR recuperadas con el modo foco, "stripmap" para imágenes SAR recuperadas con el modo stripmap o "Sentinel-TOPS" para imágenes recuperadas con el modo TOPS
  • symetrise: dDurante los pasos de preprocesamiento de la imagen ruidosa para MERLIN, las partes real e imaginaria son “simetrizado”(para coincidir con los supuestos teóricos de MERLIN). Para omitir este paso, el symetrise El parámetro se puede configurar en 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)

Este fragmento de código almacenará la imagen sin manchas en un matriz numerosa en el denoised_image variable.

Ejemplo de una imagen SAR ruidosa de tamaño completo
La misma imagen eliminada con MERLIN.

Elimina manchas en una imagen con SAR2SAR

Para eliminar las manchas de las imágenes SAR utilizando SAR2SAR, las imágenes deben estar en 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)

Ejemplo de resultado usando SAR2SAR (se muestra después de una conversión a png)

Elimina manchas en un conjunto de imágenes usando MERLIN o SAR2SAR

Tanto para MERLIN como para SAR2SAR, puedes elegir entre 3 funciones diferentes para eliminar las manchas de un conjunto de imágenes SAR contenidas en una carpeta:

  • despeckle despeckle imágenes de tamaño completo
  • despeckle_from_coordinates para despejar una subparte de las imágenes definidas por algunas coordenadas
  • despeckle_from_crop para eliminar las manchas de una subparte de las imágenes definidas usando una herramienta de recorte

Despeckle imágenes a tamaño completo

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)

El despeckle La función creará varias carpetas en el destination_directory :

  • processed_images: el npy archivos (conversión de matriz numpy) de las imágenes sin procesar almacenadas en la carpeta definida en image_path.
  • noisy:las imágenes ruidosas preprocesadas en ambos .npy y .png formatos
  • denoised: las imágenes sin ruido en ambos .npy y .png formatos

Elimina partes de imágenes usando coordenadas personalizadas

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)

Eldespeckle_from_coordinates La función creará las mismas carpetas que ladespeckle función, con imágenes recortadas con las coordenadas especificadas.

Ejemplo de imagen eliminada de ruido usando coordenadas personalizadas (que se muestran después de una conversión a png)

Elimina partes de imágenes usando una herramienta de recorte

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)

Eldespeckle_from_crop La función iniciará primero la herramienta de recorte: simplemente seleccione un área y presione “q” cuando esté satisfecho con el recorte.

la herramienta de recorte en acción
Resultados de la eliminación de ruido utilizando la herramienta de recorte.

Entonces el despeckle_from_crop La función creará:

  • Las mismas carpetas que eldespeckle función, con imágenes recortadas usando la herramienta de recorte
  • cropping_coordinates.txt archivo que contiene las coordenadas del cultivo seleccionado

Ir más lejos

Ahora que ya sabes cómo utilizar deepdespeckling, para comprender mejor cómo funciona, puedes consultar el repositorio de github. También proporcionamos documentación de una esfinge. disponible aquí.

¡No dudes en ponerte en contacto conmigo para cualquier pregunta o comentario!

Autores

A menos que se indique lo contrario, todas las imágenes son de los autores.

Contacto

No dudes en ponerte en contacto conmigo si tienes alguna pregunta.

Para saber más sobre ¡Hola! PARÍS y su equipo de ingeniería: