3次元二値画像解析

このチュートリアルでは3次元の画像解析を行ないます。基本的な考え方は2Dの二値画像解析と同じなので、まずそちらのチュートリアルを終わらせてからこちらにトライしてください。

ここでは50x50x50のサイズの画像を解析します。3次元画像の表現方法は色々ありますが、ここでは各層ごとの断面画像を用います。 つまり50x50の画像を50個用意します。 data/ ディレクトリにファイルが置かれています。ファイル名は断面の順に付けておきます。

入力データの可視化

解析する前にまずこの画像を3次元で可視化してみましょう。ここでは paraview というソフトウェアを使います。 paraview は VTK フォーマットの入力を受け付けるため、画像をこのフォーマットに変換します。

次のコマンドでparaviewを起動します。

最初は何も表示されないと思います。まずは左側ペインにある「Apply」というボタンを押してください。 すると赤青二色で塗られたキューブが表示されると思います。これは画像データが0(青)と255(赤)の二値画像であることから このように表示されます。まずはこれを回転させたり拡大縮小させたりして操作に慣れてください。

ただ、このままだと内部の様子が見れません。そこで paraview の フィルタという機能を使って 255 の値の部分だけを表示しましょう。 メニューの Filters > Common > Threshold というのを選んでください。すると左側のペイン「Pipeline browser」の所の bin3d.vtk の下に Threshold1 というのが表示されます。 この Threshold1 をクリックしてその後その下側の「Properties」ペインの中にある「Minimum」というスクロールバーの値を 大きくします。適当に128くらいにしておけばOKです(すると128より大きい所だけ切り取られるため)。その後 Apply ボタンを押すと 今いじった部分が反映されます。これで中身が見えるはずです。

ここで「Minimum」を0、「Maximum」を128などとしてApplyをすると、反転した領域が表示されます。paraviewは後でも使うので ちょっと慣れておいてください。

試し終わったら paraview を閉じてください。

パーシステント図の計算

パーシステント図を計算します。homcloud.pict.binarize_nd を用います。オプションの意味は基本的に2Dの場合と同じですが、 復習も兼ねて以下に説明します。

1次のパーシステント図を調べていきましょう。

(-4, 4) の所に2つbirth-death pairがあるようです。これを確認しましょう

逆解析

この2つのペアがどのような穴を表現しているのか見てみましょう。そのために、このdeathの場所を可視化します。

1次の場合、deathの場所が穴(3次元上の通路状の形)の場所になるのでそれを調べます。以下のコマンドで paraview で読みこめる VTKファイルを生成します。

オプションの意味などは以下の通りです。

これを paraview で可視化します。以下のような手順です。

  1. paraview を起動する (次のセルを実行) (ただし、MacOSの場合は代わりにopen /Applications/Paraview-5.6.0.appなどとして実行できます。)
  2. 入力データを読みこみ表示します。以下の手順です。

    • メニューの File > Open... で 最初のほうで作った bin3d.vtk を読み込み
    • 左下ペイン「Properties」の Apply ボタンを押す
    • メニューの Filters > Common > Threshold を選択
    • 左下ペイン「Properties」の「Minimum」を128くらいに変更
    • 左下ペイン「Properties」の Apply ボタンを押す
  3. death_pos.vtk を読み込んで表示

    • メニューの File > Open... で 最初のほうで作った death_pos.vtk を読み込み
    • 左下ペイン「Properties」の Apply ボタンを押す

すると元データと death の場所が表示されます。death の場所は青いボックスで表示されるので データを回転させたりして探してください。 見つからないときは左上ペインの「Threshold1」の隣にある目玉ボタンを押すと元データを 表示っしたり消したりできるのでそれも使ってみてください。 見つかったならば、確かにそれが通路状の構造の所に death のピクセルがある、ということがわかると思います。

他にも気になる birth-death pair があれば同様に可視化してみましょう。

以上でこのチュートリアルは終わりです。