Morphology (モルフォロジー変換)
モルフォロジー変換とは,2値画像に関して,「膨張」や「収縮」などと言った処理を施す操作のことです [1].モルフォロジーには,入力画像と構造的要素(Kernel)の二つを入力として与えます.
本記事では,膨張や収縮がどのように実装されるのか確認してみます.
本記事では,膨張や収縮がどのように実装されるのか確認してみます.
Part1. 膨張処理
膨張処理はその名前の通り,画素を膨張 させる処理のことです.これは,画像に対する「+」の演算と考えてよいでしょう.
例えば,以下のような2値画像があったとします.
この画像に関して,MorphologyのKernel として,右図のようなものを与えてみましょう.
まず,上の行に注目です.Input として,左上のようなものがあったとき,中央のKernel のものを畳み込むと結果的にOutput のような模様が得られます.注目すべきは,Input に青色があれば,その要素に加えて下と右も塗りつぶされる,ということです.これがMorphology変換の膨張の処理です.なお,図は[2]を参考にしました.
Python による実装
それでは,上の処理をPythonで実装してみましょう.for 文を使うと簡単ですね.
import cv2 import numpy as np import matplotlib.pyplot as plt
ライブラリインポート.py
img = cv2.imread('j.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) thresh =100 max_pixel = 255 gray_thresh = cv2.threshold(gray, thresh, max_pixel, cv2.THRESH_BINARY) j_img = gray_thresh[1]
2値化など.py
plt.gray() plt.imshow(j_img)
プロット.py
## Morphology shp = np.shape(j_img) morph_gray = np.zeros(shp) for row in range(shp[0]): for col in range(shp[1]): if j_img[row,col] == 255: morph_gray[row,col]= 255 morph_gray[row,col+1] = 255 morph_gray[row-1,col] = 255
Morphology.py
plt.gray() plt.imshow(morph_gray)
プロット.py