Main Content

볼륨 데이터 시각화

이 예제에서는 MATLAB®에서 볼륨 데이터를 시각화할 수 있는 여러 가지 방법을 보여줍니다.

등가곡면(Isosurface) 표시

등가곡면은 공간의 볼륨 내에 있는 모든 점이 하나의 상수 값을 갖는 곡면입니다. isosurface 함수를 사용하여 곡면의 외부에 대한 면과 꼭짓점을 생성하고, isocaps 함수를 사용하여 볼륨의 단면에 대한 면과 꼭짓점을 생성합니다. patch 명령을 사용하여 볼륨과 볼륨의 단면을 그립니다.

load mri D                                     
D = squeeze(D);                                
limits = [NaN NaN NaN NaN NaN 10]
limits = 1×6

   NaN   NaN   NaN   NaN   NaN    10

[x, y, z, D] = subvolume(D, limits);           
[fo,vo] = isosurface(x,y,z,D,5);               
[fe,ve,ce] = isocaps(x,y,z,D,5);               
figure
p1 = patch('Faces', fo, 'Vertices', vo);       
p1.FaceColor = 'red'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: [0 0 0]
    LineStyle: '-'
        Faces: [23351x3 double]
     Vertices: [12406x3 double]

  Use GET to show all properties

p1.EdgeColor = 'none'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: 'none'
    LineStyle: '-'
        Faces: [23351x3 double]
     Vertices: [12406x3 double]

  Use GET to show all properties

p2 = patch('Faces', fe, 'Vertices', ve, ...    
   'FaceVertexCData', ce)
p2 = 
  Patch with properties:

    FaceColor: [0 0 0]
    FaceAlpha: 1
    EdgeColor: [0 0 0]
    LineStyle: '-'
        Faces: [27265x3 double]
     Vertices: [14250x3 double]

  Use GET to show all properties

p2.FaceColor = 'interp';
p2.EdgeColor = 'none';

view(-40,24)
daspect([1 1 0.3])                             
colormap(gray(100))
box on

camlight(40,40)                                
camlight(-20,-10)
lighting gouraud

Figure contains an axes object. The axes object contains 2 objects of type patch.

원뿔 플롯(Cone Plot) 생성

coneplot 명령은 속도 벡터를 볼륨의 x, y, z 점에서 원뿔로 플로팅합니다. 원뿔은 각 점에서 벡터장의 크기와 방향을 나타냅니다.

cla                                            
load wind u v w x y z                          
[m,n,p] = size(u)
m = 
35
n = 
41
p = 
15
[Cx, Cy, Cz] = meshgrid(1:4:m,1:4:n,1:4:p);    
h = coneplot(u,v,w,Cx,Cy,Cz,y,4);              
set(h,'EdgeColor', 'none')

axis tight equal
view(37,32)
box on
colormap(hsv)
light

Figure contains an axes object. The axes object contains an object of type patch.

흐름선(Streamline) 플로팅

streamline 함수는 볼륨의 x, y, z 점에서 속도 벡터의 흐름선을 플로팅하여 3차원 벡터장의 흐름을 보여줍니다.

cla

[m,n,p] = size(u);
[Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p);    
streamline(u,v,w,Sx,Sy,Sz)                 

axis tight equal
view(37,32)
box on

Figure contains an axes object. The axes object contains 21 objects of type line.

흐름 관(Streamtube) 플로팅

streamtube 함수는 볼륨의 x, y, z 점에서 속도 벡터의 흐름 관을 플로팅합니다. 흐름 관의 너비는 각 점에서 벡터장의 정규화된 발산에 비례합니다.

cla

[~,n,p] = size(u);
[Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p);    
h = streamtube(u,v,w,Sx,Sy,Sz);            
set(h, 'FaceColor', 'cyan')                
set(h, 'EdgeColor', 'none')

axis tight equal
view(37,32)
box on
light

Figure contains an axes object. The axes object contains 13 objects of type surface.

볼륨 시각화 결합

단일 플롯에서 볼륨 시각화를 결합하여 볼륨 내에서 좀 더 종합적인 속도 필드 그림을 얻을 수 있습니다.

cla
spd = sqrt(u.*u + v.*v + w.*w);                          
[fo,vo] = isosurface(x,y,z,spd,40);                      
[fe,ve,ce] = isocaps(x,y,z,spd,40);                      
p1 = patch('Faces', fo, 'Vertices', vo);                 
p1.FaceColor = 'red'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: [0 0 0]
    LineStyle: '-'
        Faces: [5340x3 double]
     Vertices: [2727x3 double]

  Use GET to show all properties

p1.EdgeColor = 'none'
p1 = 
  Patch with properties:

    FaceColor: [1 0 0]
    FaceAlpha: 1
    EdgeColor: 'none'
    LineStyle: '-'
        Faces: [5340x3 double]
     Vertices: [2727x3 double]

  Use GET to show all properties

p2 = patch('Faces', fe, 'Vertices', ve, ...              
   'FaceVertexCData', ce)
p2 = 
  Patch with properties:

    FaceColor: [0 0 0]
    FaceAlpha: 1
    EdgeColor: [0 0 0]
    LineStyle: '-'
        Faces: [464x3 double]
     Vertices: [301x3 double]

  Use GET to show all properties

p2.FaceColor = 'interp'
p2 = 
  Patch with properties:

    FaceColor: 'interp'
    FaceAlpha: 1
    EdgeColor: [0 0 0]
    LineStyle: '-'
        Faces: [464x3 double]
     Vertices: [301x3 double]

  Use GET to show all properties

p2.EdgeColor = 'none' 
p2 = 
  Patch with properties:

    FaceColor: 'interp'
    FaceAlpha: 1
    EdgeColor: 'none'
    LineStyle: '-'
        Faces: [464x3 double]
     Vertices: [301x3 double]

  Use GET to show all properties

[fc, vc] = isosurface(x, y, z, spd, 30);                 
[fc, vc] = reducepatch(fc, vc, 0.2);                     
h1 = coneplot(x,y,z,u,v,w,vc(:,1),vc(:,2),vc(:,3),3);    
h1.FaceColor = 'cyan';
h1.EdgeColor = 'none';

[sx, sy, sz] = meshgrid(80, 20:10:50, 0:5:15);           
h2 = streamline(x,y,z,u,v,w,sx,sy,sz);                   
set(h2, 'Color', [.4 1 .4])

axis tight equal
view(37,32)
box on
light

Figure contains an axes object. The axes object contains 19 objects of type patch, line.