opencvの機能を使いモルフォロジー演算を行う

画像からのノイズ除去、テクスチャ解析等に使用される演算手法。背景の画素と隣接する物体の画素の関係を膨張(dilate)、収縮(erosion)させることで画像の2値化、グレースケール化を行うことができる。

openCVではmorphologyExのメソッドによりさらに以下の処理が可能。
オープニング処理  収縮した結果に対して同じ回数だけ膨張する
クロージング処理  膨張した結果に対して同じ回数だけ収縮する
グラジエント処理   膨張した結果から収縮した結果を差し引く
トップハット処理  元画像からオープニングした画像を差し引く
ブラックハット処理 クロージングした画像から元画像を差し引く

■入力画像
morphology input data

■処理コード

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('maru.png',0)
kernel = np.ones((5,5),np.uint8)

erode  = cv2.erode(img,kernel,iterations = 1)
dilate = cv2.dilate(img,kernel,iterations = 1)
morph_open     = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
morph_close    = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
morph_gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
morph_tophat   = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
morph_blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

plt.subplots_adjust(wspace=1.0, hspace=1.0)
plt.subplot(331)
plt.title("erode")
plt.imshow(erode)
plt.subplot(332)
plt.title("dilate")
plt.imshow(dilate)
plt.subplot(333)
plt.title("morph open")
plt.imshow(morph_open)
plt.subplot(334)
plt.title("morph close")
plt.imshow(morph_close)
plt.subplot(335)
plt.title("morph morph_gradient")
plt.imshow(morph_gradient)
plt.subplot(336)
plt.title("morph morph_tophat")
plt.imshow(morph_tophat)
plt.subplot(337)
plt.title("morph morph_blackhat")
plt.imshow(morph_blackhat)

plt.show()

■処理結果
morphology results

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA