2019年1月23日 更新

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

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

6,499 view お気に入り 1
 (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」の続きです. 実際に実装をして,写像を確かめてみます.
画像の一部を消す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で実行してみました。
亀谷 桃子 | 6,266 view

この記事のキーワード

この記事のキュレーター

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