C# + ActViz(VTK)でボリュームレンダリング

VTK (Visualization Toolkit)を利用して、ボリューム・レンダリングのアプリケーションを作ってみました。

 

  

VTKを初めて使用したので、試行錯誤の連続でした。何とか公開できるレベルになったので、ここに公開します。

 

動作環境

Microsoft Windowsが動作するPC。 .NET Framework 4 が必要です。

機能概要

1. 画像の読み込み

メニューの「ファイル」-「DICOMファイルの読み込み...」でDICOM画像の入っているディレクトリを指定するか、フォルダをドラッグ・ドロップしてください。

2.マウスの操作

左ボタン : 画像の回転、 クリップ面の操作窓。
中ボタン :  画像の平行移動
右ボタン : ウインドウ操作(Ray Cast, SSD 、モードではレベルのみ) マウスの前後移移動でウインドウ・レベル操作、マウスの左右移動でウインドウ幅の操作になります。
ホイール : 画像の拡大・縮小 

3.表示方向ボタン

A:正面、P:背面、L:左側面、R:右側面、S:上面、I:下面 を表示します。

4.表示モード

Ray Cast : レイ・キャスティング表示。ウインドウ下部のプリセットボタンやTransfer Functionの編集が可能です。
 
MIP : Maximum Intensity Projection表示
 
Gray Ramp : Composite Shade Ramp表示。 Ray Casting とMIPを合わせたような感じです
 
SSD : Shaded Surface Disokay表示。この場合ウインドウレベルは閾値になります。

5.クリッピング

不要な領域を非表示にする機能です。ハンドル(球体)を操作して、クリップ面を決めます。

6.距離・角度計測

距離または角度を計測します。一度に一箇所しか測れないので再度計測するときは「計測結果の削除」ボタンでいったん消去してください、

7.画像の保存

表示画像をJPEGで保存できます。また、メニューの「コピー」でクリップボードに画像をコピーできます。

8.動画作成

「動画作成」ボタンを押すと下のようなダイアローグが表示されます。
 
回転方向(縦回りか横回り)、何度刻みで作成するかを指定して、追加ボタンを押します。例では横に1回転、縦に1回転する24枚の画像を作成します。
出来上がる画像は連番の画像ファイルです。動画編集ソフトなどでビデオファイルに変換してください。

8..STL(3Dプリンタ用データ)出力機能

VTKにSTL Writerというクラスがあったので、試しに入れてみました。右のSSD画像上でマウスの右ドラッグで閾値を設定してください。
出力されるポリゴンの数(出力データの分解能に影響します)を3段階選択できます。 
 
出力されたデータは不完全です! CADやSTL編集が可能なソフトで修正してからお使いください。

9.背景色とライト

背景色とライトの強さを指定できます。

10.Transfer Functionについて

Transfer Function とは、レイ・キャスティング表示の際に使用されるもので、対象とするボクセルの値をどのような色・透明度(正確には非透明度)で表示するかを決定するための関数です。
(1)・プリセット・ボタン

あらかじめ、いくつかの関数を登録してあります。追加ボタンを押すと現在の表示状態が登録されます。削除ボタンで削除されます。編集ボタンを押すと色、オパシティ(非透明度)の編集ができます。

(2)色の変更

編集したい色の資格をクリックして選択(赤い資格になります)し、色を変更してください。「色」のボタンをカラー選択ダイアローグが表示されます。
追加ボタンを押すと色の指定個所を追加できます。削除ボタンを押すと選択されている色指定を解除します。
編集結果を画像で確認するときは必ず適用ボタンを押してください。

(3)オパシティの編集

変更したい部分(青■)を選択し、マウスで移動してください。色の指定と同様、追加・削除できます。
編集結果を画像で確認するときは必ず適用ボタンを押してください。

テストに使用したデータ

サイバネットシステム株式会社 様が公開されているCT画像データを使用させていただきました。
こちらのページにある「 CT AAA data with contrast media 」を使用しました。

ダウンロード

VolRen.zip (14.6 MB)

ソースコード

本ソフトウェアはMicrosoft VisualStudio 2015 Community、Kitware ActViz Open Source Editionを使用して作成しています。
ActVizは32ビット、64ビット版が公開されていますので、64ビット版を使用してコンパイルし直すことで64ビットアプリケーションにすることができます。

本ソフトウェアはVTKの勉強のために作成しました。VTKユーザーは日本ではそれ程多くないようで、解説などもあまり見かけません。なので、詳しい方にいろいろ教えていただけると助かります。(例えば指定した領域を削除するとか骨だけ消すとか、血管だけ抽出するとかいった機能が加わるとより実用的ですし、)
というわけで、ソースも公開しますので、自由に機能拡張してください。できれば改変したものも積極的に公開してください。また、作者に連絡いただけると嬉しいです。

ソースのダウンロード (917 kB)