• Nenhum resultado encontrado

3.3 Rendering de volume

3.3.1 M´etodos com precis˜ao de objeto

Os m´etodos com precis˜ao de objeto s˜ao simplesmente projec¸˜oes de voxels, chamadas tamb´em de

forward projections. Eles consistem em varrer os voxels da cena e calcular qual ´e a projec¸˜ao destes no plano

da imagem, cuja posic¸˜ao e orientac¸˜ao ´e definida pela posic¸˜ao do observador. Detalhes matem´aticos sobre a projec¸˜ao, uma rotac¸˜ao no caso ortogonal, s˜ao dados no apˆendice A. O algoritmo de projec¸˜ao de voxel utiliza um z-buffer: um mapa de pixels do tamanho da imagem, s´o que armazena as distˆancias dos voxels projetados nos pixels, ao inv´es da intensidade luminosa. Ao projetar sobre o plano, determina-se em qual pixel mais pr´oximo, o voxel se projeta. Caso v´arios voxels se projetem no mesmo pixel, temos que determinar qual ´e vis´ıvel (no caso de um volume bin´ario, opaco), isto ´e, qual ´e o voxel mais perto do observador. Por isso, temos trˆes estrat´egias poss´ıveis.

A primeira e mais cl´assica estrat´egia consiste em comparar a distˆancia armazenada no z-buffer com a distˆancia do voxel projetado, candidato a ser vis´ıvel. Se esta ´ultima for menor, o z-buffer ´e atualizado, assim como o mapa que conserva as informac¸˜oes sobre os voxels projetados (´ındice de localizac¸˜ao, ´ındice do objeto por exemplo). Caso contr´ario, nenhuma atualizac¸˜ao ´e efetuada (vide o pseudoc´odigo a seguir) .

Para todo voxel V (x, y, z) ∈ Cena,

Projetar V : (u, v, d) ←− Mproj· (x, y, z);

Se d ≤ ZBuffer(u, v),

ZBuf f er(u, v) ←− d; M apaIndices(u, v) ←− V ;

Na segunda estrat´egia, varre-se a cena no sentido de tr´as para frente (back-to-front, BTF) em relac¸˜ao ao observador (Frieder et al., 1985). Cada novo voxel candidato a ser projetado num pixel ´e projetado,

pegando sistematicamente o lugar do antigo voxel projetado, pois com toda certeza, pela ordem de varredura, o ´ultimo fica mais perto do observador. Essa abordagem fica geralmente mais eficiente por economizar as comparac¸˜oes com o z-buffer. No entanto, o acesso BTF para qualquer direc¸˜ao de observac¸˜ao ´e poss´ıvel com um custo adicional em espac¸o mem´oria (para armazenar o volume nas trˆes direc¸˜oes principais).

Enfim, pode-se varrer a cena no sentido oposto (front-to-back, FTB). Cada novo voxel candidato a ser projetado num pixel ´e realmente projetado se o pixel ainda est´a livre (se nenhum voxel j´a foi projetado).

3.3.1.2 Otimizac¸˜oes em qualidade e eficiˆencia

Esses m´etodos de precis˜ao de objeto tˆem duas desvantagens do ponto de vista de eficiˆencia e quali- dade do resultado:

- ter que varrer a cena toda e projetar os n voxels de objeto, levando a uma complexidade de algoritmo O(n). - gerar uma imagem com buracos, quando o tamanho do voxel ´e maior que o do pixel.

