[SciPy] 7. ndimage.morphology.distance_transform_edtによる背景からの距離計算

matplotlib 3D

はじめに

ndimage.morphologyのdistance_transform_edtにより、背景からのユークリッド距離を計算する。

コード

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

解説

モジュールのインポート

データの生成

np.indices((60, 60))、によりインデックスを要素として持つ配列を生成する。
mask_circle1 = (x – x1)**2 + (y – y1)**2 < r1**2 により座標(x1, y1)を中心とする半径r1の円の内部がTrue となるbool配列を得る。
np.logical_or(mask_circle1, mask_circle2)により配列を各要素ごとに論理演算する。これにより円が2つ合体した風になる。
同様にして、np.logical_or(image, mask_circle3)で3つの円を合体させる。画像としては以下のようになる。

ユークリッド距離の計算

ndi.distance_transform_edt(image)でimageの背景からの距離を計算する。つまり、各円の中心は黒い部分からの距離が大きいため、要素も大きくなる。

3Dグラフで可視化

distanceを負にすることで、下に凸となるようにした。

円錐

四角錐

参考

scipy.ndimage.morphology.distance_transform_edt — SciPy v0.14.0 Reference Guide
python の配列。要素をまとめて論理演算。not、and、or、xor | コード7区
python の配列を各要素ごとに論理演算する場合、numpy の logical_not、logical_and、logical_or、logical_xor が使えます。演算対象は通常の配列、numpyのndarray、pandasのSeries、DataFrame、スカラ

コメント