おかざきPの記録

Mac, QNAPの設定やプロデューサー業の記録

ImageJ fijiのTrainable Weka Segmentationを使ってSEM画像から粒子を抽出する

目的

 粒子のSEM像から粒度分布を取得したい.そのためにまず画像から粒子を抽出する.

必要なもの

  1. 粒度分布を知りたい粒子の(SEM)画像
  2. ImageJ fiji

手順

 以前に粒子画像を自動で分析する方法を投稿したが,今回の画像は粒子抽出の難易度が高すぎたためGUIでポチポチ頑張る.知っていれば難しくない.

画像取得時の注意点

 粒子はなるべく重なっていない方がいい.明るさやコントラスト,ピンボケ,ノイズはまだ後からどうとでもなる.また画像の形式はtiffやpngなどの非圧縮を強く推奨tiffであれば長さの情報も埋め込めるため便利.圧縮形式のjpgなどは間違っても使わないこと.
 手持ちに使える画像がないため,今回はインターネット上のカタログをスクショして借用する.

重なっていない画像の例

昭和電工製CB-P40
昭和電工製CB-A20S
 いい感じにバラけている粒子の画像が掲載されていた.コールターカウンター法で測定されたこれらの粒度分布は次の通り.こんな感じのデータが画像からも得られることを期待する.
昭和電工製アルミナの粒度分布のカタログ値

重なりすぎてどうにもならない画像の例

住友化学製AA-04
  画像分析が難しいというだけで,SEM像そのものは非常に綺麗で見やすい.様子は伝わるけど私みたいなのに分析されてしまわない分,カタログ用の写真としては昭和電工より正しいのだろう.

下準備

画像中の長さの設定

 直線ツールでスケールバーに合わせた線を引いた状態でmenu bar > Analyze > Set Scaleから設定する.

画像中の長さの設定
長さの設定ダイアログ
 直線を引いた状態だとその長さが入力されている.スケールバーの長さと単位を入力してOKを押せばいい.スケールバーが写っていると分析の邪魔になるため切り取ること.

グレースケールに変換

 諸々の処理はカラー画像では実行できないためグレースケールに変換する.

グレースケールに変換

背景の明るさの調整

 今回は不要そうだが念の為.光学画像で光源方向が明るい場合は分析に支障が出る可能性がある.それに対処する.

背景の明るさの傾きを除去
ボールサイズは粒子より十分大きくすること

画像分析

領域分割(Trainable Weka Segmentation)

 実は当初はopencvで粒子の抽出を試みたのだが,今回のように境界(表面)が反射して白く光っている画像は扱いが難しくて挫折した.画像分析の自動化や分析結果の取り扱いまで考えるとJythonでなくCythonにしたかったが仕方がない.menu bar > Plugins > Segmentation > Trainable Weka Segmentationから起動する.

Trainable Weka Segmentationの起動
 起動したら粒子と背景をマウスでなぞってラベル付けする.画像の通り塗り潰す必要はない.
領域をラベリングする様子
 気が済むまでなぞったら左にあるTrain classifierを押すと画像全体が色分けされる.元の画像が見たい場合はToggle overlayを押せばいい.
Train classifierの実行後
mac mini(M1)での実行速度
 色分け結果が気に入らなければ追加でラベル付けして再びTrain classifierを押せば更新される.多少穴が空いたくらいなら,手作業にはなるがこの後の工程で修正できるため程々に.納得できる画像が得られたCreate resultで保存する.
 同様の画像を全く同じ条件で色分けするために,今回の分類器(classifier)をSave classifierで保存しておく.こうすると次回からはLoad classifierで分類器を読み込んで使い回せる.いつ誰がやっても同じ結果が得られる.なおどこをなぞったかを保存する術はないため,必要であればスクリーンショットを撮っておくこと.

二値化(threshold)

 分類器の出力はカラーになっているため白黒に変換する.まずはグレースケールに変換する.

グレースケールへの変換
 続いて閾値を設定して粒子を白,背景を黒にする.
閾値の設定
閾値の選択

粒子の穴を塞ぐ(close)

 領域分割時に諦めた穴に対処する.まず小さな穴は簡単に埋められる.

穴のclose
 残った穴は手動で塗り潰す.カラーピッカーツールで白を取得してバケツツールで穴を埋める.
カラーピッカー
バケツツール

繋がっている粒子を分割する(watershed)

 粒子どうしが繋がったままだと正常に分析できないため分割する.先の住友化学の例レベルだとどうにもならない.また粒子に穴が空いたままでもうまくいかない.

watershed

粒子の分析

 まず分析項目を選択する.まあ全部選んでおいて後で必要なものを考えれば良いでしょう.

分析項目の選択
選択した項目
 分析項目を設定したら分析を実行する.ノイズを拾われても困るため,分析対象とする粒子のサイズや円形度に制限をかける.円形度1はたいていノイズ.
粒子の分析
粒子サイズの制限
 分析対象になった粒子と分析結果が出力される.表(Results)と粒子の形状を保存したら終わり.
分析結果
 分析結果はcsvで保存できるのでCythonでpandasを使って好き勝手に分析できる.粒度分布が欲しいのであればヒストグラムを表示すれば良いが,個数基準か面積基準かは気を付けること. またメーカーカタログはおそらく体積基準のため画像分析の結果とは一致しないはず.