Python OpenCV3でオープニング・クロージングを施してノイズを除去してみる

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

膨張処理(dilation)、収縮処理(erosion)のところで画像のノイズ除去に応用できると書いた。
今回はそれらを使ってノイズ除去をしてみる。

[amazonjs asin=”4061538225″ locale=”JP” title=”OpenCVによる画像処理入門 (KS情報科学専門書)”]

 

オープニング(Opening)・クロージング(Closing)とは

オープニング(Opening)とは、n回収縮処理した後にn回膨張処理することをいう。
クロージング(Closing)とは、逆にn回膨張処理した後にn回収縮処理することをいう。

n回の回数を増やすことでよりノイズの除去が行える反面、残したい画像の原型も崩れてしまうため、
極力回数は少ない方がいい。らしい。

前提

ディレクトリ構成などはこことかこことか。

 

元画像

二値画像処理を施した手の画像(te.jpg)を使う。
source/image ディレクトリにte.jpgを配置する。
予め、手の部分と手以外の部分にそれぞれノイズを入れてある。

te

 

オープニング・クロージングの処理

実際にオープニング・クロージングの処理を施してみる。
sourceディレクトリにopening_closing.pyファイルを作成する。

[python title=”opening_closing.pyの内容”] # -*- coding: utf-8 -*-

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()

[/python] [shell] (opencv_python)$ python opening_closing.py
[/shell]

実行してみる。

スクリーンショット 2015-07-06 18.01.13

 

元画像とよく比較すると、ノイズが除去できていることがわかる。

 

Related posts

コメントを残す