Para reduzir essa segunda desvantagem, pode-se projetar cada voxel num pixel e sua vizinhanc¸a. Esse m´etodo ´e chamado de splatting (Westover, 1990). ´E como se o voxel fosse projetado e espalhado lo- calmente no plano da imagem. Um voxel ´e representado por uma nuvem de pontos (footprint) na imagem. Observa-se que esse espalhamento dos voxels projetados pode ser tanto uma melhoria da imagem com bu- racos como uma degradac¸˜ao. Com efeito, quanto maior for a footprint, mais borrada parece a imagem. Um bom tamanho de footprint ´e relacionado `a raz˜ao do tamanho do pixel sobre o do voxel. Usa-se uma footprint maior quando esta raz˜ao ´e menor. Mais recentemente, foram propostos m´etodos mais sofisticados de splat-

ting com a preocupac¸˜ao da qualidade da imagem. M´etodos corrigindo artefatos de popping e borrado s˜ao

relatados em (Mueller e Crawfis, 1998; Mueller et al., 1999). Yagel et al., mais interessados na eficiˆencia do splatting, representam cada voxel como um pequeno mapa de textura (do tamanho do footprint) per- pendicular `a direc¸˜ao de observac¸˜ao, e renderizam esses voxels “nebulosos” via hardware especializado em mapeamento de textura (Yagel et al., 1995).

Outras otimizac¸˜oes do algoritmo de base visando maior eficiˆencia foram publicadas. O m´etodo de transformac¸˜ao incremental para a projec¸˜ao evita multiplicac¸˜oes matriciais, calculando-se cada projec¸˜ao em func¸˜ao da anterior (Machiraju e Yagel, 1993). Por voxel, ´e necess´ario apenas uma adic¸˜ao ao inv´es de duas adic¸˜oes mais trˆes multiplicac¸˜oes de floats. Uma vers˜ao paralela do algoritmo incremental com splatting BTF ´e poss´ıvel.

A fatorac¸˜ao shear-warp (SW), proposta por Lacroute (Lacroute e Levoy, 1994; Lacroute, 1995), equivale a uma fatorac¸˜ao da matriz de projec¸˜ao (3D) em duas matrizes de transformac¸˜ao: um cisalhamento 3D (shear), bastante r´apido que desloca as fatias do volume, seguido de uma transformac¸˜ao 2D (warp) para tirar as distorc¸˜oes inseridas na imagem intermedi´aria e obter uma imagem final correta. A transformac¸˜ao

shear faz com que as fatias se tornem perpendiculares `a direc¸˜ao de visualizac¸˜ao. Desta maneira, a projec¸˜ao

m´etodo proposto utiliza tamb´em estruturas de dados particulares para acelerar o processo de visualizac¸˜ao. Este m´etodo tornou-se bastante popular por ser facilmente paraleliz´avel. Schmidt et al. (Schmidt et al., 2000) prop˜oem uma visualizac¸˜ao baseada nele, misturando dados m´edicos reais com modelos poligonais. O apˆendice D d´a o detalhamento das operac¸˜oes necess´arias `a fatorac¸˜ao SW.

O shell rendering proposto por Udupa e Odhner (Udupa e Odhner, 1993) utiliza uma estrutura de dados muito compacta: shell (casca). Esta armazena atributos de visualizac¸˜ao (opacidade, ´ındice, normal...) para voxels da cena que s˜ao potencialmente vis´ıveis, ou seja, os voxels das bordas dos objetos. No caso de volume bin´ario, basta achar os voxels de objeto (opacos) que tˆem pelo menos um vizinho de fundo (transparente). Se o volume for em tons de cinza, s˜ao selecionados voxels com opacidade superior a um certo valor (para ser considerados de objeto) e cuja vizinhanc¸a cont´em pelo menos um voxel de opacidade que n˜ao satisfaz o crit´erio de pertenc¸a a objeto. Este m´etodo faz parte dos m´etodos de volume rendering, pois renderiza os voxels (volumes elementares) de borda. Por´em, ele n˜ao ´e um rendering direto, pois existe um passo de extrac¸˜ao de bordas. Mas tamb´em n˜ao ´e um rendering de superf´ıcie, pois essa casca, agregac¸˜ao de voxels, tem uma certa espessura. Rocha propˆos um m´etodo que alia essa estrutura compacta de shell com a fatorac¸˜ao SW (Rocha, 2002).