RoiPaintの操作 - 可視化
RoiPaintは、
・ 3次元画像の可視化
・ 3次元画像の領域分割
・ 抽出した領域のメッシュデータ(OBJ, STL)への変換
を主に行うソフトです。
Download : http://takashiijiri.com/SoftRoiPainter/index.html
※ ソースコード(githubリポジトリ)は現在公開準備中です.
RoiPaintの操作 - 基本操作
左ドラッグ:モデルの平行移動
右ドラッグ:モデルの回転
CT画像の断面上でホイール回転:CT画像の断面の移動
何もない空間上でホイール回転
orホイールでドラッグ:ビューの拡大縮小
DICOMデータの取り込み
DICOMデータとは、X線CTやMRIによって撮影された多数の「断面画像」のこと。
(拡張子は.dcm)
RoiPaintを起動したら、
メニューバーから[File >Open DCM slices(.dcm)]を選択し、
全てのDICOMデータを全選択して開きます。
※データ量にもよりますが、読み込みには時間がかかります。
伝達関数による透明度変更
画像読み込み直後、対象物(昆虫)は可視化できていません(画像参照)。
対象物を可視化するためには、対象物のみを不透明にする必要があります。
このため、[Volume Information]というダイアログにある[transFunc1, transFunc2]のグラフを変更します。
※ダイアログ上部のチェックボックスから背景色やxyz平面の表示非表示などの変更ができます。
※伝達関数(transfer function)とは、画素値から透明度や画素値から擬似色へ変換する関数の総称です。
伝達関数による透明度変更(続)
transfunc1は、横軸が輝度値、縦軸が不透明度を表します。
transfunc2は、横軸が画像勾配、縦軸が不透明度を表します。
グラフをマウスでなぞるようにすると、グラフの形を変更できます。
対象物の周りの空間は輝度値が低く、対象物自体は輝度値が高いため、参考画像のグラフのように輝度値が低い部分の不透明度を0にすることで、周りの空間が表示されなくなり対象物が浮かび上がります。
ただし、右図の場合、対象物の乗っている地面も輝度値が高く、厳密には対象物「だけ」を浮かび上がらせることはできません。
RoiPaintの操作 - Region Growing
ここでは、Region Growing法を用いて連続する領域を抽出する作業を行います。
メニューバーから、
[ ModeSwitch >Segmentation Region Growing ]
を選択します
Region Growing
[Volume Information]ダイアログ上部の、[XY][YZ][ZX]のチェックマークを入れると、それぞれの平面が表示され、断面図を見ることができます。
断面図上のなるべく明るいところを、ダブルクリックし赤い点を付けます。
Region Growing(続)
[Region Growing]ダイアログの[Thresholding]の最小値・最大値を変更します。
この値に関しては、様々な値を試して見る他ありません。
※目安(撮影するCT装置にも依存)
昆虫 : 最小値3000~9000、最大値そのまま
貝/種子: 最小値15000~20000、最大値そのまま
値を指定し[Region Growing 6]ボタンを押しすと対象物が選択されます。
※Region growing法は、シード(赤点)から始め、閾値を満足する画素を追加する要用で領域を拡張していく手法です
Region Growing(続)
[Volume Information]ダイアログの[Volume]のチェックを外す、またはVボタンを押すと、緑色で表示されたボリュームが消え、
CT画像上で選択されている範囲が赤く表示されます。
この赤い表示はスペースボタンを押すことで非表示にできるので、元のCT画像の選択した部分(白いところ)と、赤い選択範囲がぴったりあっているか、調整しながらRegion Growingを行うと良いです。
Region Growing(続)
[Endo & Store Region] を押すと、右図の通り、[1:region]として先ほど分割した領域が表示されます。
RoiPaintの操作 - ストロークトリミング
メニューバーから、
[ModeSwitch > Modification Stroke Trimming]
に移動します。
ここでは、既に抽出した領域から不必要な部分を取り除く作業(トリミング)が可能です。
今回は先に抽出した領域から地面の領域を取り除きます。
この作業は時間も手間もかかる作業です作業です。
予め輝度値の低い素材(「激落ちくん」など)を地面として用いると、CTで撮影した際に地面がうつらなくなるため好ましいです。
ストロークトリミング
[ModeSwitch > Modification Stroke Trimming]を選択後、編集したい領域を選択します。
先ほど分割したregionが選択されていることを確認して、[OK]を押します。
※backGrndは選択できません。
ストロークトリミング(続)
トリミングを行っていきます。
Shitボタンを押しながら、
トリミングを行いたい部分を左クリックでドラッグして選択します。
トリミング(続)
このように選択した部分だけトリミングされます。
※ドラッグで選択している部分をキャンセルしたい場合は、右クリック。
※Zキーを押すとやり直す(Undoする)ことができますが、一回しか戻ることができません。
トリミング(続)
このように地面を完全に除去することができたら、
[Finish Editing]を押して、トリミングの完了です。
トリミング(続)
[Finish Editing]を押すと、トリミングで除去した領域が[2:region]として分割されていることがわかります。
[Mask IDs]ダイアログで[2:region]を選択し、[Delete]ボタンを押せば削除できます。
[Marge To]ボタンを押し、統合させたい領域を選択すれば、2つの領域を統合させることも可能です。
RoiPaintの操作 - 穴埋め(試行中)
昆虫などの中に空洞のある物体は、空洞をそのままにすると、その後のデータの扱いがしづらくなります。
(3Dプリンタでの出力が困難になるなど)
RoiPaintの穴埋め機能を使い、メッシュファイルに変換する前に穴埋めを行いましょう。
メニューバーから、
[ModeSwitch > Visualization Mask]
を選択します。
右側の[Mask IDs]ダイアログ の [Morpho operation]で、
選択した領域の穴埋め作業を行います。
穴埋め
XY, YZ, ZX平面を表示させて、断面図を確認しながら作業を行っていきます。
先ほど領域分割をしてトリミングを行ったregionを選択してから行いましょう。
[transparency](不透明度)を下げると、選択領域の不透明度が下がり断面が見えるので、作業が行いやすいです。
穴埋め(続)
[Morpho operation]の
1. [dilate]ボタンを押して領域を1画素分を太らせる
2. [fill hole]ボタンを押して外とつながっていない中空領域を埋める
3. [erode]ボタンを押して全体を痩せさせる(厚みを元に戻す)
この手順を踏み、小さな穴を埋めていきます。
場合に応じて、[dilate][erode]ボタンを複数回押しましょう。
※dilate -> erodeの処理は、closingと呼ばれ、小さな中空領域が自動的に埋まる効果があります。
穴埋め(続)
このように、中空領域が埋まれば完成です。
RoiPaintの操作 - メッシュデータに変換
[Mask IDs]ダイアログ上でメッシュとして書き出したい領域を選択し、
[export]欄の各拡張子のボタンを押し、名前をつけて保存してエクスポートが完了です。