6.5. Índices espectrais obtidos a partir de imagens
Os elementos presentes na cobertura da terra possuem assinaturas espectrais características, devido a suas propriedades físicas e da interação delas com a radiação eletromagnética. Entretanto, efeitos ligados à geometria de iluminação, de visada e ambientais também podem alterar essas interações, de modo que as assinaturas espectrais podem dar indícios de diferentes processos, como estados fitossanitário da vegetação, crescimento urbano, áreas queimadas, entre outros [85]. Para ressaltar essas assinaturas, bem como para reduzir para reduzir a dimensionalidade dos dados, realçar a resposta espectral da vegetação com relação a do solo, dentre outras funcionalidades foram gerados os índices espectrais. Os índices espectrais foram idealizados a partir da resposta espectral característica da vegetação verde, combinando a baixa refletância nos comprimentos de onda do visível com a alta refletância nos comprimentos de onda do infravermelho próximo do espectro eletromagnético. O objetivo desta combinação foi de estabelecer uma relação entre a resposta espectral e as variáveis biofísicas da vegetação [86].
Um índice espectral ideal deve ser capaz de responder a pequenas variações no desenvolvimento fenológico da vegetação e não pode ser muito influenciado por variações de tipo de solo, do ângulo de visada do sensor, do ângulo solar e das condições atmosféricas [87]. Uma série de variáveis biofísicas são passíveis de serem estimadas por meio de índices espectrais, tais como o índice de área foliar, evapotranspiração, dentre outras. Entretanto, o uso de índices espectrais deve ser visto com certo cuidado, pois foram desenvolvidos para atender a necessidades particulares e sob condições específicas. Desta forma, os resultados dos índices espectrais podem ser diferentes, quando aplicados em condições diferentes. Por exemplo, o problema de usar índices espectrais para estimar índice de área foliar maior do que três, pois a relação é exponencial e ocorre a saturação. Além disto, a cor e a textura do solo, o espaçamento, a orientação do plantio, a latitude, a data e hora da observação podem influenciar os resultados da interpretação dos índices espectrais [86, 87].
Um dos índices mais conhecidos é o Normalized Difference Vegetation Index, NDVI (Equação 6.4), que é um índice da diferença normalizada entre as bandas do infravermelho próximo e do vermelho [88], e é geralmente utilizado para representar a quantidade de resposta espectral típica de alvos de vegetação encontrada numa imagem:
onde IV representa a banda do infravermelho próximo, e V a banda do vermelho.
O Index DataBase apresenta uma ferramenta de consulta, que combina satélites de observação da terra e aplicações. Ao escolher, por exemplo, o Sentinel-2 com a aplicação Agricultura, mais de 10 índices espectrais são apresentados. Outros exemplos de índices espectrais amplamente utilizados são o NDWI, Normalized Difference Water Index (veja a Equação 6.5) com aplicações que envolvem alvos de água, e o NBR, Normalized Burn Ratio (conforme a Equação 6.6) para ressaltar áreas queimadas na cobertura da terra. Estes índices normalizados comumente retornam valores entre -1 e +1.
onde G representa a banda do verde, e IV a banda do infravermelho próximo.
onde IV representa a banda do infravermelho próximo, e IVC a banda do infravermelho médio.
Script 4. Dada a geometria de uma gleba e uma busca de imagens Sentinel-2 no BDC na data de interesse (consultar Visualização de imagens Sentinel-2 do Brazil Data Cube (BDC)), calcular e apresentar 4 índices espectrais, NDVI, SCI, NBR e NDWI.
Solução:
for item in items.items():
datetime = item.properties['datetime']
# abrir e recortar as imagens
with rio.open(item.assets['B03'].href) as raster:
gleba_s2 = gleba.to_crs(raster.crs).iloc[0]
janela_gleba = from_bounds(*gleba_s2.geometry.bounds, raster.transform)
banda_03 = raster.read(1, window=janela_gleba)
with rio.open(item.assets['B02'].href) as raster:
banda_02 = raster.read(1, window=janela_gleba)
with rio.open(item.assets['B04'].href) as raster:
banda_04 = raster.read(1, window=janela_gleba)
with rio.open(item.assets['B08'].href) as raster:
banda_08 = raster.read(1, window=janela_gleba)
with rio.open(item.assets['B11'].href) as raster:
banda_11 = raster.read(1, window=janela_gleba)
# calcular os índices espectrais
ndvi = (banda_08 - banda_04) / (banda_08 + banda_04)
sci = (banda_11 - banda_08) / (banda_11 + banda_08)
nbr = (banda_08 - banda_11) / (banda_08 + banda_11)
ndwi = (banda_03 - banda_08) / (banda_03 + banda_08)
# a quantização do Sentinel-2 é de 12 bits, ou seja,
# os valores dos números digitais variam entre 0 e 2^12 = 4096
L = 2**12
# preencher a matriz RGB para visualização colorida
matriz_rgb = np.zeros((banda_04.shape[0], banda_04.shape[1], 3))
matriz_rgb[:, :, 0] = normalizar_2p(banda_04, L) / L
matriz_rgb[:, :, 1] = normalizar_2p(banda_03, L) / L
matriz_rgb[:, :, 2] = normalizar_2p(banda_02, L) / L
plt.figure(figsize=(25, 2))
plt.subplot(1,5,1)
plt.title(datetime[:10])
plt.imshow(matriz_rgb)
plt.subplot(1,5,2)
plt.title('NDVI')
plt.imshow(ndvi, cmap='BrBG', vmin=-1, vmax=+1)
plt.colorbar()
plt.subplot(1,5,3)
plt.title('SCI')
plt.imshow(sci, cmap='bwr', vmin=-1, vmax=+1)
plt.colorbar()
plt.subplot(1,5,4)
plt.title('NBR')
plt.imshow(nbr, cmap='coolwarm', vmin=-1, vmax=+1)
plt.colorbar()
plt.subplot(1,5,5)
plt.title('NDWI')
plt.imshow(ndwi, cmap='RdBu', vmin=-1, vmax=+1)
plt.colorbar()
plt.show();
Os índices espectrais são importantes ferramentas de análise multitemporal. Combinando a visualização de índices de vegetação, solo, queimada e água, por exemplo, pode-se compreender a evolução de uma área agrícola. A Figura a seguir representa essa visualização temporal, incluindo a composição true color, seguida da visualização dos índices espectrais: vegetação (NDVI), solo (SCI), queimadas (NBR) e água (NDWI).
Para demonstrar os scripts de geração de índices espectrais e visualização, veja o seguinte Jupyter Notebook: