• Nenhum resultado encontrado

o conjunto de objetos em movimento Oa Retorno :

o buffer ativo Ba

1 Ba← ∅

2 para todo o ∈ Oafaça

3 [lat, lng] ← encontrarLocal(o) 4 ow←1/τ 5 t ← criarSegmentoTra jetria([lat, lng], o, ow) 6 Ba←Ba+ t 7 fim 8 retorneBa

objetos ativos Oa e retorna como saída o buffer Ba. Na linha 1, ela começa limpando o buffer Ba. Em seguida, para cada objeto ativo o (linha 2), a função encontrarLocal (linha 3) interpola a posição atual [lat,lng] de o no mapa. Para esta tarefa, cálculos loxodrômicos (WEINTRIT; KOPACZ, 2011) são utilizados considerando a projeção do mapa em um globo. Na linha 4, é calculada a temperatura owdo objeto, que é inversamente proporcional ao limiar de densidade τ. Na linha 5, um segmento de linha é criado entre as posições anterior e atual de o. A função criarSegmentoTrajetória cria o segmento de linha e usa owpara definir sua opacidade e cor representando a temperatura do objeto. Essa função usa primitivas baseadas em textura, como linha e círculo, que aumentam o desempenho do sistema em cerca de dez vezes quando comparadas às primitivas geométricas padrões do WebGL, mesmo utilizando GPU. Assim, é possível obter um alto desempenho de renderização com taxas de visualização interativas. Em seguida, esse segmento de trajetória é adicionado a Ba(linha 6). No final, Baconsolida todos os segmentos como uma única textura, representando uma atualização do movimento dos objetos no período entre os instantes tk−1e tk.

4.3.4 Processamento Visual

A rota de um objeto em movimento e seus atributos espaço-temporais, como ve- locidade e direção, são essenciais para compreender melhor a dinâmica do fluxo de tráfego. Esta etapa destaca esses atributos por meio de um conjunto de operações de processamento de imagens, como filtros, suavização e contraste. Desta forma, com um conjunto pré-definido de aprimoramentos visuais, é possível destacar visualmente padrões de mobilidade, como ondas de tráfego (TREIBER; KESTING, 2013) e rotas quentes (LI et al., 2007). Esses padrões são

Figura 29 – Os efeitos de suavização e filtragem. (a) Usando apenas as contribuições dos objetos para visualizar as temperaturas das rotas. (b) As mesmas rotas após a aplicação de uma função de suavização. (c) Usando a função de suavização e um filtro que realça as rotas que atingiram a temperatura ¯T. (d) Apenas as rotas com temperatura ¯T são visualizadas em uma cor preta (sem suavização).

Fonte: o autor.

discutidos em aplicações no Capítulo 5.

Ocasionalmente, as rotas que atingem o limite de temperatura ¯T não podem ser facilmente percebidas ao visualizar apenas a temperatura resultante das rotas dos objetos. Por exemplo, na visualização das contribuições dos objetos na Figura 29a, é difícil identificar quais rotas atingiram a temperatura ¯T. Para resolver isso, esta etapa aplica uma função de suavização que enfatiza as rotas com alta densidade e suaviza aquelas que apresentam baixa densidade (Figura 29b). Além disso, é possível realçar essas rotas com uma cor diferente (Figura 29c), ou até mesmo filtrar para visualizar apenas as rotas com temperatura ¯T (Figura 29d).

Esta etapa é executada em paralelo diretamente na GPU por um programa shader2 representado pela função suavizarFiltrar no Algoritmo 3. A Tabela 2 resume as novas notações usadas nesse algoritmo. Essa função utiliza os recursos de mapeamento de texturas das GPUs modernas para otimizar o processo. Ela recebe como entrada o buffer de acumulação Bw; a chave booleana suavizar e o tipo filtro; e retorna como saída o buffer Bw atualizado. Para cada

2 Em computação gráfica, um shader é um tipo de programa de computador que desempenha uma variedade de funções especializadas em processamento de imagens, efeitos especiais ou pós-processamento de vídeo. Geralmente, esses programas são codificados para ser executados em uma GPU.

Tabela 2 – Notação usada na etapa de Processamento Visual. Notação Descrição

suavizar Um chave booleana que, se for verdadeira, ativa a suavização dos rastros dos objetos.

filtro O tipo de filtro aplicado aos buffers.

fg Uma cor de fragmento que representa um pixel de um buffer com as compo- nentes de cor RGBA. Esses fragmentos são gerados e processados em paralelo pela GPU.

fragmento fg em Bw(linha 1), o algoritmo verifica se seu componente alfa (RGBA) é zero (linha 2). Se verdadeiro, o fragmento é descartado na linha 3 e não prossegue para os próximos estágios da pipeline gráfica. Geralmente, o buffer Bwé muito esparso devido à restrição de movimento em uma rede viária e ao envelhecimento causado pela função de decaimento. Essa função aproveita essa característica e descarta diretamente na GPU todos os fragmentos com opacidade zero, resultando em melhora significativa do desempenho. Caso contrário, se o componente alfa do fragmento não for zero (linha 4), a suavização e a filtragem poderão ser aplicadas a esse fragmento. Assim, nas linhas 5-7, se suavizar for verdadeira, o algoritmo atualiza o alfa do fragmento, aplicando uma função Sigmoid para o intervalo de opacidade [0,1]. Na abordagem proposta, a Sigmoid foi utilizada, mas qualquer outra função de suavização, como uma Gaussiana, pode ser aplicada.

Em seguida, um filtro marca em preto as células que atingiram a temperatura ¯T, ou seja, a cor dos fragmentos com opacidade máxima é alterada. Relembrando o Algoritmo 2, em que a temperatura do objeto foi usada como opacidade para criar um segmento de trajetória, o Algoritmo 3 verifica se o componente alfa do fragmento é 1 e se o filtro é do tipo 1. Se verdadeiro, a cor do fragmento é configurada para preto com o máximo de alfa (Figura 29c) para distinguir as células que atingiram o limite ¯T (linha 9). Caso contrário, na linha 10, se o filtro é do tipo 2, então apenas as células com temperatura ¯T são mostradas. Esse filtro é semelhante ao filtro tipo 1, mas os fragmentos com um componente alfa menor que 1 são descartados (linhas 11-14, Figura 29d). Um valor diferente para o tipo de filtro resultará em não aplicação de filtragem. Concluindo, este algoritmo contém as principais funcionalidades que são executadas em paralelo na GPU. Outros recursos também podem ser incluídos, como correção de cor, redução de ruído e diferentes escalas de cores. Nos experimentos realizados neste trabalho (Capítulo 5), o processamento para suavizar e filtrar um buffer afetam o desempenho de renderização em apenas 5%, aproximadamente.

Algoritmo 3: suavizarFiltrar(Bw)

Documentos relacionados