💡 OBJETIVOS DIDÁCTICOS:
► Asentar los conocimientos del alumnado respecto las diferentes resoluciones de las imágenes de satélite.
► Mejorar la resolución espacial de una imagen multiespectral usando una banda pancromática mediante pan-sharpening, y visualizar los resultados.
💡 MATERIALES PARA LA ACTIVIDAD:
Los materiales para el desarrollo de esta actividad son los mismos de la actividad pasada.
El pansharpening es una técnica de fusión de imágenes que combina:
Bandas multiespectrales (MS) → baja resolución espacial, alta información espectral.
Banda pancromática (PAN) → alta resolución espacial, poca información espectral
Esta técnica es una respuesta al hecho de que, en las imágenes multiespectrales algunas bandas operab bajo resoluciones espaciales diferentes. Por ejemplo, es habitual que las bandas del visible ofrezcan mayores resoluciones que otras bandas, por ejemplo, del infrarrojo. La consecuencia es una pérdida de la nitidez de los elementos que componen la superficie terrestre cuando analizamos combinaciones de imágenes, por ejemplo, a falso color.
A través del pansharpening, o refinado pancromático, se mejora la resolución de las imágenes satélite utilizando como referencia una banda pancromática de mayor resolución y combinarla con el resto de bandas de menor resolución, generando una nueva imagen multibanda a color y preservando al mismo tiempo la máxima resolución.
El pansharpening, fusiona la imagen multiespectral de baja resolución con la imagen pancromática de alta resolución para obtener una imagen a color de igual nitidez que la banda pancromática. La banda pancromática realza la nitidez de los detalles y las imágenes multiespectrales restantes aportan la información radiométrica a través de un algoritmo estratégico. La combinación de imágenes se puede realizar partiendo de varios métodos de fusión de imágenes. Dentro de las opciones de ArcGIS encontramos los métodos IHS, Brovey, Esri, Gram-Schmidt y Valor medio simple.
¿Para qué se utiliza?
¿Qué sensores son últiles?:
Landsat 8/9 es ideal para “pansharpening”: dispone de bandas multiespectrales (a 30 m) y una banda pancromática de 15 m.
Sentinel-2 no tiene banda pancromática real (se simulará un ejercicio opcional).
El objetivo del este ejercicio es realizar pansharpening de una imagen Landsat usando {terra} y comparar:
Imagen original (30 m)
Imagen pansharpened (15 m)
Activamos el paquete terra:
library(terra)
## terra 1.8.93
Para este ejercicio es necesario dispone de las bandas 4 (Rojo), 3 (Verde), 2 (Azul) y 8 (Pancromática) de una escena de Landsat 8/9, colección 1. A continuación cargamos esas bandas multiespectrales
b2 <- rast("D:/G174_2026/LABORATORIO_4_Visualizacion_imagenes/datos/B2.tif") # azul
b3 <- rast("D:/G174_2026/LABORATORIO_4_Visualizacion_imagenes/datos/B3.tif") # verde
b4 <- rast("D:/G174_2026/LABORATORIO_4_Visualizacion_imagenes/datos/B4.tif") # rojo
Se crea un objeto spatRaster combinando las tres bandas multiespectrales. Es conveniente comprobar sus características
rgb <- c(b4, b3, b2)
Después procedemos a cargar la banda pancromática y comprobamos sus características:
pan <- rast("D:/G174_2026/LABORATORIO_4_Visualizacion_imagenes/datos/B8.tif")
Debe comprobarse que todos los objetos presentan la misma resolución:
rgb_resampled <- resample(rgb, pan,
method = "bilinear")
La práctica aplica el procedimiento de Pansharpening según el método Brovey, uno de los métodos más simples y usados. Su fórmula es la siguiente:
\[R' = R \cdot \frac{PAN}{R + G + B}\]
La fórmula anterior se aplica de la siguiente manera:
sum_rgb <- sum(rgb_resampled)
r_pan <- rgb_resampled[[1]] * (pan / sum_rgb)
g_pan <- rgb_resampled[[2]] * (pan / sum_rgb)
b_pan <- rgb_resampled[[3]] * (pan / sum_rgb)
rgb_pan <- c(r_pan, g_pan, b_pan)
Visualización y comparación de imágenes
plotRGB(rgb,
stretch = "lin",
main = "RGB original (30 m)")
plotRGB(rgb_pan,
stretch = "lin",
main = "RGB pansharpen (15 m)")
Como puede observarse, el procedimiento de pansharpening mejora la nitidez de bordes, aumenta el detalle de las áreas urbanas y reduce posibles distorsiones de color.
A continuación se desarrolla una actividad práctica utilizando la
función panSharpen() del paquete RStoolbox
en R. Además de terra, es necesario activar los
siguientes paquetes
library(RStoolbox)
## This is version 1.0.2.2 of RStoolbox
library(ggplot2)
La función panSharpen() admite como entrada un objeto
ráster multibanda y una banda pancromática. Usaremos el método “brovey”;
los otros métodos disponibles son:
“ihs” (intensity-hue-saturation transform)
“pca” (principal component analysis)
“hpfa” (high-pass filter additive)
“smoothing” (suavizado para corrección espectral)
ps_result <- panSharpen(rgb, pan, r = 3, g = 2, b = 1, method = "brovey")
A continuación se comparan las imágenes antes y después
plotRGB(rgb, r = 3, g = 2, b = 1, stretch = "lin", main = "RGB Original")
plotRGB(ps_result, r = 3, g = 2, b = 1, stretch = "lin", main = "RGB Pan-Sharpened")
Guardar resultado (opcional)
writeRaster(ps_result,
"lsat_pan_sharpened.tif",
overwrite = TRUE)
Probar otro método
ps_result_ihs <- panSharpen(rgb, pan, r = 3, g = 2, b = 1, method = "ihs")
Sentinel 2 no tiene una banda equivalente a la banda 8, pero se pueden usar las bandas con diferente resolución para reproducir un procedimiento similar al realizado con Landsat. En este caso
Se usará la banda 8 (10 m) como pseudo-PAN.
Se fusionará con bandas de 20 m (ej. SWIR)
sen2_B8 <- rast("D:/G174_2026/LABORATORIO_4_Visualizacion_imagenes/datos/SENTINEL2_B8.jp2") # 10 m
sen2_B11 <- rast("D:/G174_2026/LABORATORIO_4_Visualizacion_imagenes/datos/SENTINEL2_B11.jp2") # 20 m
En este caso, se remuestrea la banda B11.
sen2_B11_resampled <- resample(sen2_B11, sen2_B8)
## |---------|---------|---------|---------|=========================================
A continuación realizamos el “Pseudo pansharpening”
sen2_B11_pan <- sen2_B11_resampled * (sen2_B8 / sen2_B11_resampled)
## |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|=========================================
Finalmente, se representa gráficamente
plot(sen2_B11_pan)