Python OpenCV3で画素の膨張処理(dilation)と収縮処理(erosion) (ちょっと解説も)

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

膨張処理(dilation)、収縮処理(erosion)は画像のノイズ除去に使われる処理。

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

 

膨張処理・縮小処理とは

膨張処理は図形を1画素分広げる処理のこと。
縮小処理は図形の1画素分狭める処理のこと。

膨張するにも縮小するにも近傍を使う。
よく使われる近傍は、以下の4近傍と8近傍。
(以降の部分では、注目する部分を1、注目しない部分を0で表す。)

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

 

膨張処理は、画像の各画素に近傍の黄色の部分を当てて、近傍のいずれかの1が元画像でも1の場合、その画素の部分を1にしていく。
図に表すと次のようになる。

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

 

収縮処理は、画像の各画素に近傍の黄色の部分を当てて、近傍のいずれかの1が元画像でも0の場合、その画素の部分を0にしていく。
図に表すと次のようになる。

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

 

前提

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

 

元画像

テレビの砂嵐画像(sunaarashi.jpg)を使う。
source/image ディレクトリにsunaarashi.jpgを配置する。

sunaarashi

 

膨張処理

まず膨張処理を実装してみる。
sourceディレクトリにdilation.pyを作成する。

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

import cv2
import numpy as np

if __name__ == ‘__main__’:

# 画像の読み込み
img_src = cv2.imread("./image/sunaarashi.jpg", 1)

# 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_dilation = cv2.dilate(img_src,
neiborhood8,
iterations=1)

# 表示
cv2.imshow("Show DILATION Image", img_dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()

[/python]

実行してみる。

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

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

 

元画像とよく比較すると、白い部分がより強調されていることがわかる。

 

縮小処理

次に縮小処理を実装してみる。
sourceディレクトリにerosion.pyを作成する。

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

import cv2
import numpy as np

if __name__ == ‘__main__’:

# 画像の読み込み
img_src = cv2.imread("./image/sunaarashi.jpg", 1)

# 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_erosion = cv2.erode(img_src,
neiborhood8,
iterations=1)

# 表示
cv2.imshow("Show EROSION Image", img_erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

実行してみる。

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

 

元画像とよく比較すると、黒い部分がより強調されていることがわかる。

 

Related posts

コメントを残す