volshow
ボリュームの表示
構文
説明
数値配列
は、グレースケール、RGB、またはバイナリの 3 次元ボリューム vol = volshow(V)V を表示する Volume オブジェクトを作成します。マウスを使用して、表示を対話形式で回転および拡大縮小することもできます。Volume オブジェクトを作成した後は、vol を使用して、このオブジェクトのプロパティをクエリおよび変更します。プロパティの一覧については、Volume Properties を参照してください。
は、1 つ以上の名前と値の引数を使用してボリュームの外観を変更します。たとえば、vol = volshow(V,Name=Value)volshow(V,RenderingStyle="Isosurface") は、3-D ボリューム V を表示して、レンダリング スタイルを "Isosurface" に設定します。
ブロック化されたイメージ ボリューム
R2023a 以降
は、ブロック化された 3-D イメージ bVol = volshow(bim)bim を表示する BlockedVolume オブジェクトを作成します。マウスを使用して、表示を対話形式で回転および拡大縮小することもできます。BlockedVolume オブジェクトを作成した後は、bVol を使用して、このオブジェクトのプロパティをクエリおよび変更します。プロパティの一覧については、BlockedVolume Properties を参照してください。
は、1 つ以上の名前と値の引数を使用してブロック化されたボリュームの外観を変更します。たとえば、bVol = volshow(bim,Name=Value)ResolutionLevel="coarse" は、表示する解像度レベルを最も粗い解像度レベルに指定します。
メモ
Medical Imaging Toolbox™ は関数 volshow (Image Processing Toolbox™) の機能を拡張し、患者座標系の medicalVolume (Medical Imaging Toolbox) オブジェクトを表示します。詳細については、volshow (Medical Imaging Toolbox) を参照してください。
例
MRI データをワークスペースに読み込み、大きさが 1 の次元を削除します。
load mri
V = squeeze(D);MRI イメージに適したカラーマップと透明度 (アルファ) マップを生成します。
intensity = [0 20 40 120 220 1024]; alpha = [0 0 0.15 0.3 0.38 0.5]; color = [0 0 0; 43 0 0; 103 37 20; 199 155 97; 216 213 201; 255 255 255]/255; queryPoints = linspace(min(intensity),max(intensity),256); alphamap = interp1(intensity,alpha,queryPoints)'; colormap = interp1(intensity,color,queryPoints);
この MRI スキャンのボクセル サイズは不均一、すなわち異方性のある 1×1×2.5 mm です。適切なボクセル次元にイメージをスケーリングする変換行列を指定します。
sx = 1; sy= 1; sz = 2.5; A = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1];
スケーリングを実行する affinetform3d オブジェクトを作成します。
tform = affinetform3d(A);
カスタムのカラーマップ、透明度マップ、および変換を使用してボリュームを表示します。マウスをドラッグして、ボリュームを回転させます。スクロール ホイールを使用して、ボリュームを拡大および縮小します。
vol = volshow(V,Colormap=colormap,Alphamap=alphamap,Transformation=tform);

この例では、Medical Segmentation Decathlon データ セット [1] のサブセットを使用します。このサブセット データには、2 つの胸部 CT ボリュームとそれに対応するラベル イメージが含まれており、それらのデータは NIfTI ファイル形式で保存されています。
次のコードを実行し、MathWorks® の Web サイトから MedicalVolumNIfTIData.zip ファイルをダウンロードしてファイルを解凍します。データ ファイルのサイズは約 76 MB です。
zipFile = matlab.internal.examples.downloadSupportFile("medical", ... "MedicalVolumeNIfTIData.zip"); filepath = fileparts(zipFile); unzip(zipFile,filepath)
dataFolder フォルダーには、ダウンロードして解凍したデータが格納されます。
dataFolder = fullfile(filepath,"MedicalVolumeNIfTIData");この例で使用するボリュームとラベル イメージのファイル名を指定します。
dataFile = fullfile(dataFolder,"lung_043.nii.gz"); labelDataFile = fullfile(dataFolder,"LabelData","lung_043.nii.gz");
イメージ ファイルからイメージ データとメタデータを読み取ります。
V = niftiread(dataFile); info = niftiinfo(dataFile);
このボリュームの透明度マップとカラーマップを定義します。この例で使用する値は、手作業による試行錯誤で決定されたものです。
alpha = [0 0 0.7 1.0]; color = [0 0 0; 200 140 75; 231 208 141; 255 255 255] ./ 255; intensity = [-3024 -700 -400 3071]; queryPoints = linspace(min(intensity),max(intensity),256); alphamap = interp1(intensity,alpha,queryPoints)'; colormap = interp1(intensity,color,queryPoints);
この MRI スキャンのボクセル サイズは不均一です (つまり、異方性があります)。ファイルのメタデータからボクセルの間隔を抽出し、正しい寸法でボリュームを表示するための変換を定義します。
voxelSize = info.PixelDimensions; sx = voxelSize(2); sy= voxelSize(1); sz = voxelSize(3); A = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1];
スケーリングを実行する affinetform3d オブジェクトを作成します。
tform = affinetform3d(A);
ボリュームを 3 次元オブジェクトとして表示します。レンダリング スタイルを "CinematicRendering" として指定します。シネマティック レンダリング スタイルでは、各ボクセルに指定された色と透明度に基づいてボリュームが表示され、反復的な後処理によってフォトリアリスティックな影とライティングが生成されます。
viewer = viewer3d; vol = volshow(V,Parent=viewer, ... RenderingStyle="CinematicRendering", ... Colormap=colormap, ... Alphamap=alphamap, ... Transformation=tform);

