膨張処理(dilation)、収縮処理(erosion)のところで画像のノイズ除去に応用できると書いた。
今回はそれらを使ってノイズ除去をしてみる。
オープニング(Opening)・クロージング(Closing)とは
オープニング(Opening)とは、n回収縮処理した後にn回膨張処理することをいう。
クロージング(Closing)とは、逆にn回膨張処理した後にn回収縮処理することをいう。
n回の回数を増やすことでよりノイズの除去が行える反面、残したい画像の原型も崩れてしまうため、
極力回数は少ない方がいい。らしい。
前提
元画像
二値画像処理を施した手の画像(te.jpg)を使う。
source/image ディレクトリにte.jpgを配置する。
予め、手の部分と手以外の部分にそれぞれノイズを入れてある。
オープニング・クロージングの処理
実際にオープニング・クロージングの処理を施してみる。
sourceディレクトリにopening_closing.pyファイルを作成する。
import cv2
import numpy as np
if __name__ == ‘__main__’:
# 画像の読み込み
img_src = cv2.imread("./image/te.jpg", 0)
# 4近傍の定義
neiborhood4 = np.array([[0, 1, 0],
[1, 1, 1],
[0, 1, 0]],
np.uint8)
# 8近傍の定義
neiborhood8 = np.array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
np.uint8)
# 近傍8のオープニング
img_dst = cv2.morphologyEx(img_src, cv2.MORPH_OPEN, neiborhood8)
# 近傍8のクロージング
img_dst = cv2.morphologyEx(img_dst, cv2.MORPH_CLOSE, neiborhood8)
# 表示
cv2.imshow("Show OPENING_CLOSING Image", img_dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
[/shell]
実行してみる。
元画像とよく比較すると、ノイズが除去できていることがわかる。