
Afuera no para de llover y el sonido rítmico de la lluvia sobre el techo de zinc me tiene en una especie de trance mientras espero que el ventilador de mi laptop, que ya se acelera procesando la imagen, deje de sonar como si fuera a despegar. Es una de esas tardes de sábado en Valdivia donde el gris del cielo es tan parejo que te olvidas de que existen otros colores, y por eso mismo, supongo, me obsesioné con ver el verde desde arriba. Me pasó que el invierno pasado, mirando por la ventana hacia el cerro, me di cuenta de que no tenía idea de cuánto estaba cambiando realmente el bosque nativo que rodea mi casa, y ahí fue cuando me metí en este baile de la teledetección sin saber ni prender bien el RStudio.
Si estás leyendo esto y te sientes un poco perdida entre términos raros, te entiendo demasiado. Yo no soy geógrafa ni programadora; trabajo en una oficina medio tiempo y el resto de mis horas se me van en intentar que el código no me tire errores rojos (que, por cierto, me daban pánico al principio). Calcular el NDVI, que suena a algo súper complejo de la NASA, resultó ser el primer gran 'clic' que hizo mi cabeza. Es el Índice de Vegetación de Diferencia Normalizada, y básicamente es una forma de decirle al computador: 'Oye, muéstrame qué tan viva está esa planta'. Pero claro, llegar a ese mapa nítido me tomó varias tardes de frustración absoluta antes de que algo cuadrara.
Primero lo primero: Preparar el rincón de juegos
Para empezar, tuve que aprender que R por sí solo no sabe qué hacer con una imagen satelital. Es como si le pasaras un libro en un idioma que no conoce. Así que lo primero que aprendí es que hay que instalar paquetes. El que más me ha servido, y el que recomiendan ahora porque es más rápido, es terra. Antes usábamos otro que se llamaba raster, pero como yo empecé hace poco, me dijeron que mejor me fuera directo a lo moderno. También uso ggplot2 porque me gusta que los mapas queden bonitos, no solo funcionales.
Recuerdo que a mediados de primavera, cuando los días empezaron a estirarse un poquito más, me pasé todo un fin de semana solo intentando que R leyera mis archivos. Si todavía te cuesta esa parte, hace un tiempo escribí sobre cómo leer archivos raster en RStudio para principiantes, que es básicamente el paso cero. Una vez que tienes el paquete instalado con library(terra), ya sientes que tienes medio camino avanzado, aunque en realidad solo estás abriendo la puerta.

Las bandas de Sentinel-2: El ojo que todo lo ve
Aquí es donde la cosa se pone interesante (y un poco técnica, pero no te asustes). Yo uso imágenes de Sentinel-2 porque son gratis y pasan seguido por encima de Chile. Lo que aprendí es que el satélite no saca una 'foto' como la de nuestro celular, sino que separa la luz en pedacitos. Para el NDVI solo necesitamos dos: la luz roja y el infrarrojo cercano (NIR). Es loco pensar que las plantas absorben la luz roja para la fotosíntesis pero reflejan el infrarrojo porque si no, se calentarían demasiado. Es como su protector solar natural.
En el caso de Sentinel-2, tenemos que buscar específicamente:
- Banda 4 (Rojo): Tiene una longitud de onda central de 665 nm. Es la que el satélite ve como el color rojo que nosotros conocemos.
- Banda 8 (Infrarrojo Cercano o NIR): Esta tiene una longitud de onda central de 842 nm. Nosotros no la vemos, pero para las plantas es clave.
Lo genial de estas dos bandas es que tienen una resolución de 10 metros. Eso significa que cada cuadrito (píxel) de tu mapa representa 10 por 10 metros en el suelo. Para mirar el bosque que tengo acá atrás, es perfecto. El problema es cuando intentas mezclar bandas que no calzan, y ahí es donde yo casi tiro la toalla hace unos meses.
El error que me tuvo llorando un sábado entero
Les cuento esto para que no se sientan mal si les pasa. Un día, intenté calcular el NDVI mezclando la banda del rojo con otra que no era la 8, o que tenía una resolución distinta (de esas que vienen a 20 metros). Pasé como tres horas intentando restar las dos bandas sin darme cuenta de que una estaba en una resolución distinta a la otra. R me tiraba un error que decía algo de 'extents' o 'resampling' y yo solo veía letras rojas mientras afuera el viento azotaba las ventanas.
Al final, entendí que en la teledetección todo tiene que encajar como un Lego. Las imágenes tienen que tener el mismo tamaño, la misma cantidad de píxeles y estar en la misma posición. Si una imagen está un milímetro corrida o un píxel más grande, el código explota. Por eso, antes de calcular nada, siempre reviso que mis capas estén alineadas. A veces el problema es la proyección del mapa, que es todo un tema aparte. Si te pasa que tus mapas parecen estar en planetas distintos, te puede servir leer sobre cómo corregir proyecciones cartográficas en R de forma sencilla.

