2019年1月23日 更新

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.

13,148 view お気に入り 2

Morphology (モルフォロジー変換)

モルフォロジー変換とは,2値画像に関して,「膨張」や「収縮」などと言った処理を施す操作のことです [1].モルフォロジーには,入力画像と構造的要素(Kernel)の二つを入力として与えます.
本記事では,膨張や収縮がどのように実装されるのか確認してみます.

Part1. 膨張処理

膨張処理はその名前の通り,画素を膨張 させる処理のことです.これは,画像に対する「+」の演算と考えてよいでしょう.

例えば,以下のような2値画像があったとします.

図1. Jが書かれた2値画像

図1. Jが書かれた2値画像

この画像に関して,MorphologyKernel として,右図のようなものを与えてみましょう.

まず,上の行に注目です.Input として,左上のようなものがあったとき,中央のKernel のものを畳み込むと結果的にOutput のような模様が得られます.注目すべきは,Input に青色があれば,その要素に加えて下と右も塗りつぶされる,ということです.これがMorphology変換の膨張の処理です.なお,図は[2]を参考にしました.

図2. Kernel とそのConvolutionの関係

図2. Kernel とそのConvolutionの関係

Python による実装

それでは,上の処理をPythonで実装してみましょう.for 文を使うと簡単ですね.
import cv2
import numpy as np
import matplotlib.pyplot as plt
ライブラリインポート.py
img = cv2.imread('j.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh =100
max_pixel = 255
gray_thresh = cv2.threshold(gray, thresh, max_pixel, cv2.THRESH_BINARY)
j_img = gray_thresh[1]
2値化など.py
plt.gray()
plt.imshow(j_img)
プロット.py
 (5271)

## Morphology
shp = np.shape(j_img)
morph_gray = np.zeros(shp)
for row in range(shp[0]):
    for col in range(shp[1]):
        if j_img[row,col] == 255:
            morph_gray[row,col]= 255
            morph_gray[row,col+1] = 255
            morph_gray[row-1,col] = 255
            
Morphology.py
plt.gray()
plt.imshow(morph_gray)
プロット.py
33 件

関連する記事 こんな記事も人気です♪

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
画像の一部を消すInpainting という技術とその実装 (python)

画像の一部を消すInpainting という技術とその実装 (python)

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.
画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

Python を用いて,画像のFilter を視覚的に理解してみます.コードを載せていますので,実装可能です.
Extracting Straight Lines〜画像から境界線を効率よく求める方法〜

Extracting Straight Lines〜画像から境界線を効率よく求める方法〜

本記事では,IEEE Transactions on Pattern Analysis and Machine Intelligence に投稿された,「Extracting Straight Lines」の論文を説明し,実装を行います.1986年に投稿された少し古めの論文ですが,アイディアは非常に面白いです.
ディジタル画像処理~pythonによる空間フィルタリングpart1~ 

ディジタル画像処理~pythonによる空間フィルタリングpart1~ 

ディジタル画像処理を解説します.今回は,代表的な空間フィルタリングをpythonで実行してみました。
亀谷 桃子 | 13,781 view

この記事のキーワード

この記事のキュレーター

エルピクセル編集部 エルピクセル編集部