平滑化 フィルタ
平滑化フィルタを施してみます.これはノイズ除去に頻繁に用いられるフィルタです.
周辺の画素を重み付きで足し合わせて,新しい画像の画素値を計算します.
早速やってみましょう.
周辺の画素を重み付きで足し合わせて,新しい画像の画素値を計算します.
早速やってみましょう.
#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
どうでしょう.確かにノイズが滑らかになっていることが確認できると思います.
なお,このグラフはImageJで線を引いたあと,
Analyze -> Plot Profile (Cmd + K でもOK) によって表示することができます.便利ですね.
Analyze -> Plot Profile (Cmd + K でもOK) によって表示することができます.便利ですね.
Edge 抽出フィルタ
今度はEdge抽出のフィルタを試してみましょう.簡単のため,Horizontal の線を抽出するフィルタを考えます.
これは以下のような行列をたたみ込むことと同じです.なお,fはもともとの画像の画素値です.
これは以下のような行列をたたみ込むことと同じです.なお,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
この Filter をたたみ込むと,もともと画素値が変化していないところは0の値になります.
画素値が大きく変化しているところのみを取り出すことが出来るのがこのFilterです.
画素値が大きく変化しているところのみを取り出すことが出来るのがこのFilterです.