1 / 43

Aproximação de Terrenos

Aproximação de Terrenos. Uma rápida abordagem ao algorítmo Greedy Insert Fast Polygonal Approximation of Terains and Height Fields Garland – Heckbert 1995. Marcelo Barreiros Furtado LCG/COS/COPPE/UFRJ 29/08/2003. Terminologia.

mendel
Download Presentation

Aproximação de Terrenos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aproximação de Terrenos Uma rápida abordagem ao algorítmo Greedy Insert Fast Polygonal Approximation of Terains and Height FieldsGarland – Heckbert 1995 Marcelo Barreiros FurtadoLCG/COS/COPPE/UFRJ29/08/2003

  2. Terminologia • Campos de Elevação (height fields):Conjunto de amostras de elevação sobre um domínio plano. • DEMs (USGS); DTMs, GTDR (NASA); TINs.

  3. Introdução • Objetivo:Gerar modelos simplificados e precisos do campo de elevação original utilizando o menor número de triângulos possível da forma mais rápida possível. • Por quê?

  4. Introdução (cont.) • Renderização direta do modelo original (DEM, DTM, GTDR, etc.) é muito lenta; • Detalhes se perdem quando vistos à distância (acuidade visual); • Economia de memória, espaço em disco ou tráfego de rede.

  5. Definição do Problema • Assumimos que H, um conjunto discreto bidimensional de amostras de alguma superfície subjacente, é fornecido. • H(x, y) = z significa que o ponto (x, y, z) pertence à superfície real. • A superfície será reconstruída a partir da triangulação dos pontos de H.

  6. Definição do Problema (cont.) • Seja o operador de reconstrução que mapeia uma função definida sobre um conjunto disperso de pontos em um domínio contínuo (uma função como H) a uma função definida a cada ponto no domínio. • O mapeamento é feito a partir de uma triangulação do conjunto disperso de pontos, que será usada para dar valor aos demais pontos.

  7. Definição do Problema (cont.) • Se S é algum subconjunto de H, então S é a superfície reconstruída. • (S )(x, y) é o valor da superfície reconstruída para o ponto (x, y). • O problema, então, é encontrar o suconjunto S que melhor aproxima H usando o menor número de pontos possível o mais rápidamente possível.

  8. Métodos de Simplificação • Grid uniforme; • Subdivisão hierárquica; • Levantamento de características; • Decimações incrementais; • Refinamentos incrementais; etc.

  9. Método Empregado Refinamentos incrementais • Começa-se com uma aproximação inicial e iterativamente adiciona-se novos pontos como vértices na triangulação. • O processo continua até que algum objetivo pré-estabelecido seja alcançado.

  10. Análise de Erro • Erro local: |H(x, y) - (S )(x, y)| • Curvatura … • Erro global … • Produto, etc.

  11. Greedy Insertion Babylon English-Portuguese: • greedy adj. voraz; guloso; insaciável; ávido; mesquinho • insertion s. inserção; acréscimo

  12. Greedy Insertion (cont.) • Algorítmo I: Força Bruta • Algorítmo II: Otimização do Recálculo • Algorítmo III: Otimização da Seleção • Algorítmo IV: Triangulação dependente dos dados

  13. Algorítmo I • Os pontos são inseridos em uma Triangulação de Delaunay; • Aproximação inicial usando-se os pontos limítrofes de H. • Repetidamente procurar por pontos não utilizados para encontrar o que apresenta maior erro e inserí-lo à aproximação corrente até que alguma condição arbitrada seja alcançada (e.g. n° de triângulos, limite de erro).

  14. Algorítmo I (cont.) • Mesh_Insert(Point p): Insere p em uma Triangulação de Delaunay. • Mesh_Locate(Point p): Acha qual triângulo na malha contem o ponto p. • Locate_and_Interpolate(Point p): Acha o triângulo que contem p e retorna a elevação interpolada.

  15. Algorítmo I (cont.) • Mesh_Initialize():Inicializa a malha com os pontos limítrofes de H • Goal_Met(): Condição de parada (e.g n° de pontos) • Insert(Point p): marcar p como usado Mesh_Insert(p) • Error(Point p): retornar |H (p) – Locate_and_Interpolate(p)|

  16. Algorítmo I (cont.) • Greedy_Insert(): Mesh_Initialize() enquanto Goal_Met() = Falso {best nilmaxerr  0 para todo ponto de entrada p {err  Error(p) se err > maxerr então{ maxerr  errbest  p}} Insert(best) }

  17. Algorítmo I (cont.) • Análise de Custo: Seja L o custo para se localizar um ponto na triangulação de Delaunay; I o custo para se inserir um vértice na triangulação; e i o número do passo. A cada passo, classifica-se o custo em três categorias: • Seleção: encontrar o ponto de maior erro • Inserção: inserir o vértice na triangulação • Recálculo: recalcular os erros nos pontos do grid

  18. Algorítmo I (cont.) • Temos então que de forma geral: • Seleção = O(n) • Inserção = I • Recálculo = O(nL) • Pior Caso:…  L= I= O( i ); Logo: • Seleção = O(n); • Inserção = O( i ); • Recálculo = O( i n); • Então, no pior caso:

  19. Algorítmo I (cont.) • Caso Esperado:…  L = O(1); e I = Logo: • Seleção = O(n); • Inserção = • Recálculo = O(n); • Então no caso esperado:

  20. Algorítmo II • Explora a localidade das mudanças na triangulação de Delaunay para efetuar mais rapidamente o recálculo do erro. • Após a inserção de um ponto na triangulação, o ponto inserido terá arestas partindo dele até um polígono limitante. Este polígono é exatamente a área onde a triangulação se alterou, ou seja, a área onde a aproximação foi modificada. • A idéia é recomputar o erro somente para os pontos dentro desta região.

  21. Algorítmo II (cont.) • Cache [0 .. n-1]: Array de n posições que guardará o erro computado em cada ponto de entrada. • Insert(Point p) macar p como usado Mesh_Insert(p) para todo triângulo t incidente em p para todo ponto q dentro de tCache[q]  Error(q)

  22. Algorítmo II (cont.) • Greedy_Insert(): Mesh_Initialize() para todo ponto de entrada pCache[p] Error(p) enquanto Goal_Met() = Falso {best  nilmaxerr  0para todo ponto de entrada p { … } } Insert(best)

  23. Algorítmo II (cont.) … para todo ponto de entrada p {err  Cache[p] se err > maxerr então{maxerr  errbest  p } } …

  24. Algorítmo II (cont.) • Análise de Custo: Seja Aa área de recálculo no passo I, então, o custo no recálculo é O(AL) para localizar o ponto e O(A) para a interpolação, ou seja, Recálculo = O(AL). • Pior Caso: A área de recálculo se reduz somente por uma constante a cada passo, então: A = O(n – i). Logo o custo do recálculo permanece o mesmo do algorítmo original, O(nL), e a complexidade de pior caso permanece inalterada em

  25. Algorítmo II (cont.) • Caso Esperado: …  A = O(n/i); Como antes, o custo esperado para a localização e inserção são: L= O(1) e I= • Logo: • Seleção = O(n); • Inserção = • Recálculo = O(n/i); • Então, o caso esperado também continua inalterado:

  26. Algorítmo II (cont.) • Qual a diferença então? Se considerarmos somente a complexidade assintótica, nenhuma. Mas isto não é o que ocorre na prática, por estes dois motivos: • O pior caso é ainda mais improvável para o algorítmo II do que era para o algorítmo I; • O valor da complexidade assintótica pode esconder constantes significativas. No algorítmo I, tanto o recálculo como a seleção tem custo esperado de O(n). No algorítmo II, somente a seleção tem custo O(n); o recálculo caiu para O(n/i). O fator constante para o recálculo é muito maior que o da seleção, logo o recálculo é dominante para o algorítmo II na prática, o que resultaria num custo de:

  27. Algorítmo III • Optimiza tanto a seleção do ponto de maior erro quanto o recálculo dos erros. • A seleção é agilizada utilizando-se um Heap. • Para isto define-se o ponto candidato de um triângulo como sendo o ponto do grid com o maior erro na aproximação atual.

  28. Algorítmo III (cont.) • Cada triângulo pode ter no máximo um ponto candidato. A maioria dos triângulos tem um candidato, mas se o erro máximo dentro do triângulo for desprezível, ou se não houverem pontos dentro do triângulo, então o triângulo não possui nenhum candidato. • Os candidatos são, então, mantidos no heap indexado por seus respectivos erros. • A cada passo retira-se o candidato com maior erro do topo do heap.

  29. Algorítmo III (cont.) • Até agora, a função Error() tem feito: • uma busca para achar o triângulo que contém o ponto; • uma interpolação com base neste triângulo. • A interpolação é feita computando-se o plano definido pelos três vértices do triângulo, e, aplicando-se então a equação deste plano ao ponto especificado.

  30. Algorítmo III (cont.) • O recálculo pode ser, então, agilizado de duas formas: • Elilminar a busca do triângulo, armazenando-se em cada candidato um ponteiro para o triângulo que o contém. • Precomputar as equações dos planos armazenando-as junto com os triângulos.

  31. Algorítmo III (cont.) • Estruturas de dados empregadas: • Campos de Elevação • Array de pontos, cada qual contendo uma elevação H(x, y) e um bit usado/não usado. • Triangulações • Quad-Edge modificada • Faces guardam informação sobre os candidatos e o erro calculado no triângulo. • Planos • Heap • Erro do candidato e um ponteiro ao triângulo (face) a qual o candidato pertence.

  32. Algorítmo III (cont.) • HeapNode Heap_Change(HeapNode h, float key, Triangle T):se h != nilentãose key > 0entãoHeap_Update(h, key) senão{ Heap_Delete(h) retornar nil }senãose key > 0 então retornar Heap_Insert(key, T)retornar h

  33. Algorítmo III (cont.) • Scan_Triangle(Triangle T ):plane  Find_Triangle_Plane(T )best nilmaxerr  0 para todo ponto p dentro de T { err |H(p) – Interpolate_to_Plane(p, plane)| se err > maxerr então {maxerr  errbest  p} }T.heapptr  HeapChange(T.heapptr, maxerr, T )T.candpos best

  34. Algorítmo III (cont.) • Mesh_Insert (Point p, Triangle T ): Insere p dentro de T e atualiza a triangulação de Delaunay • Insert(Point p, Triangle T ): marcar p como usado Mesh_Insert(p, T ) para todo triangulo U adjacente a p Scan_Triangle(U )

  35. Algorítmo III (cont.) • Greedy_Insert(): Mesh_Initialize() para todo triangulo inicial T Scan_Triangle(T ) enquanto Goal_Met() = Falso {T Heap_Delete_Max() Insert(T.candpos, T)}

  36. Algorítmo III (cont.) • Análise de Custo: Assintóticamente, a melhoria mais significativa em relação ao algorítmo II é uma seleção mais rápida. Na prática, a otimização da interpolação é igualmente importante. Nesse novo algorítmo o custo para seleção é dividio em três partes: • Inserção no heap; • Remoção do heap; e • Atualização do heap.

  37. Algorítmo III (cont.) … Custo total do heap, por passo, e consequentemente o custo da seleção, é O(log i). Inserção e recálculo são mais “baratos” agora, uma vez que não dependem mais de L. O custo do recálculo caiu de O(AL) para O(A). • Pior Caso: No pior caso, o custo de inserção é I = O( i ), e a área de recálculo é A = O(n). Logo: • Seleção = O(log i); • Inserção = O( i ); • Recálculo = O( n); • Então, no pior caso:

  38. Algorítmo III (cont.) • Caso Esperado: No caso esperado, o custo da inserção é I=O(1) e a área de recálculo é A=O(n/i). • Logo: • Seleção = O(log i); • Inserção = O(1); • Recálculo = O(n/i); • Então, o custo do caso esperado é:

  39. O Problema do Penhasco • O algorítmo Greedy Insert não funciona bem quando o campo de elevação contém uma descontinuidade abrupta ou “Penhasco” (cliff). • Este problema é causado pelo fato do algorítmo ser extremamente local em relação aos pontos aproximados. • Uma solução seria encontrar todos penhascos e forçar a triangulação a passar por eles.

  40. Crater Lake

  41. Original x Aproximação: 0.5%

  42. Original x Aproximação: 1%

  43. Original x Aproximação: 5%

More Related