LoginSignup
6
4

More than 5 years have passed since last update.

ImageJを用いた3次元画像における分水嶺法

Last updated at Posted at 2017-02-25

背景

近年では3次元画像の取得が容易になっている一方で、3次元画像に用いる画像処理ライブラリは充実していない。
今回は3次元画像に対して分水嶺 (Watershed) と呼ばれる領域分割手法を行いたかったため探したところ、画像処理ソフトウェアFiji (Fiji is just imageJ) のプラグインに3Dモルフォロジ演算を行う関数が実装されていたので試してみた。
以下からは、導入方法および関数の使い方についてまとめた。

環境

プラグイン導入

https://github.com/ijpb/MorphoLibJ/releases から、MorphoLibJ 1.3.1.jar をダウンロードする。
GUIで導入する場合は、Fijiを開いてダウンロードしたファイルをドラッグ&ドロップする。
ターミナルから導入する場合は、/Applications/Fiji.app/plugins/ の下に MorphoLibJ_-1.3.1.jar を置けばよい。
本プラグインのドキュメントは以下を参照。
http://imagej.net/MorphoLibJ#Watershed_segmentation

関数

まず関数の使用例として用いる、以下のような画像をpython上で作成した。

import numpy as np
import skimage.io as skimage
img = np.zeros((100, 100, 100))
for i in range(100):
    for j in range(100):
       for k in range(100):
          if (i - 40)**2 + (j - 40)**2 + (k - 40)**2 < 400:
             img[i][j][k] = 255
          if (i - 60)**2 + (j - 60)**2 + (k - 60)**2 < 900:
             img[i][j][k] = 255
skimage.imsave('example.tif', img.astype(uint8))

example.jpg

ここからは、この画像を用いた関数使用例についてまとめる。また、visualize は Plugin の 3D Viewer を使用している。

Distance Tranceform Watershed 3D

Plugin > MorphoLibJ > Binary Images > Distance Transform Watershed 3D

watershedGUI.jpg

  • Options
    • Distance : ユークリッド距離変換を計算する重みを指定する。出力結果の境界面などに影響するパラメータ。
    • Output Type : 距離計算を行う際に、16bit(short)か32bit(float)を使用するか決めるオプション。
    • Normalize weights : distance mapを正規化するかのflag。
    • Dynamic : 値を大きくするとより多くのオブジェクトがmergeされ、小さくするとより多くのオブジェクトに分割されるパラメータ。
    • Connecivity : 注目voxelにおける計算領域を6近傍にするか26近傍にするか決めるオプション。

今回は上図で示したオプション指定で実行した結果を以下に示す。

watershed.jpg

画像の値はオブジェクトごとにラベリングされている。しかし、この状態だとvisualizeしても差がわかりにくいため、次にカラーラベリングを行う関数について述べる。

Labels to RGB

Plugin > MorphoLibJ > Label images > Labels to RGB

labelingGUI,jpg.png

  • Options
    • Colormap ラベリングするカラーマップの選択。
    • background オブジェクト以外のカラー選択。
    • Shuffle カラーマップの色選択をランダムにするかのflag。

個人的にcolormapに黄金角が用意されているのがGood。
上図で示したオプション指定で実行した結果を以下に示す。

labeling.jpg

本来二つのオブジェクトがmergeしてしまった場合に、watershedによって領域分割が行われてることがわかる。

考察

以上で分割されたオブジェクトがどの程度妥当なのか定量的に検証してみた。

オブジェクト 体積 [voxel] 元の体積 [voxel] 割合 [%]
31922 33493 95.31
104973 113040 92.86

このとき元の体積とは、画像を作成した際に決めた半径から体積を計算した値を表している。
また、割合は$\frac{体積}{元の体積} \times 100$から求めた。

この結果から、どちらかのオブジェクトに大きく偏って分割されていないことがわかる。
Distance Transform Watershed 3D において Distance が最も分割精度に影響するパラメータであるが、このパラメータを最適化する際の指標のひとつとして、ここで求めた割合を用いると良いかもしれない。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4