2019年1月23日 更新

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

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

1,445 view お気に入り 0
 (5273)

うーむ,なんとも言えないですね.
Morphology 変換の前と後でどのように変わったのか,差分を調べてみましょう.
plt.gray()
plt.imshow(morph_gray - j_img)
差分のプロット.py
 (5276)

なるほど!確かに,右と下にピクセルが増えていることがわかりますね.
全方位で膨張処理を行えば,エッジの検出器にもなりそうです.
## Morphology
shp = np.shape(j_img)
morph_gray2 = np.zeros(shp)
for row in range(shp[0]):
    for col in range(shp[1]):
        if j_img[row,col] == 255:
            morph_gray2[row,col]= 255
            morph_gray2[row,col+1] = 255
            morph_gray2[row-1,col] = 255
            morph_gray2[row+1,col]= 255
            morph_gray2[row,col-1] = 255
全方位.py
plt.gray()
plt.imshow(morph_gray2 - j_img)
プロット.py
 (5283)

これはMorphology Gradient と呼ばれるようですね.

Part2. 収縮処理

次は収縮処理です.膨張処理が分かれば収縮処理はその逆を行えばよいのです. 全方位の収縮をやってみましょう.前のプログラム同様,Kernel Size は (3,3)です.

## Morphology
shp = np.shape(j_img)
morph_gray_p = np.zeros(shp)
for row in range(shp[0]):
    for col in range(shp[1]):
        if j_img[row,col] == 255:
            morph_gray_p[row,col] += 255
            morph_gray_p[row,col+1] += 255
            morph_gray_p[row-1,col] += 255
            morph_gray_p[row+1,col] += 255
            morph_gray_p[row,col-1] += 255


## 収縮処理で消えるものは,近傍に黒がある場合である.近傍に黒がある場合,その和は含
## まれないため,255*5 とはならない.その部分は排除する.
morph_gray3  = 255*(morph_gray_p == 255*5)
収縮処理.py
plt.gray()
plt.imshow(morph_gray3)
表示.py
 (5287)

plt.gray()
plt.imshow(j_img - morph_gray4)
差分.py
33 件

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

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

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

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

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

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

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

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

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

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

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

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

この記事のキーワード

この記事のキュレーター

三好 裕之 三好 裕之