Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Térfogatvizualizáció
Szirmay-Kalos László
2
Térfogati modellek (skalár mezők)
3D tér pontjaiban egy skalár érték v(x,y,z) v(x,y,z) z y x Skalár: hőmérséklet, sűrűség nyomás, potenciál, … Származás: Euler-i szimuláció, Rekonstrukció (tomográfia) tárolás: 3D textúra vagy „voxel tömb”
3
Térfogati modell megjelenítése
Megjelenítés fényszóró anyag (participating media) analógiáját felhasználva (belsejébe belelátunk) Adott szintfelület kiemelése (külsőt lehámozzuk) Kép szintézis Transzfer függvény grad v v Kép Sűrűség + deriváltak Optikai paraméterek
4
Fényszóró közeg ds A=1 ·ds = P(ütközés)
Hatáskeresztmetszet, alias kioltási tényező ·ds = P(ütközés) A=1 Albedo a: a nem-elnyelődés valószínűsége feltéve, hogy az ütközés bekövetkezett Fekete test: albedo = 0
5
Sugársűrűség változása
ds Sugársűrűség változása s L(s+ds) L(s) L(s+ds)= L(s) – L(s)·(s)·ds + Le(s)·ds + (s)·a(s)·ds·f(‘,)Li(‘)d‘ // Kiszóródás+abszorbció // Emisszió // Beszóródás dL(s)/ds = –L(s)·(s) +Le(s)+Linscatter(s) Megoldás fényelnyelő közegre (emisszió és beszóródás nincs): L(s)= L(0)·exp(–s (s)ds)
6
Sugár masírozás (ray marching)
L(s + s) L(s) L(0) s L(s+s) = L(s) – L(s)·(s)·s + (Le(s) + Linscatter(s))·s (s) C(s) opacitás hozzájárulás L(s+s) = (1 – (s)) · L(s) + C(s) átlátszóság
7
Back-to-front ray marching
L(s+s) = (1 – (s)) · L(s) + C(s) C(s), (s)) s=0 L = L0; for(s = 0; s < T; s += s) { L = (1 – (s)) · L + C(s); }
8
Front-to-back ray marching
L*(s) (s) L*(ss)=L*(s)+(1 (s)) · C(s) (ss)=((s)) · ((s)) L* 0; for( s T; s >0 ; s -= s ) { L* + (1 ) · C(s); (1 ) · ((s)); if (break; }
9
Voxel szín és opacitás: Transfer funk: (C,)=T(v függv)·s
Röntgen: (C,)=T(v(x,y,z))·s opacitás = v(x,y,z)·s L(0) = I, egyébként C(s)=0 Klasszikus árnyalási modellek opacitás: v osztályozása C = árnyalási modell (diffúz + Phong) normál = grad v opacitás *= | grad v | Magasabb rendű derivált (görbület) Transzlucens anyagok (subsurface scattering) grad v
10
(C,) = T(v)·s = pow(v/vmax, aexp)·s
C = HLS((v/vmax+rot)·360, 0.5, 1)·s
11
Klasszikus BRDF modellek
First hit ray casting: Diffúz+Phong árnyalás v két osztályba: kék-átlátszó, sárga-átlátszatlan Csont : 1, másé 0 Csont =1, másé=0 Hús =1, másé=0
12
Illusztratív vizualizáció
13
Illusztratív vizualizáció
14
Transzlucens megjelenítés
Felező vektor
15
Transzlucens megjelenítés
16
Szintvonal, szintfelület
17
Marching cubes v(x,y,z) > szint v(x,y,z) < szint 6 2 5 1 3 7 4
4 0; Eset: =14 14 2; ; 0-3; 2-6; 0-3; 3-7; 2-6 14 255 0;
18
Szintérték = 110 Masírozó kockák Szintérték = 60
19
First hit (isosurface) ray casting
v(x,y,z) > szint normal = grad v v(x,y,z) < szint
20
GPU first hit ray-casting
right up lookat v(x,y,z) eye q p entry exit p = lookat + X right + Y up X, Y in [-1,1] Egység kocka 3D textúrával
21
CPU first hit ray-casting
For each pixel Find pixel center p raydir = normalize(p – eye); Find exit and entry for(t = entry; t < exit; t+=dt) { q = eye + raydir * t; if (volume[q] > isovalue) break; } normal vector estimation; illumination Full screen quad Interpolation from the corners Clipping central differences
22
GPU Isosurface ray-casting
volume eye, isolevel, material/light properties Ray casting CPU program Pixel shader Vertex shader Rasterization Interpolation Vertices of the window quad hpos=fullscreen textcoords ray/window Volume
23
CPU program - OpenGL display
void Display( ) { // PASS: non uniform parameters glBegin( GL_QUADS ); Vector p = lookat - Right + Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(-1, 1, 0); p = lookat - Right - Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(-1, -1, 0); p = lookat + Right - Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(1, -1, 0); p = lookat + Right + Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(1, 1, 0); glEnd(); } Camera window as texture coordinates Full screen quad
24
Ray casting: vertex shader
void VertexShader( in float4 hPosIn : POSITION, in float3 wPosIn : TEXCOORD0, out float4 hPosOut : POSITION, out float3 wPosOut : TEXCOORD0 ) { hPosOut = hPosIn; wPosOut = wPosIn; }
25
Ray casting: fragment shader
void FragmentShader( in float3 p : TEXCOORD0, // point on window uniform float3 eye, uniform sampler3D volume, // voxels uniform float isolevel, uniform float3 lightdir, lightint, kd out float3 color : COLOR ) { float3 raydir = normalize(p – eye); float3 t0 = (float3(0,0,0)-eye)/raydir; float3 t1 = (float3(1,1,1)-eye)/raydir; float3 ti = min(t0, t1); float3 to = max(t0, t1); float entry = max(max(ti.x, ti.y), ti.z); float exit = min(min(to.x, to.y), to.z); color = float(0, 0, 0); bool found = (exit <= entry); cont’d… t1.y t1.x ti.yto.y 1 t0.x ti.xto.x t0.y 1
26
Ray casting fragment shader cont’d
if ( !found ) { float3 q, normal; float dt = (exit – entry) / STEPS; for(t = entry; t < exit; t += dt) { q = eye + raydir * t; if (tex3D(volume, q).r > isolevel) found = true; } if ( found ) { normal.x = tex3d(volume, q + float3(1/RES,0,0)) – tex3d(volume, q - float3(1/RES,0,0)); normal.y = tex3d(volume, q + float3(0,1/RES,0)) – tex3d(volume, q - float3(0,1/RES,0)); normal.z = tex3d(volume, q + float3(0,0,1/RES)) – tex3d(volume, q - float3(0,0,1/RES)); normal = normalize( normal ); color = lightint * kd * max(dot(lightdir, normal), 0); q
27
Tomográfia L(s)= L(0)·exp(–(s)ds) L(s)= Le(s)ds
Mediso NanoPETTM/CT Abszorpciós Emissziós N P N e+ P LOR e- P N N L(s)= L(0)·exp(–(s)ds) (s)ds = – log(L(s)/L(0)) L(s)= Le(s)ds
28
Tomográfiás rekonstrukció
29
Szűrt visszavetítés (FBP=Filtered backprojection)
Súlyfüggvény: w(x,y)=w(r) 1/r i(x,y)=(x,y) Mérés + Visszavetítés R kör: rd w(x,y) dxdy=2Rw(r) rdrd= =2 Rw(r)r dr R dr r Korrekció Fourier térben: o(x,y)=i(x,y) w(x,y) FxFy o[x,y] = FxFy i[x,y]FxFyw[x,y] Rámpa szűrő 1/| | FxFy i[x,y] = FxFy o[x,y] | |
30
Algebrai visszavetítés
Lin egyenlet (V<D): d = A v, d = [d1,..., dD] v = [v1,..., vV] Moore féle pseudo-inverz: AT d = ATA v v = (ATA)-1AT d = A+ d v1 v2 (D) (D×V) (V) d4 v3 v4 d3 d2 (V×D) (D) (V×V) d1 = A11v1 +A13v3
31
Iteratív séma Skalármező Projekció: vonalintegrálok Összevetés a
mért értékekkel Skalármező korrekciója
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.