2021年12月20日月曜日

【OpenCV】画像のモルフォロジー変換(erode, dilate, morphologyEx)

 二値化画像に対して膨張・収縮などの処理を行う(モルフォロジー変換)。画像処理ライブラリOpenCVerodeにより収縮、dilateにより膨張、morphologyExによりオープニングやクロージングの処理ができる。


OpenCVを使うには次のようにインポートが必要。
import cv2


1. erode(収縮処理)

 erodeには処理する二値化画像およびカーネルサイズを引数として与え、目的の画素を囲むカーネルサイズ内の画素が全て1(白)であれば目的の画素を1、1つでも0(黒)があれば0とする。これにより背景が黒、前景が白で描かれている画像では前景の周囲が削れら収縮される。
次の画像'text.png'を(5x5)のカーネルで処理する場合。

text.png





import cv2
import numpy as np

img = cv2.imread('text.png', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel, iterations = 1)

cv2.imwrite('erosion.png', erosion)

実行結果





2. dilate(膨張処理)

 dilateerodeと逆に、目的の画素を囲むカーネルサイズ内の画素が全て0(黒)であれば目的の画素を0、1つでも1(白)があれば1とする。これにより背景が黒、前景が白で描かれている画像では前景の周囲が追加され膨張する。
'text.png'を(5x5)のカーネルで処理する場合。

import cv2
import numpy as np

img = cv2.imread('text.png', 0)
kernel = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(img, kernel, iterations = 1)

cv2.imwrite('dilation.png', dilation)

実行結果





3. opening(オープニング処理)

 openingは収縮、膨張処理を順に行う。背景(黒)と前景(白)からなる画像に白いノイズが乗っている場合に、初めの収縮処理によりノイズが消去され、続く膨張処理で収縮処理で小さくなった前景が膨張して元通りのサイズとなる。これによりノイズ除去が可能。オープニング処理を行うにはmorphologyExを用い、その引数に処理する画像とカーネルの他、cv2.MORPH_OPENを与える。
次の画像'text_noise_white.png'を(5x5)のカーネルで処理する場合。

'text_noise_white.png'





import cv2
import numpy as np

img = cv2.imread('text_noise_white.png', 0)
kernel = np.ones((5, 5), np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imwrite('opening.png', opening)

実行結果





4. closing(クロージング処理)

 closingは膨張、収縮処理を順に行う。背景(黒)と前景(白)からなる画像に黒いノイズが乗っている場合に、初めの膨張処理により前景に乗った黒いノイズが消去され、続く収縮処理で膨張処理で大きくなった前景が収縮して元通りのサイズとなる。これによりノイズ除去が可能。クロージング処理を行うにはmorphologyExを用い、その引数に処理する画像とカーネルの他、cv2.MORPH_CLOSEを与える。
次の画像'text_noise_black.png'を(5x5)のカーネルで処理する場合。



import cv2
import numpy as np

img = cv2.imread('text_noise_black.png', 0)
kernel = np.ones((5, 5), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

実行結果





5. リファレンス

OpenCV > Image Filtering > erode()
OpenCV > Image Filtering > dilate()
OpenCV > Image Filtering > morphologyEx()

使用したバージョン:Python 3.8.8 / OpenCV 4.0.1

0 件のコメント:

コメントを投稿