画像処理技術 形態学的フィルタリングとエロージョン操作

1 はじめに

画像処理愛好家の皆さん、ようこそ!今日は、画像処理分野における形態素計算について詳しく見ていきましょう。これらの非線形画像処理技術を使用すると、画像内のオブジェクトの形状と構造を操作できます。このシリーズでは、侵食、拡張、オープニング操作、クロージング操作という 4 つの基本的な形態学的操作を順番に紹介します。

さっそく始めましょう!

2. 腐食作用の原理

エロージョンは、画像の境界からピクセルを削除することによって画像内のオブジェクトを細かく縮小する一般的な形態学的操作の 1 つです。具体的には、各ピクセルの近傍を考慮し、その値をその近傍内のすべてのピクセルの最小値に設定することによってこれを行います。バイナリ イメージでは、隣接するピクセルの値が 0 の場合、出力ピクセルも 0 に設定されます。

次に、具体的な例で説明していきますが、まず今日の画像をインポートします。

# Define the image
original_image = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 1, 1, 1, 0, 0],
                           [0, 0, 1, 1, 1, 1, 0, 0],
                           [0, 1, 1, 1, 1, 0, 0, 0],
                           [0, 1, 1, 1, 0, 0, 0, 0],
                           [0, 1, 1, 1, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0]])

plt.figure(figsize=(10,10))
plt.imshow(original_image, cmap='gray', extent=[0, 8, 0, 8])
plt.title('Original Image', fontsize=20);

結果は次のようになります。
ここに画像の説明を挿入します
次に、構造要素を定義します。この例では、選択として十字を使用します。

# Define the structuring element
selem_cross = np.array([[0,1,0],
                        [1,1,1],
                        [0,1,0]])
plt.figure(figsize=(9,9))
plt.imshow(selem_cross, cmap='gray')
plt.title('Structuring Element: Cross', fontsize=20);

構造化要素の視覚化効果は次のとおりです。
ここに画像の説明を挿入します

3. 腐食作用効果

上記の操作の後、元の画像と、操作する必要がある対応する構造化テンプレート要素を定義し、関数を使用してapply_erosion 上記の構造化テンプレート要素を対応する画像に適用します。コードは次のとおりです。

def apply_erosion(image, selem):
    # Perform erosion on the given image using the structuring element, selem
    eroded_image = erosion(image, selem)

    # Display the original and eroded images
    fig, axes = plt.subplots(1, 3, figsize=(15, 10))
    ax = axes.ravel()
    
    ax[0].imshow(selem, cmap='gray', 
                 extent=[0, selem.shape[1], 0, selem.shape[0]])
    ax[0].set_title('Structuring Element', fontsize=20)

    ax[1].imshow(image, cmap='gray', 
                 extent=[0, image.shape[1], 0, image.shape[0]])
    ax[1].set_title('Original Image', fontsize=20)

    ax[2].imshow(eroded_image, cmap='gray', 
                 extent=[0, image.shape[1], 0, image.shape[0]])
    ax[2].set_title('Eroded Image', fontsize=20)

    plt.tight_layout()
    plt.show()

# Apply erosion on the original image with cross structuring element
apply_erosion(original_image, selem_cross)

上記の出力を
ここに画像の説明を挿入します
観察すると、変換されたイメージが元のイメージの縮小バージョンに対応していることがわかります。これは腐食操作の効果です。サンプル画像は次のとおりです。

ここに画像の説明を挿入します

4. その他の効果

腐食操作で使用される近傍のサイズまたは構造要素の選択は、結果に異なる影響を与える可能性があることに注意することが重要です。四角形、ディスク、カスタム形状などのさまざまな構造要素を選択して、望ましい結果に基づいて特定の腐食効果を実現できます。

たとえば、構造要素として正方形を使用することを選択した場合、コードは次のようになります。

# Define the structuring element 
selem_square = np.array([[0,0,0,0],
                         [0,1,1,0],
                         [0,1,1,0],
                         [0,0,0,0]])

# Apply erosion on the original image with square structuring element
apply_erosion(original_image, selem_square)

結果の侵食された画像は次のようになります。ここに画像の説明を挿入します

5. まとめ

エッチングの主な目的は、浮遊スポットや細線を除去して、実質的なオブジェクトのみを残すことです。侵食操作を適用すると、残りの線が細くなり、画像内のオブジェクトの形状が小さく見えます。エロージョン エロージョンは通常、オブジェクトのセグメンテーションや境界抽出などのタスクで必要な基本操作です。

勉強に失敗しましたか?

おすすめ

転載: blog.csdn.net/sgzqc/article/details/132239536