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

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

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

 

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

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

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

前提

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

 

元画像

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

te

 

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

実際にオープニング・クロージングの処理を施してみる。
sourceディレクトリに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()

(opencv_python)$ python opening_closing.py

実行してみる。

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

 

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

 

Follow me!

コメントを残す

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