[scikit-image] 45. グレースケール画像の白い部分、黒い部分をそれぞれ分離(skimage.morphology reconstruction)

python

はじめに

scikit-imageライブラリには、画像処理のための様々な機能が用意されています。本記事では、skimage.morphologyモジュールのreconstruction関数を使用して、グレースケール画像から白い部分と黒い部分を効果的に分離する方法について解説します。この手法は、画像内の特定の明るさや暗さを持つ領域を抽出したい場合に非常に有効です。

コード

解説

モジュールのインポート

画像データの読み込み

Epithelantha属の月世界の種子を使用します。これは袋に入っており、rgb2gray関数を用いてグレースケール画像に変換します。

穴埋め

モルフォロジー再構成を使用して、画像中の穴(孤立した暗い点=種)を埋めます。

seedは、エッジが元画像と同じで、エッジ以外はimage.max≒1(白)の画像となります。maskには元の画像と同じものを使用します。

reconstruction(seed, mask, method=’erosion’)を実行すると、seedによって種の黒い部分が膨張(白い部分が収縮)します。マスクを元画像に設定することでerosionの挙動を制御しています。

元画像からerosion処理後の画像を引くことで、黒い領域を分離できます。

ピーク検出

erosionの場合とは異なり、seedはエッジ以外がimage.min≒0(黒)の画像となります。

reconstruction(seed, mask, method=’dilation’)を実行すると、seedによって白い部分が収縮(黒い部分が膨張)し、黒い部分だけが残ります。元画像からdilation処理後の画像を引くことで、白い領域を分離できます。

画像の表示

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

本記事では、scikit-imageライブラリのmorphology.reconstruction関数を用いて、グレースケール画像から白い部分と黒い部分を分離する方法を紹介しました。この手法により、画像内の明るい領域と暗い領域を個別に抽出し、それぞれを独立して処理することが可能になります。画像解析や特徴抽出において、このような分離処理は非常に重要な前処理として活用できるでしょう。

参考

Filling holes and finding peaks — skimage 0.25.2 documentation

コメント

  1. Shogo より:

    0は光のない状態(黒)、1は光が最大限出ている状態(白)かと思われます。。
    文章中で逆に使われていた気がしたので、もう一度確認してみてください。