モルフォロジー処理とは、主に二値画像を対象として、図形に対してシンプルな処理を指します。
本稿では、収縮と膨張の処理を確認していきます。
収縮(Erosion)・膨張(Dilation)処理
収縮は、境界を浸食するような処理です。カーネルに含まれる画素の画素値が全て1の時、1、そうでない時、0を出力します。
cv2.erode(image, kernel, iterations = 1)
膨張は、基本的に、収縮の後に膨張させるノイズの除去方法として用いられます。カーネル内の画素値で1が1つでも含まれている時、出力画像の注目画素の画素値を1にする処理です。
cv2.dilate(image, kernel, iterations = 1)
サンプルコード
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread('image.png', 0)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(image, kernel, iterations=1)
dilation = cv2.dilate(image, kernel, iterations=1)
plt.subplot(1, 3, 1)
plt.title('original')
plt.xticks([]), plt.yticks([])
plt.imshow(image)
plt.subplot(1, 3, 2)
plt.title('erosion')
plt.xticks([]), plt.yticks([])
plt.imshow(erosion)
plt.subplot(1, 3, 3)
plt.title('dilation')
plt.xticks([]), plt.yticks([])
plt.imshow(dilation)
plt.show()