このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
volshow
ボリュームの表示
構文
説明
数値配列
は、3-D ボリューム 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 データのボリュームの可視化
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);
一時停止して反復的な後処理をすべて適用してから、ライブ エディターで表示を更新します。
pause(3) drawnow
参考文献
[1] Medical Segmentation Decathlon. "Lung." Tasks. Accessed May 10, 2018. http://medicaldecathlon.com/. Medical Segmentation Decathlon データ セットは、CC-BY-SA 4.0 のライセンスに基づいて提供されています。一切の保証および表明を行いません。詳細については、ライセンスを参照してください。
回転するボリュームのアニメーションの作成
グレースケール ボリュームをワークスペースに読み込み、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);
入力引数
V
— 3-D ボリューム
数値配列
3-D ボリューム。数値配列として指定します。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
| char
config
— レンダリング情報
構造体
ボリューム ビューアーによってエクスポートされたレンダリング情報。構造体として指定します。
データ型: struct
bim
— ブロック化されたイメージ ボリューム
blockedImage
オブジェクト
ブロック化されたイメージ ボリューム。グレースケール データ、RGB データ、または RGBA データの 3-D ブロックを読み取る blockedImage
オブジェクトとして指定します。ブロック化されたイメージには単一の解像度レベルまたは複数の解像度レベルを指定できます。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: volshow(V,RenderingStyle="Isosurface")
は、3-D ボリューム V
を表示して、レンダリング スタイルを "Isosurface"
に設定します。
メモ
ここには一部のプロパティのみを示します。インメモリ ボリュームのプロパティの完全なリストについては、Volume Properties を参照してください。ブロック化されたボリュームのプロパティの完全なリストについては、BlockedVolume Properties を参照してください。
RenderingStyle
— レンダリング スタイル
"VolumeRendering"
(既定値) | "CinematicRendering"
| "LightScattering"
| "MaximumIntensityProjection"
| "MinimumIntensityProjection"
| "GradientOpacity"
| "Isosurface"
| "SlicePlanes"
レンダリング スタイル。次の表のいずれかの値を指定します。
値 | 説明 |
---|---|
"VolumeRendering" | 各ボクセルに指定された色と透明度に基づいてボリュームを表示します。 |
"CinematicRendering" | 各ボクセルに指定された色と透明度に基づいてボリュームを表示し、反復的な後処理によってフォトリアリスティックな影とライティングを生成します。 このレンダリング スタイルは、不透明なボリュームを表示する場合に役立ちます。 |
"LightScattering" | ボリュームを通過する光の吸収、内部散乱、および外部散乱をシミュレートするボリューム光散乱モデルを使用してボリュームを表示します。 このレンダリング スタイルは、煙、霧、雲のように強度勾配が緩やかな半透明ボリュームを表示する場合に役立ちます。 |
"MaximumIntensityProjection" | 投射された各光線の強度値がデータ全体で最も大きいボクセルを表示します。RGB ボリュームの場合、CIE 1976 L*a*b* 色空間で最大の輝度をもつボクセルを表示します。 |
"MinimumIntensityProjection" | 投射された各光線の強度値がデータ全体で最も小さいボクセルを表示します。RGB ボリュームの場合、CIE 1976 L*a*b* 色空間で最小の輝度をもつボクセルを表示します。 |
"GradientOpacity" | 指定された色と透明度に基づいてボリュームを表示します。ボクセルの強度 (グレースケール ボリュームの場合) または輝度 (RGB ボリュームの場合) が表示用の光線に沿った前のボクセルと似ている場合は、追加の透明度が適用されます。
|
"Isosurface" |
|
"SlicePlanes" | 3 つの直交スライス平面を表示します。 |
Alphamap
— ボリューム コンテンツの透明度マップ
linspace(0,1,256)'
(既定値) | n 要素の列ベクトル
ボリューム コンテンツの透明度マップ。[0, 1] の範囲の値をもつ n 要素の列ベクトルとして指定します。ベクトルの最大長は 256 です。RGB ボリュームを表示する場合、このオブジェクトは CIE 1976 L*a*b* 色空間のボクセルの輝度を使用して、透明度マップから透明度を割り当てます。AlphaData
プロパティが空でない場合、Alphamap
プロパティは効果がありません。
Colormap
— カラーマップ
gray(256)
(既定値) | n 行 3 列の数値行列
グレースケール ボリューム データのカラーマップ。範囲 [0, 1] の値をもつ n 行 3 列の数値行列として指定します。色数 n の最大値は 256 です。RGB ボリュームを表示する場合、このプロパティは効果がありません。
OverlayData
— オーバーレイ データ
[]
(既定値) | 数値配列 | blockedImage
オブジェクト
レンダリング時にオブジェクト データと混合されるオーバーレイ データ。次のいずれかの値を指定します。
ビューアーは、RenderingStyle
プロパティ値が "SlicePlanes"
、"VolumeRendering"
、または "GradientOpacity"
の場合にのみオーバーレイを表示します。OverlayRenderingStyle
、OverlayColormap
プロパティ、および OverlayAlphamap
プロパティを変更すると、オーバーレイの外観を変更できます。
OverlayRenderingStyle
— オーバーレイのレンダリング スタイル
"LabelOverlay"
(既定値) | "VolumeOverlay"
| "GradientOverlay"
オーバーレイのレンダリング スタイル。次の表のいずれかの値を指定します。
値 | 説明 |
---|---|
"LabelOverlay" | 各ラベル付き領域の色と透明度に基づいてオーバーレイを表示します。このレンダリング スタイルを使用して、表示するデータの上にバイナリ セグメンテーションやセマンティック セグメンテーションの結果のような順序データを可視化します。 |
"VolumeOverlay" | 各ボクセルに指定された色と透明度に基づいてオーバーレイを表示します。 |
"GradientOverlay" | 各ボクセルの色と透明度に基づいてオーバーレイを表示します。現在のボクセルと、表示用の光線に沿った前のボクセルとの違いに基づいて、追加の透明度が適用されます。 |
出力引数
vol
— ボリューム
Volume
オブジェクト
ボリューム。Volume
オブジェクトとして返されます。ボリュームの特性変更の詳細については、Volume Properties を参照してください。
bVol
— ブロック化されたボリューム
BlockedVolume
オブジェクト
ブロック化されたボリューム。BlockedVolume
オブジェクトとして返されます。ボリュームの特性変更の詳細については、BlockedVolume Properties を参照してください。
詳細
イベント
特定のイベントが発生したときに Volume
オブジェクトまたは BlockedVolume
オブジェクトから通知を受け取るには、これらのイベントに対する "リスナー" を設定します。これらのイベントのいずれかが発生したときに実行するコールバック関数を指定できます。オブジェクトがリスナーを通じてアプリケーションに通知するとき、イベントに固有のデータを返します。特定のイベントのイベント クラスを確認して何が返されたかを調べます。
イベント名 | トリガー | イベント データ | イベント属性 |
---|---|---|---|
ClippingPlanesChanging | オブジェクトのクリッピング平面が対話的に移動している。クリッピング平面がプログラムで移動している場合、このイベントは実行されません。 | images.ui.graphics3d.events.ClippingPlanesChangedEventData |
|
ClippingPlanesChanged | オブジェクトのクリッピング平面が対話的な移動を停止している。クリッピング平面がプログラムで移動している場合、このイベントは実行されません。 | images.ui.graphics3d.events.ClippingPlanesChangedEventData |
|
SlicePlanesChanging | オブジェクトのスライス平面が対話的に移動している。スライス平面がプログラムで移動している場合、このイベントは実行されません。 | images.ui.graphics3d.events.SlicePlanesChangedEventData |
|
SlicePlanesChanged | オブジェクトのスライス平面が対話的な移動を停止している。スライス平面がプログラムで移動している場合、このイベントは実行されません。 | images.ui.graphics3d.events.SlicePlanesChangedEventData |
|
DataReadStarted | BlockedVolume オブジェクトがシーン内でレンダリングされるデータのブロックを送信している。このイベントは、Volume オブジェクトに対しては適用されません。 | event.EventData |
|
DataReadFinished | BlockedVolume オブジェクトがシーン内で表示されるデータのすべてのブロックを送信した。このイベントは、Volume オブジェクトに対しては適用されません。 | event.EventData |
|
バージョン履歴
R2018b で導入R2023b: シネマティック レンダリング、ボリューム光散乱、および鏡面反射率
ボリュームの鏡面反射率を制御し、シネマティック レンダリングまたはボリューム光散乱を使用してボリュームを表示するための、新しいプロパティ、および既存のプロパティの新しいオプションが、Volume
オブジェクトに追加されました。オブジェクト作成時にこれらのプロパティ値のいずれかを設定するには、それらを名前と値の引数として関数 volshow
に指定します。
ボリュームで反射される光の量を制御するには、新しい
SpecularReflectance
プロパティを使用します。ボリュームの光沢感を増やすには、鏡面反射率を大きくします。反復的な後処理を使用してフォトリアリスティックなボリュームを表示するには、
RenderingStyle
プロパティを"CinematicRendering"
として指定します。新しいCinematicNumIterations
プロパティを使用して、後処理の反復回数を指定します。光の吸収、内部散乱、外部散乱などのボリューム光散乱を使用してボリュームを表示するには、
RenderingStyle
プロパティを"LightScattering"
として指定します。レンダリングの品質と速度のバランスを指定するには、新しいLightScatteringQuality
プロパティを使用します。
R2023a: ブロック化されたイメージの表示
関数 volshow
は、blockedImage
オブジェクトとして保存されている大きなイメージ ボリュームの表示をサポートするようになりました。入力として blockedImage
オブジェクトを渡すと、volshow
はボリュームを表示し、BlockedVolume
オブジェクトを作成します。BlockedVolume
オブジェクトのプロパティは、3-D シーン内のブロック化されたイメージ ボリュームの外観と動作を制御します。これらのプロパティの一覧については、BlockedVolume Properties を参照してください。
R2022b: Volume
オブジェクトを返す
関数 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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)