参考文献
[1] Medical Segmentation Decathlon. "Lung." Tasks. Accessed May 10, 2018. http://medicaldecathlon.com/. Medical Segmentation Decathlon データ セットは、CC-BY-SA 4.0 のライセンスに基づいて提供されています。一切の保証および表明を行いません。詳細については、ライセンスを参照してください。
createRGBBubbles 補助関数を使用して、赤、緑、および青のバブルの RGB ボリュームを作成します。補助関数は、この例にサポート ファイルとして添付されています。
RGB = createRGBBubbles;
RGB ボリュームを表示します。
vol = volshow(RGB,RenderingStyle="GradientOpacity");ボリュームの視認性を改善するには、ビューアー ウィンドウの背景色を変更します。
viewer = vol.Parent; viewer.BackgroundColor = [0 0 0]; viewer.GradientColor = [0.2 0.2 0.2];
既定では、volshow は各ボクセルの明度を Alphamap プロパティにマッピングし、各ボクセルの透明度を表示します。ボクセルの明度は、2 次元イメージの rgb2lightness 関数の出力に似ています。
または、AlphaData プロパティを使用してカスタムのアルファ チャネルを指定することもできます。RGBA ボリュームがある場合は、配列のインデックスを使用して 4 番目のチャネルを抽出し、それを AlphaData 値として指定します。このボリュームに対し、ボリュームと同じサイズの人工アルファ チャネルを作成します。
sz = 500; val = linspace(0,1,sz); [X,Y,Z] = meshgrid(val,val,val); alpha = X.*Y.* Z; vol.AlphaData = alpha;

グレースケール ボリュームをワークスペースに読み込み、volshow を使用してそのボリュームを表示します。
load("spiralVol.mat")
h = volshow(spiralVol);
viewer = h.Parent;
hFig = viewer.Parent;
drawnowアニメーションの保存先とする GIF ファイルの名前を指定します。
filename = "animatedSpiral.gif";ボリュームの中心にカメラを向けます。
sz = size(spiralVol); center = sz/2 + 0.5; viewer.CameraTarget = center;

アニメーションのフレーム数を指定してから、ボリュームの中心付近の円内にカメラ位置の配列を作成します。
numberOfFrames =
12;
vec = linspace(0,2*pi,numberOfFrames)';
dist = sqrt(sz(1)^2 + sz(2)^2 + sz(3)^2);
myPosition = center + ([cos(vec) sin(vec) ones(size(vec))]*dist);各カメラ位置で、表示を更新して、フレームを GIF ファイルに書き込みます。ファイルはビデオ ビューアーで再生できます。
for idx = 1:length(vec) % Update the current view viewer.CameraPosition = myPosition(idx,:); % Capture the image using the getframe function I = getframe(hFig); [indI,cm] = rgb2ind(I.cdata,256); % Write the frame to the GIF file if idx==1 % Do nothing. The first frame displays only the viewer, not the % volume. elseif idx == 2 imwrite(indI,cm,filename,"gif",Loopcount=inf,DelayTime=0) else imwrite(indI,cm,filename,"gif",WriteMode="append",DelayTime=0) end end

