[SciPy] 12. ndimageモジュールを使った2値化画像の距離変換手法

matplotlib

はじめに

SciPyのndimageモジュールを使った2値化画像の距離変換について、マンハッタン距離、チェスボード距離、ユークリッド距離の3種類の距離変換手法を解説する記事です。

距離変換とは

距離変換(Distance Transform)とは、2値化画像において、各画素から最も近い非ゼロ画素(または背景画素)までの距離を計算する処理です。主に画像解析、パターン認識、コンピュータビジョンなどの分野で活用されています。

SciPyで利用可能な距離変換の種類

  • マンハッタン距離(L1ノルム):格子状に移動する際の距離。上下左右の移動のみを考慮。
  • チェスボード距離(L∞ノルム):チェスのキングの動きのように、斜め移動も1距離と数える。
  • ユークリッド距離(L2ノルム):一般的な直線距離。ピタゴラスの定理に基づく。

コード

解説

モジュールのインポート

バージョン

データの作成

skimageのdisk関数を使用して、平らな円盤状の構造要素を作成できます。その詳細な作成方法については下記の記事で解説しています。

[scikit-image] 75. ディスク状構造化要素の生成(skimage.morphology.disk)
scikit-imageライブラリのmorphology.disk関数を使用して円形構造化要素を生成する方法を解説。画像処理におけるモルフォロジー演算のためのディスク状マスクの作成と視覚化について詳しく説明します。

データの表示

imshowで値とともに表示すると下のようになります。

チェスボード距離変換

distance_transform_cdt(struc, metric=’chessboard’)を使用することで、チェスボード距離変換像を生成できます。その表示結果は以下のようになります。

マンハッタン距離変換

distance_transform_cdt(struc, metric=’taxicab’)を使用することで、マンハッタン距離変換像を生成できます。表示結果は以下のようになります。

ユークリッド距離変換

distance_transform_edt(struc)を使用することで、ユークリッド距離変換像を生成できます。表示結果は以下のようになります。

まとめの図

これまでに示した図を一括表示すると以下のようになります。

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

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

参考

distance_transform_cdt — SciPy v1.16.1 Manual
distance_transform_edt — SciPy v1.16.1 Manual
skimage.morphology — skimage 0.26.0rc0.dev0 documentation

コメント