Generalização e Agregação

A lingaugem LEGAL, a partir da versão 5 do Spring permite explorar as diferenças de resolução entre dados em modelagem a partir de estatísticas básicas tais como:

Media, Mediana, Maioria, Minoria, Maximo e Minimo.

A figura abaixo ilustra as perdas de informação para representar um mapa a diferentes resoluções:

Observe a expressão abaixo:

ndvi_20 = (nir - red)/(nir + red);

Supondo que as variáveis red e nir representam imagens radiometricas nas bandas do vermelho e o infra-vermelho proximo, na resolução 20x20m, a equação acima nos dá o indice de vegetação para cada local (pixel, cela) de uma área de trabalho. Entretanto pode-se ter generalizações baseadas nesses dados de sensores a diferentes resoluções, por exemplo:

ndvi_200 = Maximo ( (nir - red)/(nir + red) );

Aqui um mapa de resolução 200x200m é obtido a partir dos dados originais de sensores. É claro que as variáveis devem estar declaradas e instanciadas corretamente. Por exemplo:

red= Recupere (Nome = "Red");
nir= Recupere (Nome = "NIR");
ndvi_20 = Novo (Nome = "Ndvi_20", ResX = 20, ResY = 20);
ndvi_200 = Novo (Nome = "Ndvi_200", ResX = 200, ResY = 200);

Na verdade o uso desse recurso sintático pode ser bem mais flexivel como nos exemplos abaixo:

ndvi_200 = Maximo (banda4 - banda3)/ Media (banda4 + banda3);
ndvi_200 = (Maximo (banda4) - Media(banda3))/ Minimo(banda4 + banda3);

Dessa maneira o LEGAL pode ajudar em estudos visando a adequação de escala e resolução para integrar dados de sensores em modelagem.

Operações de Vizinhança

(a partir da versão Spring 5.0.4.2)

Com o objetivo de permitir o desenho mais flexivel e explicito de operações envolvendo vizinhanças foi introduzida uma Função “Distancia” que implementa a distancia dada pelo número mínimo de celas entre cada local e o foco da vizinhança que o contém, como na figura:

A partir de operações de ordem ou igualdade pode-se então efetivamente definir vizinhanças. Por exemplo a região ressaltada na figura anterior pode ser descrita de diversas maneiras:

(Distancia()== 2)
(1 < Distancia() < 3)
(2 <=Distancia() < 3)
...

Uma grande variedade de vizinhanças podem ser assim especificadas, como ilustrado na figura:

A interação entre as vizinhanças assim definidas e os dados matriciais de uma base de dados pode entao ser modelada como o “produto” entre a região e as variáveis que representam mapas, grades e imagens, de uma base de dados, resultando em expressões tais como:

((Distancia() < 3) * nir)
((Distancia() < 3) * red)

A partir daí pode-se então extrair estatisticas simples tais como:

Media, Mediana, Maioria, Minoria, Maximo e Minimo.

Permitindo a descrição de diversas operações de vizinhança, como ilustrado abaixo:

nir_av = Media ((Distance() < 3) * nir));
red_av = Media ((Distance() < 3) * red));
ndvi_av = Media ((Distance() < 3) * ((nir - red)/(nir + red)));

Segue-se um exemplinho que descreve um método de detecção de alvos, cuja expressão matemática pode ser dada pela equação:

det = (m0 - m1) / s1 
														

Aqui, m0 representa uma imagem com os valores médios nas vizinhanças 3×3 de cada pixel de uma imagem original, m1 por sua vez representa outra imagem com as médias sobre vizinhanças definidas pelo conjunto diferença entre vizinhanças 9×9 e 3×3, sobre essas mesmas vizinhanças é então determinado o desvio padrão correspondente, representado pela variável s1. As linhas relevantes de um programa em LEGAL para implementar esse método são exemplificadas abaixo:

m0 =  Media((Distance() <= 1) * m) ;
m1 =  Media((1 < Distance() < 4) * m) ;
s1 =  sqrt (Media((1<(Distance()< 4) * (m- m1)^2)) ;
det = (m0- m1) / s1 ;

A figura a seguir ilustra as diferentes vizinhanças envolvidas no programa acima, a imagem de entrada representada pela variável m, as médias e a imagem resultante associada à variável det

As mesmas considerações discutidas até agora são tambem válidas para outra função distancia, tambem implementada, conhecida como “city block” ou “quarteirão”. A distancia city block entre dois pontos p0, p1, no plano, de coordenadas (y0, x0) e (y1, x1)respectivamente é dada por:

D(p0, p1) = |y0 - y1| + |x0 - x1|

Um circulo de raio 2 segundo essa medida de distancia teria a forma como indica a figua abaixo:

A partir daí todas as operações discutidas anteriormente podem fazer uso da distancia cityblock, bastando para isso substituir nas expressões, a chamada “Distancia()” pela nova chamada “Cityblock()” ou “Quarteirao()”, como nos exemplos abaixo:

(Cityblock()== 20)
(10 < Cityblock() < 30)
(20 <=Cityblock() < 30)
...

Vale ainda observar que as distancias e valores envolvidos nas expressoes correspondem a escalas metricas convencionais, as mesmas usadas para definir a resolução dos dados.

Na sintaxe das funções distancia discutidas, a ausencia de parametros indicada pelo “()”, indica que cada local da área de trabalho é tomado como referencia (ou foco) para o calculo; novas versões da LEGAL no futuro devem fazer uso de parâmetros para indicar outras situações de interesse, como a distância a locais ou conjuntos de locais específicos.