La matemática que (por fin) tiene sentido
Cuando ya tienes tus dos bandas cargadas en R (digamos que las llamaste banda_roja y banda_nir), el cálculo es una simple operación aritmética. La fórmula del NDVI es: (NIR - Rojo) / (NIR + Rojo). En R, usando el paquete terra, se ve algo así como ndvi <- (banda_nir - banda_roja) / (banda_nir + banda_roja).
¿Y qué significa el resultado? Pues que vas a tener una nueva imagen donde cada píxel tiene un valor que va de -1 a 1.
- Si el valor está cerca de 1, ¡felicidades!, ahí hay un bosque sano o vegetación muy densa.
- Si está cerca de 0, probablemente sea suelo desnudo o concreto.
- Si es negativo (cerca de -1), lo más seguro es que sea agua, nieve o nubes.
El momento en que apreté 'Enter' y no salió un error, sino que se creó el objeto en mi ambiente de R, fue glorioso. Pero la verdadera emoción vino cuando puse plot(ndvi). Ver esa mancha verde apareciendo en la pantalla, identificando perfectamente dónde terminaba el pasto y empezaba el bosque nativo cerca de mi casa, me hizo sentir que por fin estaba entendiendo el lenguaje de la tierra. Fue como pasar de ser una observadora pasiva, que solo ve verde, a entender científicamente los ciclos de mi propio entorno.
Pero ojo: no es llegar y comparar (mi gran lección)
Aquí es donde me puse un poco más 'estudiosa' y me di cuenta de una trampa en la que caemos todos al principio. Yo quería comparar el NDVI de este otoño con el del otoño pasado para ver si el bosque estaba más seco. Pero resulta que calcular el NDVI directamente sobre las imágenes que descargas así nomás, sin corregir los efectos atmosféricos y topográficos, genera sesgos que invalidan cualquier comparación temporal rigurosa.
Resulta que la atmósfera (el humo, la humedad de Valdivia, el polvo) ensucia la luz antes de que llegue al satélite. Si un día hay más humedad que otro, el NDVI te va a dar distinto aunque la planta esté igual de sana. Por eso, si vas a comparar fechas, tienes que usar imágenes que ya vengan procesadas (lo que llaman Nivel 2A en Sentinel) o hacer tú misma la corrección. Es un detalle que aprendí a golpes, leyendo foros hasta las tantas de la mañana, y que me hizo darme cuenta de que este camino de la teledetección es profundo.
En mi experiencia aprendiendo teledetección con R sin ser programadora, me he dado cuenta de que lo más importante no es saberse todas las fórmulas de memoria, sino tener la paciencia de investigar por qué un resultado no se ve como debería. No hay que tenerle miedo a equivocarse; yo me equivoco casi todos los fines de semana.
Hoy, mientras termino este mate y miro el mapa de NDVI que acabo de generar, me siento un poco menos perdida. El bosque sigue ahí, aguantando la lluvia, y yo ahora tengo una ventanita digital para entender cómo respira. Si estás ahí con tu laptop, frustrada porque el código no corre, tómate un té, escucha la lluvia (o el ruido que haya en tu ciudad) y vuelve a intentarlo. Cuando ese primer mapa nítido aparece en la pestaña de visualización, todo el esfuerzo vale la pena.