LoginSignup
3
9

More than 5 years have passed since last update.

画像解析による突起伸長の定量(ImageJ)

Last updated at Posted at 2018-05-22

概要

突起を伸張させながら成長する培養細胞塊について、蛍光観察画像から成長の様子を定量的に解析するためのImageJマクロを作成した。

これは、観察したい塊の重心を基準にして、一番遠くまで伸びた突起の先端までの距離を測定するものである。

Overview

  1. 連続する画像群(タイムラプス撮影画像など)を画像stackとして取り込む
  2. 各画像ごとに、観察対象だけを抽出する(それ以外を削除する)
  3. 各画像ごとに、観察対象物の重心の座標を測定する
  4. 各画像ごとに、3で測定した重心から一番遠い点までの距離を測定する(ここをmacroで連続処理する)

手順

1. 画像の取り込み

1) 解析対象の画像群を1つのフォルダに格納する。
2) 画像のファイル名が時系列で昇順になるよう、適当なナンバリングをしておく。
3) 画像群をImageJ(/Fiji)で取り込む。
  File > Import > Image Sequence... → 該当フォルダ指定 → Open
  "Convert to 8-bit Grayscale", "Sort names numerically"にチェック☑︎ → OK
   image.png

これで、画像群が時系列順のstack画像として取り込まれる。

2. 解析対象の抽出

対象がうまく認識されるよう、画像(スライス)毎にThresholdを設定する。
この際、対象に触れていないゴミ等は無視して良い(あとで消去する)。

1) Image > Adjust > Threshold →(設定)→ Apply
 → "Only convert current image"にチェック☑︎ → OK
   image.png
      ⬇︎ image.png
   image.png

2) Wand (tracing) toolを使って解析対象をROIとして選択する。
   image.png

   image.png

3) 2)で選択した部分以外を消去する。
  Ctrl/command⌘ + X;選択部分の切り取り
  →Ctrl/⌘ + ABackSpace/delete;残っている部分の全消去
  →Ctrl/⌘ + V;解析対象の貼り付け
  ※元の位置に関わらず画像中央に貼り付けられるが、解析には影響しない。

4) 1)~3)の手順を、残りのスライスについて繰り返す。

3. 測定内容の設定と重心座標の計測

1) Analyze > Set Scale...Click to Remove Scale
  → "Unit of length"が"pixel"になったことを確認 → OK
   image.png

2) 測定項目の設定:
  Analyze > Set Measurements... → "Center of mass"にチェック☑︎ → OK
   image.png

3) 観察対象の重心座標を測定:
  Analyze > Analyze Particles... → "Display Results"にチェック☑︎ → OK
  → "Process all X(number of slices) images?" > Yes
  →測定終了後、結果がResultウィンドウで表示される。
  ※輪郭のnoiseが、独立した粒子群として認識されてしまう場合がある。
   これはAnalyze Particlesで"Size"の下限を引き上げると改善される。
   image.png

4. 突起先端-重心 間の最長距離計測

各画像ごとに3で測定した重心から一番遠い点までの距離を測定するという操作をmacroで連続処理する。
1) 以下のマクロを実行する。
  マクロウィンドウはPlugins > New > Macroなどから開ける。

SpheroidSize.ijm
macro "obtainSpheroidSize"
{
    getDimensions(width, height, channels, slices, frames);

    for(i=1;i<=slices;i++)
    {
        setSlice(i);
        farthestDistanceSquare=0;
        for(y=0;y<height;y++)
        {
            for(x=0;x<width;x++)
            {
                if(getPixel(x,y)>0)
                {DistanceSquare=(getResult("XM",i-1)-x)*(getResult("XM",i-1)-x)+(getResult("YM",i-1)-y)*(getResult("YM",i-1)-y);
                    if(DistanceSquare>farthestDistanceSquare)
                    {farthestDistanceSquare=DistanceSquare;
                    }
                }
            }
        }
        farthestDistance=sqrt(farthestDistanceSquare);
        print(farthestDistance);
    }
}

2) 結果がlogウィンドウに表示される。
  最上段から順に、スライス1枚目, 2枚目, …の結果である。
  image.png


3
9
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
3
9