Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

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

等値面の表示

"等値面" とは、空間のボリューム内におけるすべての点が定数値をもつ表面のことです。関数 isosurface を使用して表面の外側の面および頂点を生成し、関数 isocaps を使用してボリュームのエンド キャップの面および頂点を生成します。patch コマンドを使用して、ボリュームとそのエンド キャップを描画します。

load mri D                                     % load data
D = squeeze(D);                                % remove singleton dimension
limits = [NaN NaN NaN NaN NaN 10];
[x, y, z, D] = subvolume(D, limits);           % extract a subset of the volume data

[fo,vo] = isosurface(x,y,z,D,5);               % isosurface for the outside of the volume
[fe,ve,ce] = isocaps(x,y,z,D,5);               % isocaps for the end caps of the volume

figure
p1 = patch('Faces', fo, 'Vertices', vo);       % draw the outside of the volume
p1.FaceColor = 'red';
p1.EdgeColor = 'none';

p2 = patch('Faces', fe, 'Vertices', ve, ...    % draw the end caps of the volume
   'FaceVertexCData', ce);
p2.FaceColor = 'interp';
p2.EdgeColor = 'none';

view(-40,24)
daspect([1 1 0.3])                             % set the axes aspect ratio
colormap(gray(100))
box on

camlight(40,40)                                % create two lights 
camlight(-20,-10)
lighting gouraud

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

コーン プロットの作成

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

cla                                            % clear the current axes
load wind u v w x y z                          % load data 

[m,n,p] = size(u);
[Cx, Cy, Cz] = meshgrid(1:4:m,1:4:n,1:4:p);    % calculate the location of the cones

h = coneplot(u,v,w,Cx,Cy,Cz,y,4);              % draw the cone plot
set(h,'EdgeColor', 'none')

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

Figure contains an axes. The axes 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);    % calculate the starting points of the streamlines

streamline(u,v,w,Sx,Sy,Sz)                 % draw the streamlines

axis tight equal
view(37,32)
box on

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

ストリームチューブのプロット

関数 streamtube は、ボリュームの xyz の点で速度ベクトルのストリームチューブをプロットします。チューブの幅は、各点のベクトル場の正規化された発散項に比例します。

cla

[m,n,p] = size(u);
[Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p);    % calculate the starting points of the streamlines

h = streamtube(u,v,w,Sx,Sy,Sz);            % draw the streamtubes and return an array of surfaces
set(h, 'FaceColor', 'cyan')                % use 'set' to change properties for an array of objects
set(h, 'EdgeColor', 'none')

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

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

ボリュームの可視化の組み合わせ

ボリュームの可視化を単一のプロットで組み合わせて、ボリューム内の速度フィールドのより包括的な画像を作成します。

cla
spd = sqrt(u.*u + v.*v + w.*w);                          % wind speed at each point in the volume

[fo,vo] = isosurface(x,y,z,spd,40);                      % isosurface for the outside of the volume
[fe,ve,ce] = isocaps(x,y,z,spd,40);                      % isocaps for the end caps of the volume

p1 = patch('Faces', fo, 'Vertices', vo);                 % draw the isosurface for the volume
p1.FaceColor = 'red';
p1.EdgeColor = 'none';

p2 = patch('Faces', fe, 'Vertices', ve, ...              % draw the end caps of the volume
   'FaceVertexCData', ce);
p2.FaceColor = 'interp';
p2.EdgeColor = 'none' ;

[fc, vc] = isosurface(x, y, z, spd, 30);                 % isosurface for the cones
[fc, vc] = reducepatch(fc, vc, 0.2);                     % reduce the number of faces and vertices
h1 = coneplot(x,y,z,u,v,w,vc(:,1),vc(:,2),vc(:,3),3);    % draw the coneplot
h1.FaceColor = 'cyan';
h1.EdgeColor = 'none';

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

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

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