[scikit-image] 13. filters.meijeringなどを用いたリッジ検出

python

はじめに

リッジ検出とは、画像内の線状構造や細長い特徴を検出するための技術です。医療画像における血管の検出や、衛星画像の道路抽出など、様々な分野で活用されています。

2. scikit-imageにおけるリッジ検出フィルタ

scikit-imageのfeatureモジュールには、リッジ検出に特化した複数のフィルタが実装されています:

  • feature.meijering: Meijeringフィルタは、ヘッセ行列の固有値解析に基づき、特に細い線状構造の検出に優れています。
  • feature.sato: Satoフィルタは、様々な太さの線状構造に対応できる汎用性の高いフィルタです。
  • feature.frangi: Frangiフィルタは、血管構造の検出に特に効果的で、ノイズに対する耐性も備えています。
  • feature.hessian: ヘッセ行列の固有値を直接利用するフィルタで、多方向の線状構造を検出できます。

コード

解説

この例では、リッジ検出を検討する。リッジとは線状の構造を持つもので、神経突起、チューブ[、血管 、しわなどが該当する。

Ridge detection - Wikipedia

モジュールのインポート

バージョン

データの読み込み

画像を imread() 関数で読み込んだところ、RGBA形式だったので rgba2rgb 関数でRGB形式に変換した後、rgb2gray 関数でグレースケール化します。

各種リッジフィルタの適用

  • 4種類のリッジフィルタの適用: Meijering、Sato、Frangi、Hessianの各フィルタを適用しています。各フィルタにはsigmas=range(1, 10)というパラメータが設定されており、これは検出するリッジの太さの範囲を指定しています。
    • sigmas: 検出対象のリッジの太さに応じて調整します。細い構造は小さい値、太い構造は大きい値が適しています。

結果の表示

2×3のサブプロットを作成し、元の画像と4つのフィルタ結果を並べて表示しています。各画像には適切なタイトルが付けられ、フィルタ結果はグレースケールで表示されます。

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

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

応用例

リッジ検出は以下のような分野で活用されています:

  • 医療画像: 血管ネットワークの可視化、神経線維の追跡
  • リモートセンシング: 道路や河川の検出
  • 指紋認識: 指紋の隆線パターンの抽出
  • 材料科学: 微細構造の分析

ただし、ノイズの多い画像や複雑な背景を持つ画像では、前処理や後処理を組み合わせることが効果的です。

参考

Ridge operators — skimage 0.25.2 documentation
日本地図のイラスト(都道府県ごとに区切り)
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

コメント