Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

スカラー ボリューム データの可視化の技法

スカラー ボリューム データとは

スカラー ボリューム データは、データの 3 次元配列と同じ大きさの 3 つの座標配列で構成されます。座標配列は、各データ点の xy z 座標を指定します。

座標の単位は、データのタイプにより異なります。たとえば、流体データの座標単位はインチで、データ単位は psi です。

MATLAB® の関数には、スカラー データの可視化に有用な関数が多くあります。

  • スライス平面は値を色に写像することにより、ボリューム データ内のデータ値の分布を表現する 1 つの方法です。スライス平面は任意の方向に向かわせることができ、非平面のスライスを表示することができます(スライス平面の使い方の説明は、sliceボリューム データのスライスの例やコンテキストの表示で使用するスライス平面を参照してください)。等値面のカラーリングに使用するデータを指定できます。これにより、異なる色や表面の形状の情報を表示できます (isocolors を参照)。

  • 等高線スライスは、ボリューム データ内の指定した座標で描画された等高線図です。等高線図を使用すると、与えられた平面内においてデータ値が等しい位置を確認できます。例については、関数 contourslice を参照してください。

  • 等値面は、同じ値の点を patch グラフィックス オブジェクトの頂点として使用して作成された表面です。

MRI データの表示方法

スカラー データの例の 1 つに、MRI (Magnetic Resonance Imaging) のデータがあります。このデータは、人体のような体積を通過する一定のスライス平面から構成されています。MATLAB は人の頭部の 27 個のイメージ スライスである一組の MRI データセットを含んでいます。この例は、MRI データに適用される以下の技法を説明します。

データ形式の変更

MRI データ D は、128 x 128 x 1 x 27 配列として格納されています。3 番目の配列次元は、通常イメージ カラー データに対して使用されます。ただし、これらはインデックス付きイメージ (カラーマップ map が読み込まれます) なので、3 番目の次元には情報はありません。これは squeeze コマンドを使用して削除することができます。結果は、128 x 128 x 27 の配列になります。

はじめの手順として、データを読み込み、データ配列を 4 次元から 3 次元に変換します。

load mri
D = squeeze(D);

MRI データのイメージ表示

いずれかの MRI イメージを表示するには、image コマンドを使用します。

  • データと一緒に読み込まれる MRI カラーマップを使用する新しい figure を作成します。

  • 8 番目のイメージを得るために、データ配列にインデックス付けをします。

  • axis スケーリングを調整します。

figure
colormap(map)
image_num = 8;
image(D(:,:,image_num))
axis image

例の次の部分で使用するため、x 軸と y 軸の範囲を保存します。

x = xlim;
y = ylim;

2 次元等高線スライスの表示

MRI データは 3 次元オブジェクトを徐々に進めながら取得するスライスを収集したものであるため、これはボリューム データとして可視化できます。contourslice を使用すると、ボリューム データのスライスの等高線図を表示できます。この例の最初の部分で作成したイメージと同じ方向で、同じサイズをもつ等高線図を作成します。

  • y 軸の方向を調整します (axis)。

  • 制限を設定します (xlimylim)。

  • データの縦横比を設定します (daspect)。

詳細を見やすくするため、この等高線図は jet カラーマップを使用しています。関数 brighten は、カラー値の明度を低くします。

cm = brighten(jet(length(map)),-.5);
figure
colormap(cm)
contourslice(D,[],[],image_num)
axis ij
xlim(x)
ylim(y)
daspect([1,1,1])

3 次元等高線スライスの表示

2 次元オブジェクトであるイメージとは異なり、等高線スライスは任意の方向で表示できる 3 次元オブジェクトです。たとえば、3 次元表示内に 4 つの等高線スライスを表示できます。

figure
colormap(cm)
contourslice(D,[],[],[1,12,19,27],8);
view(3);
axis tight

MRI データへの等値面の適用

ボリューム データの全体的な構造を表示するために等値面を使用することができます。isocaps と組み合わせて、等値面内部のデータに関する情報を表示することができます。

まず、smooth3 を使用してデータを平滑化し、isosurface を使用して等値面データを計算します。patch を使用して、isocaps の元のグレー スケール カラー マップを使用した図にこのデータを表示します。

figure
colormap(map)
Ds = smooth3(D);
hiso = patch(isosurface(Ds,5),...
   'FaceColor',[1,.75,.65],...
   'EdgeColor','none');
   isonormals(Ds,hiso)

関数 isonormals は、平滑化データから得られた頂点法線を使用して等値面をレンダリングし、等値面の品質を高めます。等値面は、単色を使用して等値を表します。

断面図を表示するための等値断面の追加

isocaps を使用して表面として同じ等値 (5) で表示される別のパッチのデータを計算します。内部の詳細を表すために、平滑化されていないデータ (D) を使用します。これは頭頂部をスライスしたように見えます。等値断面が小さいほど最終的な表示では見えにくくなります。

hcap = patch(isocaps(D,5),...
   'FaceColor','interp',...
   'EdgeColor','none');

表示の定義

表示を定義し、縦横比を設定します (viewaxisdaspect)。

view(35,30) 
axis tight 
daspect([1,1,.4])

ライティングを追加する

ライティングを追加し、ボリューム データの勾配をもとに面法線を再計算し、より平滑なライティングを生成します (camlightlightingisonormals)。等値断面の AmbientStrength プロパティを大きくし、等値面に影響を与えずに色を明るくします。等値面の SpecularColorReflectance を設定して、鏡面反射光の色を等値面の色に近付け、SpecularExponent を設定して鏡面スポットのサイズを小さくします。

lightangle(45,30);
lighting gouraud
hcap.AmbientStrength = 0.6;
hiso.SpecularColorReflectance = 0;
hiso.SpecularExponent = 50;

以下に、MRI データを可視化するために等値面と組み合わされた等値断面を示します。

等値断面では、内挿された面のカラーリングを使用します。これは Figure のカラーマップによってパッチの色が決まることを意味します。この例は、データと共に与えられたカラーマップを使用しています。

他のデータ値における等値断面を表示するには、等値面の値の変更や、subvolume コマンドの使用を試してください。例は、isocaps および subvolume のリファレンス ページを参照してください。