COMPUTAÇÃO GRÁFICA Rasterização e Preenchimento de Regiões
Objetivos Conhecer os fundamentos da construção de linhas e círculos Conhecer o modelo scan-line modelo de sementes para preenchimento de polígonos e
Rasterização O processo que determina quais pixels produzem a melhor aproximação para a representação de uma linha é denominado de rasterização.
Rasterização A escolha é óbvia para linhas verticais, horizontais e linhas a 45º Linhas Verticais, Horizontais e a 45 o
Rasterização Para linhas com outras angulações ções
Rasterização Características Linhas retas devem parecer retas Brilho constante ao longo da linha Eficiência na construção
Algoritmo de Bresenham - Retas Fundamentos (0,1) (1,1) 1/2 Δy / Δx 1 (erro 0) Plot(1,1) 0 Δy / Δx < 1 (erro < 0) Plot(1,0) (0,0) (1,0)
Algoritmo de Bresenham - Retas Análise do erro
Algoritmo de Bresenham - Retas Análise do erro 1 0 0 1 2 3 0.5 0-0.5
Bresenham - construção de linhas cujos pontos inicial e final são (x 1,y 1 ) e (x 2,y 2 ), respectivamente x = x 1 y = y 1 Δx = x 2 - x 1 Δy = y 2 - y 1 m = Δy y / Δx e = m - 1/2 PARA i = 1 ATÉ Δx FAÇA PlotarPixelXY(x, y) ENQUANTO (e > 0) FAÇA y = y + 1 e = e - 1 FIM ENQUANTO x = x + 1 e = e + m FIM PARA FIM ALGORITMO % início do laço principal Obs.: algoritmo válido para 0 Δy Δx
Algoritmo de Bresenham - Retas Exemplo: Construir uma linha cujas extremidades são (0,0) e (5,5) usando o alg. i setpixel e x y Bresenham x = 0 y = 0 Δx = 5 Δy = 5 m = 1 e = 1/2 1 (0, 0) 2 (1, 1) 3 (2, 2) 4 (3, 3) 5 (4, 4) 1/2 0 0-1/2 0 1 1/2 1 1-1/2 1 2 1/2 2 2-1/2 2 3 1/2 3 3-1/2 3 4 1/2 4 4-1/2 4 5 1/2 5 5
Algoritmo de Bresenham - Retas Desenho da linha - (0,0) e (5,5). 5 4 3 2 1 0 0 1 2 3 4 5
Algoritmo de Bresenham Algoritmo genérico - retas Algoritmo para construção de círculos
Algoritmo de Bresenham - Círculos Eficiente Somente um octante do círculo c é gerado: as outras partes são obtidas por sucessivas reflexões
Algoritmo de Bresenham - Círculos Suponha que o círculo será gerado no sentido horário. Portanto, para qualquer ponto pertencente ao círculo, existirá 3 possibilidades de movimento para o pixel seguinte: Horizontalmente à direita; Diagonalmente para baixo à direita; Verticalmente para baixo O algoritmo escolhe o pixel que minimiza uma medida de distância entre estes movimentos e aqueles produzidos por um círculo real.
Exercício (prova - 2004) Deseja-se desenhar uma letra V usando os Algoritmos de Bresenham e/ou DDA (veja( Figura ao lado). Como você resolveria esse problema?? (pense( em uma forma eficiente) Faça as considerações que forem necessárias. Apresente o acompanhamento dos algoritmos para a construção da(s) reta(s).
Para saber mais: [ROGERS98] Capítulo 2 [FOLEY95] Capítulo 3
Preenchimento - Fundamentos Contornos fechados podem ser vistos como polígonos. O método mais simples para se preencher polígonos é o de varrer cada pixel da imagem e verificar se ele está dentro do polígono.
Fundamentos Para melhorar a eficiência da varredura, utiliza-se um bounding box. bounding box Bounding box é o menor retângulo que contém o polígono. bounding box
Varredura por linha É provável que pixels adjacentes em uma linha de varredura tenham as mesmas características (mudam quando a linha de varredura corta a borda de um polígono). Também conhecido como scan-line
Varredura por linha 6 4 2 0 P 5 P 3 P 4 Scan line 4 Scan line 2 P 1 P 2 2 4 6 8 10 x < 1 fora do polígono 1 x 8 dentro do polígono x > 8 x < 1 fora do polígono fora do polígono 1 x 4 dentro do polígono 4 < x < 6 fora do polígono 6 x 8 dentro do polígono x > 8 SCAN LINE 2 SCAN LINE 4 fora do polígono
Varredura por linha Dificuldade: intersecção de uma linha de varredura com um vértice do polígono P 3 Scan line 10 Um resultado correto é obtido quando se conta duas intersecções quando a scan line cruza com um máximo ou mínimo local (P3 e P1, respectivamente). P 4 P 2 Scan line 5 Scan line 4 Scan line 1 P 1
Preenchimento por semente - PPS Assume que pelo menos um ponto no interior do polígono é conhecido. Regiões podem ser definidas no interior do polígono ou em seu contorno.
Preenchimento por semente É importante definir a relação de vizinhança entre pixels,, 4 ou 8-conectada. VIZINHANÇA 4-CONECTADA p p VIZINHANÇA 8-CONECTADA
ALGORITMO PPS SIMPLES - USA PILHA FILO - Efetua o preenchimento de regiões partindo de um ponto interno conhecido denominado de semente Coloque um pixel qualquer, denotado por semente (s), na pilha ENQUANTO pilha vazio FAÇA -Retire um pixel p da pilha -Atribua o valor da cor de preenchimento ao pixel p -Para cada pixel adjacente a p,, observe o seu status. Caso seja um pixel de contorno ou já tenha sido visitado, ignore-os. Caso contrário, coloque-os na pilha. FIM ENQUANTO FIM ALGORITMO
Preenchimento por semente s s s s
Preenchimento por semente Exercício: verificar a ordem de preenchimento dos pixels pertencentes à região delimitada pelo contorno abaixo. Faça duas implementações para vizinhanças 4 e 8. Comente os resultados. s
Aliasing Efeito gerado pela subamostragem de sinais (imagem). Halftoning Técnica que utiliza uma baixa quantidade de níveis de cinza a fim de obter uma imagem de boa resolução visual.
Primitivas - OpenGL Vértices definidos por um bloco As faces de um polígono possuem frente e verso
Para saber mais: [ROGERS98] Capítulo 2 [MANSSOUR06] Capítulo 8