[scikit-image] 15. active_contourを用いた画像エッジ検出と輪郭抽出

python

はじめに

scikit-imageライブラリのsegmentation.active_contour機能を利用すると、画像内のオブジェクトの輪郭を自動的に検出し描画することができます。この手法はスネークアルゴリズム(active contour model)と呼ばれ、エネルギー最小化の原理に基づいています。

active contourの基本原理

active contour(スネーク)は、初期輪郭から始まり、内部エネルギーと外部エネルギーのバランスを取りながら、画像の特徴(主にエッジ)に沿って変形していく曲線です。この手法は以下の特徴があります:

  • ノイズに比較的強く、連続的な輪郭を生成できる
  • 初期輪郭を設定し、それが徐々に目標のオブジェクト境界に収束する
  • 輪郭の滑らかさと画像の特徴(勾配など)のバランスを考慮する

コード

解説

モジュールのインポート

画像の読み込み

active_contourの初期設定

線をひきたい大体の位置が入るように、初期設定の円を作成します。

エッジに該当する部分に描く線の生成

active_contour()関数を使用してエッジ上に輪郭線を生成します。画像にgaussian(img, 3)でガウシアンフィルタを適用すると、処理の成功率が向上します。initパラメータはエッジの初期輪郭を設定し、alphaは輪郭の弾性(長さ)を制御し、betaは輪郭の滑らかさを調整します。gammaは時間ステップのパラメータで、小さい値ほど良好な結果が得られます。

図の表示

初期輪郭を赤い点線で、検出されたエッジに沿った輪郭線を青い実線で表示します。

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

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

まとめ

scikit-imageのactive_contour関数は、画像内のオブジェクト輪郭を自動的に検出・描画するための強力なツールです。適切なパラメータ設定と初期輪郭の選択により、多くの画像処理タスクで効果的に活用できます。特に、ノイズに強く連続的な輪郭を求める場合に適しています。

参考

Active Contour Model — skimage 0.25.2 documentation

コメント