最も基本的な形態学的演算には、腐食、拡張、オープン計算、クローズド計算という 4 つの演算があります。`scipy.ndimage は、バイナリ配列とグレースケール配列に対してこれら 4 つの演算をそれぞれ実装します
バイナリ | グレースケール | |
---|---|---|
#grey_erosion | 腐食 | |
grey_dilation | インフレ | |
grey_closed | Close (最初に展開してから腐食します) | |
grey_opening | 開く (最初に腐食してから展開します) |
ここで、B
ijは集合を表します。 B BB の原点が (i, j) にある場合に、B の 1 であるすべての値の合計。 この式は、構造 B が A を腐食するために使用されるとき、B の原点が画像 A のピクセル (i,j) に変換されるとき、B が重なり合う領域で完全に囲まれている場合を意味します。 2 つの場合は 1 の値が割り当てられ、それ以外の場合は 0 の値が割り当てられます。 B のある要素が 1 のとき、A の対応する位置も 1 であれば、(i, j) の値は 1 になります。これはより直感的な例です。
拡張はその逆で、
# と表現できます。つまり、B と A の重なり合う領域が重ならない限り、空集合の場合、(i, j) 点を 1 に設定するだけです。
例は次のとおりです
import numpy as np import matplotlib.pyplot as plt import scipy.ndimage as sn x = np.zeros([20,20]) x[5:15, 5:15] = 1 x_ero = sn.binary_erosion(x) x_dil = sn.binary_dilation(x) fig = plt.figure() ax = fig.add_subplot(1,3,1) ax.imshow(x) plt.title("original") ax = fig.add_subplot(1,3,2) ax.imshow(x_ero) plt.title("erosion") ax = fig.add_subplot(1,3,3) ax.imshow(x_dil) plt.title("dilation") plt.show()
効果は次のとおりです
開口操作では、最初に腐食し、次に拡張します。閉じる操作では、最初に拡張してから腐食します。例は次のとおりです。
x = np.zeros([20,20]) x[5:15, 5:15] = 1 x[10:12,10:12] = 0 x[2:4, 2:4] = 1 x_open = sn.binary_opening(x) x_close = sn.binary_closing(x) fig = plt.figure() ax = fig.add_subplot(1,3,1) ax.imshow(x) plt.title("original") ax = fig.add_subplot(1,3,2) ax.imshow(x_open) plt.title("opening") ax = fig.add_subplot(1,3,3) ax.imshow(x_close) plt.title("closing") plt.show()
結果は次のとおりです。開く操作では孤立した 1 が削除され、閉じる操作では孤立した 1 が削除されることがわかります。 0.
グレースケール形態学
から直接取得され、侵食、拡張、開閉の操作が順番に実行されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">from scipy.misc import ascent
img = ascent()
funcs = {
"original": lambda x, tmp:x,
"erosion" : sn.grey_erosion,
"dilation" : sn.grey_dilation,
"opening" : sn.grey_opening,
"closing" : sn.grey_closing
}
fig = plt.figure()
for i, key in enumerate(funcs):
ax = fig.add_subplot(2,3,i+1)
plt.imshow(funcs[key](img, (10,10)), cmap=plt.cm.gray)
plt.title(key)
plt.show()</pre><div class="contentsignin">ログイン後にコピー</div></div>
バイナリ関数とグレースケール関数のパラメータは同じではありません。以下ではクローズ操作を例にしています。バイナリ関数とグレースケール関数、入力に加えて、両方で共有されるパラメータは次のとおりです。
#構造体は配列型であり、コンボリューション テンプレートとして理解できる構成要素を示します出力は入力と同じ次元の配列であり、結果を保存できます
#組織フィルタ設定。デフォルトは 0
バイナリ形式フィルタリングを学習するためのその他のパラメータは次のとおりです
binary_closing(input, iterations=1, mask=None, border_value=0, brute_force=False)
grey_closing(input, size=None, footprint=None, mode='reflect', cval=0.0)
# #
以上がPython で基本的な形態学的フィルタリングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。