CTスキャンからの自然物処理

Created Date: 2016-08-04/ updated date: 2018-03-13
    Owner & Collaborators
    License
    Summary
    CTスキャンから得たCTデータを、SimpleDcmViewerとRoiPaintを用いて処理する方法です。
    いずれのソフトウェアもWindows対応です。(試行中)

    Materials

      Tools

        Blueprints

          Making

          • SimpleDcmViewerは、
            ・DCMスライス画像を読み込み
            ・xyz方向でのデータのトリミング
            ・データサイズの変更
            ・データ形式を変換して保存(出力はtraw_ssに対応)
            を主に行うソフトです。

            ※ traw3D_ssは次のSimple Volume Rendererで用いる形式
            ※ githubリポジトリ : https://github.com/TakashiIjiri/SimpleDcmViewer
            • DCMデータとは、X線CTやMRIによって撮影された多数の「断面画像」のこと。

              画像を読み込むにはDCMデータが入ったフォルダを、画面中央のスペースにドラッグ&ドロップします。

              ※データ量にもよりますが、読み込みには時間がかかります。
            • CTデータが読み込まれると中央に表示されます。

              データが見えにくい場合は、画面上部のウインドウレベル [Win. Lv.] の最大・最小の値を適当に変えると、白黒がはっきりして見やすくなります。
              特に見えにくいわけでなければ、変更する必要はありません。

              ※通常CT画像は、一つの画素が12bitや16bitの色深度をもち、これを表示するため8bit(0~255)にマッピングする必要があります。[Win. Lv.] はこのマッピングに必要な最大・最小値を与えています。
            • 次に、対象物以外の余白をトリミングしデータ量を軽くします。

              中央左のバーを動かすことで、異なるz軸位置の画像を表示できます。

              バーを動かしてデータの全体像を把握しながら、画面上部の[clipping]のxyzそれぞれの値を変更し、データをトリミングします。トリミングされた部分は青く表示されます。

              ※参考に右の画像では、y軸の値を減少させて、対象物である昆虫の胴体ぎりぎりまでデータをトリミングしています。



            • z軸方向のトリミングは、少し分かりにくいです。

              例えば、0~100の値までz軸をトリミングすると、
              左のバーで0~100を移動している間は全体が青く表示されます。
              左のバーをうまく使い確認しながら、トリミングを行います。
            • 右上部の[Export traw3d signed short]をクリックし、
              traw3d_ssで保存します。

              [Export Data Size]というウィンドウは表示されるので、
              バーをスライドさせてデータサイズを300Mbyte程度まで落とします。

              [OK]を押して保存完了です。



          • RoiPaintは、
            ・ 3次元画像の可視化
            ・ 3次元画像の領域分割
            ・ 抽出した領域のメッシュデータ(OBJ, STL)への変換
            を主に行うソフトです。

            ※ ソフトウエアのgithubリポジトリは現在公開準備中です.
            • RoiPaintを起動したら、
              メニューバーから[File >Open Traw3d_ss]を選択し、先程保存したtraw3d_ssのデータを開きます。



            • 画像読み込み直後、対象物(昆虫)の周りにある空間も不透明で表示されています。

              対象物を可視化するためには、対象物のみを不透明にする必要があります。
              このため、[Volume Information]というダイアログにある[transFunc1, transFunc2]のグラフを変更します。

              ※ダイアログ上部のチェックボックスから背景色やxyz平面の表示非表示などの変更ができます。
              ※伝達関数(transfer function)とは、画素値から透明度や画素値から擬似色へ変換する関数の総称です。
            • transfunc1は、横軸が輝度値、縦軸が不透明度を表します。
              transfunc2は、横軸が画像勾配、縦軸が不透明度を表します。

              グラフをマウスでなぞるようにすると、グラフの形を変更できます。

              対象物の周りの空間は輝度値が低く、対象物自体は輝度値が高いため、参考画像のグラフのように輝度値が低い部分の不透明度を0にすることで、周りの空間が表示されなくなり対象物が浮かび上がります。

              ただし、右図の場合、対象物の乗っている地面も輝度値が高く、厳密には対象物「だけ」を浮かび上がらせることはできません。
          • ここでは、Region Growing法を用いて連続する領域を抽出する作業を行います。

            メニューバーから、
            [ Mode >Segmentation Region Growing ]
            を選択します

            • [Volume Information]ウィンドウ上部の、[XY][YZ][ZX]のチェックマークを入れると、それぞれの平面が表示され、断面図を見ることができます。

              断面図上のなるべく明るいところを、ダブルクリックし赤い点を付けます。



            • [Dialog]ウィンドウの[Thresholding]の最小値・最大値を変更します。
              この値に関しては、様々な値を試して見る他ありません。

              ※目安(撮影するCT装置にも依存)
              昆虫 : 最小値3000~9000、最大値そのまま
              貝/種子: 最小値15000~20000、最大値そのまま

              値を指定し[Region Growing 6]ボタンを押しすと対象物が選択されます。
              最後に[Endo & Store Region]を押します。

              ※Region growing法は、シード(赤点)から始め、閾値を満足する画素を追加する要用で領域を拡張していく手法です。

            • [Endo & Store Region] を押すと、右図の通り、[1:region]として先ほど分割した領域が表示されます。
          • メニューバーから、
            [Mode  > Modification Stroke Trimming]
             に移動します。

            ここでは、既に抽出した領域から不必要な部分を取り除く作業を行います。

            今回は先に抽出した領域から地面の領域を取り除きます。
            この作業は全行程の中で最も時間のかかる作業です。
            予め輝度値の低い素材(「激落ちくん」など)を地面として用いると良いでしょう。

            • [Mode  > Modification Stroke Trimming]を選択後、編集したい領域を選択します。
              先ほど分割したregionが選択されていることを確認して、[OK]を押します。

              ※backGrndは選択できません。
            • トリミングを行っていきます。

              Shitボタンを押しながら、
              トリミングを行いたい部分を左クリックでドラッグして選択します。



            • このように選択した部分だけトリミングされます。

              ※ドラッグで選択している部分をキャンセルしたい場合は、右クリック。
              ※Zキーを押すとやり直すことができますが、一回しか戻ることができません。



            • このように地面を完全に除去することができたら、
              [Finish Editing]を押して、トリミングの完了です。
          • メニューバーから、
            [Mode > Visualization Mask]
            を選択します。

            右側の[Mask IDs]ダイアログ の [Morpho operation]で、
            選択した領域の穴埋め作業を行います。
            • XY, YZ, ZX平面を表示させて、断面図を確認しながら作業を行っていきます。

              先ほど領域分割をしてトリミングを行ったregionを選択してから行いましょう。




            • [Morpho operation]の
              1. [dilate]ボタンを押して領域を1画素分を太らせる
              2. [fill hole]ボタンを押して外とつながっていない中空領域を埋める
              3. [erode]ボタンを押して全体を痩せさせる(厚みを元に戻す)

              この手順を踏み、小さな穴を埋めていきます。
              場合に応じて、[dilate][erode]ボタンを複数回押しましょう。
              ※dilate -> erodeの処理は、closingと呼ばれ、小さな中空領域が自動的に埋まる効果があります。


          • [Mask IDs]ダイアログ上でメッシュとして書き出したい領域を選択し、
            [export obj]ボタンを押し、名前をつけてobjで保存して完成です。

            ※[Mask IDs]ダイアログ上で、複数のregionが存在する場合、[Marge To]ボタンを押して、一つのregionにまとめます。

            ※bckGrndには[Marge To]しないこと
            Add Card Order

            References

              Usages

                Project comments