Main Content

ボリューム データの可視化

この例では、MATLAB® でボリューム データを可視化するいくつかの方法を示します。

等値面の表示

"等値面" とは、空間のボリューム内におけるすべての点が定数値をもつ表面のことです。関数 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]

  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]

  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]

  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.

コーン プロットの作成

coneplot コマンドは、ボリュームの xyz の点で速度ベクトルを円錐形にプロットします。円錐は、各点におけるベクトル場の大きさと方向を表します。

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 は、ボリュームの xyz の点で速度ベクトルの流線をプロットし、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 は、ボリュームの xyz の点で速度ベクトルのストリームチューブをプロットします。チューブの幅は、各点のベクトル場の正規化された発散項に比例します。

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]

  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]

  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]

  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]

  Show all properties

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

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

  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.