ガウス混合分布と曲率等高線を用いたセグメンテーション

MikuHatsune2016-11-05

読んだ。
Accurate Automatic Detection of Densely Distributed Cell Nuclei in 3D Space.
PLoS Comput Biol. 2016 Jun 6;12(6):e1004970.
プレスリリース
 
線虫の細胞の3D(4Dもいけるけど)画像のなかで、細胞がくっついているように見えるのもがうまくセグメンテーションされる、というもの。
細胞は蛍光で識別されており、細胞中心ほど濃く画像として認識される。複数の細胞が密集している場合に、光度の分布を考えて、その等高線の曲率をとると、細胞のくっついている領域がくびれとしてとれる。既存の方法よりかなり精度がいいようである。
線虫は発生における細胞の個数が決まっており、すべての細胞が追跡できれば捗る。
 
著者らはmatlab とImageJ を組み合わせて、アルゴリズムによるセグメンテーション後、GUI で好きにいじれるパッケージというか実装を公開しているのでこれをやったらクッソ落とし穴にハマったのでメモ。
というか、これで再現できるのかあやしい
 
環境はubuntu 14.04 LTS
Intel C++ compiler
Intel Parallel Studio XE が必要。ubuntu 14.04 には2013 が必要なので、うっかり2017とかDL してしまうとOS 要件で16.04 しか満たしてないけど? って怒られる。
これがないと icc ができない。
 
Fiji
Fiji (Nat Methods. 2012 Jun 28;9(7):676-82.) はImageJ の生物学的イメージング研究用にカスタマイズされたプラグインみたいなものである。これを取ってくる。

Download Fiji (Life-Line version, 2013 July 15) for appropriate operating system from web
(http://imagej.net/Fiji/Downloads) and decompress it.
Add (FIJI_INSTALL_DIR)/scripts to the matlab search path.
Copy lib/MorphoLibJ-1.0.7.jar and lib/roiedit3d_subclass/roiedit3d_subclass.jar to
(FIJI_INSTALL_DIR)/plugins.
MorphoLibJ is also available from github (https://github.com/ijpb/MorphoLibJ/releases).

とあるが、これはあとでmatlab でコマンドを打てばどうにかなる。
ここで、後にpeak_detection12 を実行するときにMarkerControlledWatershedTransform3D がないと怒られるのだが、これはFiji からプラグインを拡張しなければならず、こちらを参考にして

The Marker-controlled Watershed plugin is part of the MorphoLibJ library. To install it, you just need to add the IJPB-plugins update site:

1) Select Help ▶ Update... from the Fiji menu to start the updater.

2) Click on Manage update sites. This brings up a dialog where you can activate additional update sites.

3) Activate the IJPB-plugins update site and close the dialog. Now you should see an additional jar file for download.

4) Click Apply changes and restart Fiji.

You should now find the plugin under the sub-menu Plugins ▶ MorphoLibJ ▶ Segmentation.

Note: Marker-controlled Watershed is only one of the plugins included in the MorphoLibJ suite. By following these installation steps, you will be installing as well the rest of plugins in the suite.

とする。
また、lib/roiedit3d_subclass/roiedit3d_subclass.jar のなかにはMyTableModel がはいっているので、これをjavaaddpath する必要がある。
 
matlab のインストール
この実装にはmatlab がないとどうしようもない。matlab は有料だが30日間なら無料トライアルができる。
MathMorks から大学アカウントとかいれてダウンロードするが、すべてをインストールするとこれだけで10GB とか消費するので、必要な

Image Processing Toolbox, Statistics and Machine Learning Toolbox, and Optimization Toolbox

で4GB くらい容量がいる。
今回はR2016b をインストールしたので、.matlab/R2016a とか変なものがあれば削除して、.matlab/R2016b/ を作る。
 
elipsoid_em_12.mexa64 の作成
minmaxfit はいいが、elipsoid のほうは単純にicc すればいいかというとそうでもなかった。
まず、パスが通っていなければ$MATLAB_ROOT を定義しておく。今回の私の環境では以下である。

MATLAB_ROOT="/usr/local/MATLAB/R2016b/"

次に、icc かなにかのコンパイルでヘッダーinclude が足りないと言われるので、c++/4.8 を入れる。

icc -c elipsoid_em_12.cpp -DMKL_ILP64 -fPIC -debug expr-source-pos -ftz -xHost -I$MATLAB_ROOT/extern/include -I$MKLROOT/include /usr/include/x86_64-linux-gnu/c++/4.8/ -O3 -fp-model fast=2 -DNDEBUG -opt-matmul -axAVX -static -openmp-stubs

その後、リンクコマンドというものをやるが、これをただやるだけだとリンクされないようなので、libirng.so がどうたらこうたら言われる。そこで、intel compiler ライブラリ周りでのエラーを参考に、管理者権限(sudo)で

cd /etc/ld.so.conf.d
vim intel_compiler.conf

vim で下記ファイルを作成して

/opt/intel/composer_xe_2013/lib/intel64/

読み込む。

ldconfig

とすると、リンクができているようである。これを言っている通り、mexa64 ファイルをsrc ディレクトリに移動させる。
 
やっていると、ImageJ で大きいデータを読み込むときに、よく java heap error みたいなことを言われる。これはmatlabGUI からヒープ時の対応を参考に、適当に大きい値をいれる。
 
matlab とImageJ とjavaclasspath の恒久的な設定がアレなので、matlab 上で一時的に追加するならばこんな感じでmat.m ファイルを作っておいて、起動する度に読み込め(実行すれ)ばよい。
というのも、matlab GUI からこの解析を実行すると死ぬほど止まったり挙動がおかしくなったりするので、強制終了をなんかいもせざるを得ない。
また、MyFileInfoVirtualStack というものをここから入手して作成しないといけないのだが、まず、MyFileInfoVirtualStack.java を実行するときにij.jar の類がないと怒られるので、ImageJ のソースを落としてきて、ij.jar があるディレクトリを classpath オプションで追加する。

cd ~/Desktop/software/software/src/
addpath('~/Fiji.app/scripts/')
javaaddpath('/home/username/Desktop/getSubImage-master/')
javaaddpath('/home/username/Desktop/software/software/lib/roiedit3d_subclass/')

 
解析したいTIF ファイルはSSBD もしくはfigshare にデータが投稿されているから、peak_detection_12_param.txt と同ディレクトリにいれてmatlab からpeak_detection_12 と roiedit3d を実行する。
 
Reproducible research とはいったい()