2018年4月12日 更新

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

Python を用いて,画像のFilter を視覚的に理解してみます.コードを載せていますので,実装可能です.

26,212 view お気に入り 0
 (4698)

平滑化 フィルタ

平滑化フィルタを施してみます.これはノイズ除去に頻繁に用いられるフィルタです.

周辺の画素を重み付きで足し合わせて,新しい画像の画素値を計算します.

早速やってみましょう.
#Gaussian filter 
g = np.array([[1.0/16,1.0/4,1.0/16],[1.0/4,1.0/2,1.0/4],[1.0/16,1.0/4,1.0/16]])
# convolution
img_g = np.zeros([pix, pix])
for n in range(2,pix):
    for m in range(2,pix):
        for gn in range(len(g)):
            for gm in range(len(g)):
                img_g[n,m] = img_g[n,m] + g[gn,gm]*img_n[n - gn, m- gm ]

plt.imshow(img_g, cmap='gray')
sample.py
 (4699)

どうでしょう.確かにノイズが滑らかになっていることが確認できると思います.
 (4705)

なお,このグラフはImageJで線を引いたあと,
Analyze -> Plot Profile (Cmd + K でもOK) によって表示することができます.便利ですね.

Edge 抽出フィルタ

今度はEdge抽出のフィルタを試してみましょう.簡単のため,Horizontal の線を抽出するフィルタを考えます.
これは以下のような行列をたたみ込むことと同じです.なお,fはもともとの画像の画素値です.
\begin{align} h = \begin{pmatrix} 1 & 1& 1\\ 0 & 0 & 0\\ -1 & -1 & -1 \end{pmatrix} \end{align} \begin{align} (f*h)[n,m] = \sum_{i=0}^{N-1} \sum_{j=0}^{M-1} f[n-i,m-j] h[i,j] \end{align}
## Simple image processing

# Horizontal edge detection
h = np.array([[1,1,1],[0,0,0],[-1,-1,-1]])

# convolution
img_h = np.zeros([pix, pix])
for n in range(2,pix):
    for m in range(2,pix):
        for hn in range(len(h)):
            for hm in range(len(h)):
                img_h[n,m] = img_h[n,m] + h[hn,hm]*img[n - hn, m- hm ]

plt.imshow(img_h, cmap='gray')
sample.py
 (4710)

この Filter をたたみ込むと,もともと画素値が変化していないところは0の値になります.
画素値が大きく変化しているところのみを取り出すことが出来るのがこのFilterです.
32 件

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

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

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

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

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

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

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

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.
Pythonで画像処理② Data Augmentation (画像の水増し)

Pythonで画像処理② Data Augmentation (画像の水増し)

画像の水増し、Data Augmentationと呼ばれる方法になりますが、学習に使う画像に変形を加えたり、ノイズを加えたり、明るさを変えたりといった処理を行う方法を紹介します。学習画像に様々な処理を行うことで認識がロバストになるというメリットがあります。
Mochizuki | 94,393 view

この記事のキーワード

この記事のキュレーター

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