
El bosque de la pantalla no tenía nada que ver con el bosque de la ventana. Uno era una mancha blanca que lo tapaba todo, tan espesa que ni se adivinaba un tronco debajo; el otro, el que se asomaba entre la llovizna al otro lado del vidrio, seguía tan verde como siempre. Así arrancó mi pelea particular con las nubes en Sentinel-2, esos satélites que uso para hacer teledetección desde RStudio, aprendiendo de a poco a hacer procesamiento de raster sin haber pisado nunca una clase de análisis espacial.
Antes de ponerme a programar en serio, probé por otro lado: me puse a leer artículos científicos sobre teledetección, pensando que ahí iba a entender de una vez qué eran esas nubes en las imágenes y por qué molestaban tanto. Fue un fracaso completo. El vocabulario técnico me bloqueó de una manera que todavía me da un poco de vergüenza contar, y cerré un montón de pestañas del navegador sin haber terminado de entender ni un párrafo entero. Terminé aprendiendo lo mismo, pero mirando la pantalla y probando cosas, no leyendo papers que daban por hecho un conocimiento que yo no tenía.
Sentinel-2 en RStudio: la banda que nadie me explicó bien
Descargué gigabytes de información pensando que sería llegar y usar, pero buena parte de cada imagen resultó ser puro ruido atmosférico. Los satélites, por muy sofisticados que sean, no logran ver a través de nuestras nubes sureñas, así que ahí estaba yo, revisando píxeles blancos cuando lo que necesitaba era suelo firme. Entre foros en inglés y tutoriales que asumían cosas que yo no sabía, empecé a sospechar que no era la única peleando contra este muro blanco.