この例では、500×500×2500 の大きなイメージ ボリュームを作成します。2.5 GB のボリュームを作成して保存するために十分なメモリがマシンにない場合は、この例を実行する前に、imSize を小さくしてください。
imSize = [500,500,2500];
バブルの 3-D イメージ シミュレーション V を作成します。これには数分かかることがあります。
V = rand(imSize,"single");
BW = false(size(V));
BW(V < 0.000001) = true;
V = bwdist(BW);
V(V <= 20) = 1;
V(V > 20) = 0;V を直接表示しようとすると、volshow はボリュームが大きすぎるというエラーを返します。代わりに、V を指す、ブロック サイズが 500×500×500 ボクセルの blockedImage オブジェクトを作成します。
bim = blockedImage(V,BlockSize=[500,500,500]);
volshow を使用して blockedImage を表示します。関数 volshow は一度に 1 つずつブロックをメモリに読み取り、個々のブロック レンダリングを繋ぎ合わせて最終的なボリュームを生成します。
bVol = volshow(bim);

入力引数
グレースケール、RGB、またはバイナリの 3 次元ボリューム。次のいずれかのオプションとして指定します。
| ボリュームのタイプ | 説明 |
|---|---|
| グレースケール | 大きさが 1 でない次元の m×n×p の数値配列として指定します。 |
| RGB | 大きさが 1 でない次元の m×n×p×3 の数値配列として指定します。データが RGBA ボリュームである場合、AlphaData プロパティを使用して透明度チャネルを指定できます。 |
| バイナリ | 大きさが 1 でない次元の m×n×p の logical 配列として指定します。 |
イメージのボリュームが大きいためにメモリに収まらない可能性がある場合、またはイメージが既に blockedImage オブジェクト形式になっている場合、bim 引数を指定します。
データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
ボリューム ビューアーによってエクスポートされたレンダリング情報。構造体として指定します。
データ型: struct
ブロック化されたイメージ ボリューム。グレースケール データ、RGB データ、または RGBA データの 3-D ブロックを読み取る blockedImage オブジェクトとして指定します。ブロック化されたイメージには単一の解像度レベルまたは複数の解像度レベルを指定できます。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: volshow(V,RenderingStyle="Isosurface") は、3-D ボリューム V を表示して、レンダリング スタイルを "Isosurface" に設定します。
メモ
ここには一部のプロパティのみを示します。インメモリ ボリュームのプロパティの完全なリストについては、Volume Properties を参照してください。ブロック化されたボリュームのプロパティの完全なリストについては、BlockedVolume Properties を参照してください。
レンダリング スタイル。次の表のいずれかの値を指定します。
| 値 | 説明 |
|---|---|
"VolumeRendering" | 各ボクセルに指定された色と透明度に基づいてボリュームを表示します。 |
"CinematicRendering" | 各ボクセルに指定された色と透明度に基づいてボリュームを表示し、反復的な後処理によってフォトリアリスティックな影とライティングを生成します。 このレンダリング スタイルは、不透明なボリュームを表示する場合に役立ちます。 |
"LightScattering" | ボリュームを通過する光の吸収、内部散乱、および外部散乱をシミュレートするボリューム光散乱モデルを使用してボリュームを表示します。 このレンダリング スタイルは、煙、霧、雲のように強度勾配が緩やかな半透明ボリュームを表示する場合に役立ちます。 |
"MaximumIntensityProjection" | 投射された各光線の強度値がデータ全体で最も大きいボクセルを表示します。RGB ボリュームの場合、CIE 1976 L*a*b* 色空間で最大の輝度をもつボクセルを表示します。 |
"MinimumIntensityProjection" | 投射された各光線の強度値がデータ全体で最も小さいボクセルを表示します。RGB ボリュームの場合、CIE 1976 L*a*b* 色空間で最小の輝度をもつボクセルを表示します。 |
"GradientOpacity" | 指定された色と透明度に基づいてボリュームを表示します。ボクセルの強度 (グレースケール ボリュームの場合) または輝度 (RGB ボリュームの場合) が表示用の光線に沿った前のボクセルと似ている場合は、追加の透明度が適用されます。
|
"Isosurface" |
|
"SlicePlanes" | 3 つの直交スライス平面を表示します。 |
ボリュームの透明度マップ。次の表のいずれかの値として指定します。
DisplayRange プロパティは、透明度マップに V の値をどのようにマッピングするかを決めます。DisplayRange の最小値以下の値は透明度の範囲の最初の値にマッピングされ、DisplayRange の最大値以上のすべての値は透明度の範囲の最後の値にマッピングされます。
AlphaData プロパティが空でない場合、 値は効果がありません。Alphamap
| 値 | 説明 |
|---|---|
| Data の値を、[0, 1] の範囲の透明度に線形にマッピングします。 |
| Data の値を、[0, 1] の範囲の透明度に 2 次的にマッピングします。このオプションを使用すると、"linear" と比較して、Data の値が低いときと高いときの透明度の変化がより急激になります。 |
| Data の値を、[0, 1] の範囲の透明度に 3 次的にマッピングします。このオプションは既定値です。このオプションを使用すると、Data の値が低いときと高いときの透明度の変化が最も急激になります。 |
| [0, 1] の範囲の値をもつ n 要素の列ベクトル | Data の値を、Alphamap の透明度値に線形にマッピングします。 |
グレースケール ボリューム データのカラーマップ。範囲 [0, 1] の値をもつ n 行 3 列の数値行列として指定します。色数 n の最大値は 256 です。RGB ボリュームを表示する場合、このプロパティは効果がありません。
レンダリング時にオブジェクト データと混合されるオーバーレイ データ。次のいずれかの値を指定します。
ビューアーは、RenderingStyle プロパティ値が "SlicePlanes"、"VolumeRendering"、または "GradientOpacity" の場合にのみオーバーレイを表示します。OverlayRenderingStyle、OverlayColormap プロパティ、および OverlayAlphamap プロパティを変更すると、オーバーレイの外観を変更できます。
オーバーレイのレンダリング スタイル。次の表のいずれかの値を指定します。
| 値 | 説明 |
|---|---|
"LabelOverlay" | 各ラベル付き領域の色と透明度に基づいてオーバーレイを表示します。このレンダリング スタイルを使用して、表示するデータの上にバイナリ セグメンテーションやセマンティック セグメンテーションの結果のような順序データを可視化します。 |
"VolumeOverlay" | 各ボクセルに指定された色と透明度に基づいてオーバーレイを表示します。 |
"GradientOverlay" | 各ボクセルの色と透明度に基づいてオーバーレイを表示します。現在のボクセルと、表示用の光線に沿った前のボクセルとの違いに基づいて、追加の透明度が適用されます。 |
出力引数
ボリューム。Volume オブジェクトとして返されます。ボリュームの特性変更の詳細については、Volume Properties を参照してください。
ブロック化されたボリューム。BlockedVolume オブジェクトとして返されます。ボリュームの特性変更の詳細については、BlockedVolume Properties を参照してください。
詳細
特定のイベントが発生したときに Volume オブジェクトまたは BlockedVolume オブジェクトから通知を受け取るには、これらのイベントに対する "リスナー" を設定します。これらのイベントのいずれかが発生したときに実行するコールバック関数を指定できます。オブジェクトがリスナーを通じてアプリケーションに通知するとき、イベントに固有のデータを返します。特定のイベントのイベント クラスを確認して何が返されたかを調べます。
| イベント名 | トリガー | イベント データ | イベント属性 |
|---|---|---|---|
ClippingPlanesChanging | オブジェクトのクリッピング平面が対話的に移動される。プログラムによってクリッピング平面が移動される場合、このイベントは実行されません。 | images.ui.graphics.events.ClippingPlanesChangedEventData |
|
ClippingPlanesChanged | オブジェクトのクリッピング平面の対話的な移動が停止するプログラムによってクリッピング平面が移動される場合、このイベントは実行されません。 | images.ui.graphics.events.ClippingPlanesChangedEventData |
|
SlicePlanesChanging | オブジェクトのスライス平面が対話的に移動される。スライス平面がプログラムで移動している場合、このイベントは実行されません。 | images.ui.graphics.events.SlicePlanesChangedEventData |
|
SlicePlanesChanged | オブジェクトのスライス平面が対話的な移動を停止している。スライス平面がプログラムで移動している場合、このイベントは実行されません。 | images.ui.graphics.events.SlicePlanesChangedEventData |
|
DataReadStarted | BlockedVolume オブジェクトがシーン内でレンダリングされるデータのブロックを送信している。このイベントは、Volume オブジェクトに対しては適用されません。 | event.EventData |
|
DataReadFinished | BlockedVolume オブジェクトがシーン内で表示されるデータのすべてのブロックを送信した。このイベントは、Volume オブジェクトに対しては適用されません。 | event.EventData |
|
バージョン履歴
R2018b で導入R2025a 以降、出力の Volume オブジェクトと BlockedVolume オブジェクトに次のプロパティが含まれるようになりました。
新しい
IsosurfaceAlphaプロパティを使用して、等値面として表示されるボリュームの透明度を制御する。新しい
Interpolationプロパティを使用して、ボリューム レンダリングの内挿方法を制御する。新しい
Pickableプロパティを使用して、ポインターの下のボクセルに関する情報を親ビューアーに表示するかどうかを制御する。
ほとんどのボリュームの内部構造をよりわかりやすく可視化するため、Alphamap プロパティの既定値が "linear" から "cubic" に変更されました。この変更は、volshow 関数を使用して表示されるボリュームの既定の外観に影響します。コードを更新する必要はありません。以前のリリースで既定となっていた外観を維持するには、Alphamap プロパティの値を "linear" として指定します。
新しい
DisplayRangeプロパティおよびDisplayRangeModeプロパティを使用して、ボリュームのスケーリングに使用する表示範囲を制御します。新しい
OverlayDisplayRangeプロパティおよびOverlayDisplayRangeModeプロパティを使用して、ボリューム オーバーレイのスケーリングに使用する表示範囲を制御します。新しい
OverlayAlphaプロパティを使用して、背景ラベルを非表示にしながら、すべての非ゼロのラベル値に均一な透明度を指定します。透明度マップの指定を容易にするために、
AlphamapプロパティとOverlayAlphamapプロパティに新しいオプション ("linear"、"quadratic"、および"cubic") が追加されました。
ラベル付けワークフローのサポートを改善するために、既定の
OverlayColormapプロパティ値がturbo(256)から、隣接する色の違いを最大化するカスタム カラーマップに変更されました。以前のリリースと同じカラーマップを適用するには、Colormapプロパティをturbo(256)として指定します。背景ラベルを非表示にしながら均一な透明度を適用するには、
OverlayThresholdプロパティよりも新しいOverlayAlphaプロパティを使用することを推奨します。OverlayThresholdの既存のインスタンスのサポートを削除する予定はありません。
ボリュームの鏡面反射率を制御し、シネマティック レンダリングまたはボリューム光散乱を使用してボリュームを表示するための、新しいプロパティ、および既存のプロパティの新しいオプションが、Volume オブジェクトに追加されました。オブジェクト作成時にこれらのプロパティ値のいずれかを設定するには、それらを名前と値の引数として関数 volshow に指定します。
ボリュームで反射される光の量を制御するには、新しい
SpecularReflectanceプロパティを使用します。ボリュームの光沢感を増やすには、鏡面反射率を大きくします。反復的な後処理を使用してフォトリアリスティックなボリュームを表示するには、
RenderingStyleプロパティを"CinematicRendering"として指定します。新しいCinematicNumIterationsプロパティを使用して、後処理の反復回数を指定します。光の吸収、内部散乱、外部散乱などのボリューム光散乱を使用してボリュームを表示するには、
RenderingStyleプロパティを"LightScattering"として指定します。レンダリングの品質と速度のバランスを指定するには、新しいLightScatteringQualityプロパティを使用します。
関数 volshow は、blockedImage オブジェクトとして保存されている大きなイメージ ボリュームの表示をサポートするようになりました。入力として blockedImage オブジェクトを渡すと、volshow はボリュームを表示し、BlockedVolume オブジェクトを作成します。BlockedVolume オブジェクトのプロパティは、3-D シーン内のブロック化されたイメージ ボリュームの外観と動作を制御します。これらのプロパティの一覧については、BlockedVolume Properties を参照してください。
関数 volshow は、volshow オブジェクトの代わりに Volume オブジェクトを返すようになりました。Volume オブジェクトは、提供するレンダリング スタイルの数を増やし、Viewer3D オブジェクトを統合してボリュームの可視化をより簡単に制御できるようになりました。Volume オブジェクトは Web グラフィックスもサポートしています。
関数 volshow は、Volume オブジェクトのプロパティに基づいてさまざまな名前と値の引数のセットを受け入れます。これらのプロパティの一覧については、Volume Properties を参照してください。
親オブジェクトを指定せずに volshow を呼び出した場合、この関数は新しい Viewer3D オブジェクトを作成し、そのオブジェクトを親に設定します。以前、この関数は関数 gcf を使用して現在の Figure を識別し、その Figure を親に設定していました。
従来の動作を再現する場合は、関数 images.compatibility.volshow.R2022a.volshow を使用して volshow オブジェクトを作成します。関数 images.compatibility.volshow.R2022a.volshow および volshow オブジェクトは将来のリリースで削除される予定であることに注意してください。
参考
ボリューム ビューアー | Volume Properties | BlockedVolume Properties | viewer3d | Surface | isosurface | slice | obliqueslice
トピック
- Display Volume Using Cinematic Rendering
- Display Interior Labels by Clipping Volume Planes
- Display Interior Labels by Adjusting Volume Overlay Properties
- Remove Objects from Volume Display Using 3-D Scissors
- Display Large 3-D Images Using Blocked Volume Visualization
- Display Translucent Volume with Advanced Light Scattering
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)