Cuando por fin logré descargar imágenes Sentinel para procesar en RStudio fácilmente, me encontré con que incluso en los días que parecen despejados siempre hay alguna nube chica o alguna sombra que arruina los cálculos. Lo que más me costó entender fue que esos píxeles blancos no son solo "nada": tienen un valor guardado ahí adentro, y ese valor confunde a R si uno no le avisa que lo ignore. Si intentas calcular algo con una nube encima, el resultado va a ser cualquier cosa menos el estado real del bosque.
Y entonces, de tanto pelear con la consola, descubrí que las imágenes vienen con una banda extra escondida, pensada solo para avisar dónde hay problemas: unos píxeles quedan marcados como nube opaca, otros como una neblina más fina, tipo cirrus. No voy a meterme en los números exactos de cómo está codificada esa banda, porque ese detalle merece su propio espacio aparte, pero entender que esa información ya venía incluida en el archivo fue como encontrarme un mapa que no sabía que tenía guardado.
¿Por qué una nube arruina el cálculo aunque el día se vea despejado?
Para poder usar esa banda tuve que aprender a manejar el paquete terra —no voy a comparar aquí todos los paquetes de R para imágenes satelitales, esa es otra historia aparte— pero fue el que mejor le hizo el peso a mi computador, que no es precisamente potente. Los raster, para quien recién llega, son esos archivos que se ven como fotos pero que por dentro guardan datos, no solo colores; ahí sí que me falta profundizar, porque entender bien qué es un raster desde cero es un tema que todavía tengo pendiente.
Al principio intentaba cargar la imagen completa y procesarla de una sola vez. En un foro alguien ya había advertido que mi notebook no iba a aguantar eso, y aun así insistí, hasta que me apareció ese texto rojo horrible de memoria agotada que me hizo saltar el corazón. Aprendí a la mala que antes de sacarle las nubes a cualquier imagen primero hay que recortarla al tamaño de la zona que en verdad me interesa. Si te ha pasado algo parecido, ahí dejo cómo recortar un raster con un shapefile en RStudio fácilmente, para que no se te trabe el computador como se me trabó a mí.
También aprendí, aunque sea de pasada, que si el sistema de coordenadas de tu zona de estudio no calza con el de la imagen satelital nada de esto funciona bien, pero ese tema completo (con lo mareador que es) merece su propio desahogo en otro momento. Una vez que el área quedó chica y bien recortada, enmascarar las nubes se sintió mucho más liviano: básicamente le digo a R que revise esa banda de calidad, encuentre los píxeles marcados como nube o como sombra, y los convierta en un valor vacío para que no ensucien el cálculo de más abajo.
Cómo le enseñé a R a ignorar los píxeles nublados
Para la sexta semana metida en esto, la máscara ya me funcionaba de forma más estable, no una vez de pura suerte sino varias seguidas. Un sábado en la tarde, caminando por la costanera del Calle-Calle con Raimundo, un conocido del grupo de senderismo, le conté en qué andaba. Me preguntó, como siempre pregunta él, si eso en verdad servía para algo, y en vez de explicarle con palabras preferí mostrarle el resultado ya armado al día siguiente.
Cuando el mapa terminó de cargar completo esa noche, ahí estaba: el contorno del río Cruces dibujado en un verde nítido, despegándose limpio del gris parejo que lo rodeaba, como si alguien hubiera pasado un lápiz de color justo encima de una fotocopia borrosa. No hubo error rojo, no hubo que reiniciar nada. Ahí quedó claro que quitar nubes no es "borrarlas" para que aparezca lo de abajo por arte de magia, sino limpiar el ruido para quedarme solo con la información que sí sirve.
Se lo comenté también a Isidora, una compañera de este mismo camino autodidacta que estudia biología en Concepción; ella tiene mucha más base matemática que yo y de repente me tira alguna fórmula al pasar cuando hablamos de índices como el NDVI, que junta distintas bandas espectrales de la imagen. Me recordó que antes de sacar cualquier índice de vegetación primero hay que limpiar la imagen de nubes, porque si no, el número que te tira R no significa nada. Ella ya está pensando en usar todo esto más adelante para modelar dónde podrían estar ciertas especies, pero yo todavía no llego ni cerca de esa parte.
Después de limpiar, todavía quedan huecos por resolver
Ahí me topé con otra duda de aprendiz: ¿qué hago con los huecos que deja la máscara? Varios tutoriales sugieren rellenarlos con fotos de días cercanos, pero en Valdivia, entre que una foto sale limpia y la siguiente también, el bosque puede haber cambiado bastante, o quizás hubo una tala que yo ni me enteré. Preferí dejar esos huecos vacíos antes que inventar un dato que capaz me estuviera mintiendo, aunque sé que hay quienes prefieren usar información de radar para rellenar esas zonas con datos reales en vez de estimaciones.

Todo este método lo fui armando sola, revisando foros y guardando cada solución para no pelear con el mismo error dos veces. Nadie me lo explicó de corrido ni en orden; fue juntando pedacitos los fines de semana, entre la pega y otras cosas.
Si estás recién empezando con esto en RStudio, mi consejo no tiene nada de técnico: no te desesperes cuando el archivo no cargue, ni tires la toalla si el mensaje en rojo no tiene sentido a la primera. Hay días en que el problema no es tu código sino que el archivo es simplemente demasiado pesado para tu máquina; yo pasé tardes enteras frustrada antes de encontrar la solución a errores comunes al cargar rasters pesados en R, y de verdad me cambió la manera de entender cómo administra memoria R. Las sombras de las nubes, por ejemplo, se me colaron varias veces incluso después de tener la máscara lista, porque esa banda de calidad no las detecta siempre igual de bien; para esos casos hay algoritmos más finos, pero para empezar, con la banda que ya viene en el archivo alcanza y sobra.

Hoy, cuando abro un mapa nuevo del bosque cerca de casa y me sale ese parche blanco de siempre, ya no se me acelera el corazón. Sé que es parte del paisaje de acá, sé más o menos cómo decirle a R que lo ignore, y sé que todavía me van a quedar tardes enteras de sábado peleando con algo que no esperaba. Cada vez que logro ver el verde asomándose donde antes solo había una mancha blanca, siento que vale la pena todo lo demás: el error rojo, las anotaciones guardadas, hasta las tardes en que no avancé nada.