import cv2 import matplotlib.pyplot as plt
Package import.py
今回はこの画像を使用していきます。
この白黒画像の画像表示を行います。
img_bgr = cv2.imread("img_example.jpg")
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
Picture show.py
img_g = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) plt.gray() plt.imshow(img_g)
Picture show2.py
pythonのライブラリから、numpyをインポートし平均化フィルタを用いた畳み込み演算を設計します。 平均化フィルタは以下のような行列です。
\begin{equation}
H = \begin{pmatrix}
1/9 & 1/9 & 1/9\\
1/9 & 1/9 & 1/9\\
1/9 & 1/9 & 1/9
\end{pmatrix}
\end{equation}
import numpy as np shp = np.shape(F) ## 画像のshape を保存 H = np.ones([3,3])/9 ## フィルタの要素をセット F = img_g G = np.zeros(shp) for i in range(shp[0]): for j in range(shp[1]): for n in range(-1,2): for m in range(-1,2): G[i,j] = G[i,j] + F[(i+m)%shp[0], (j+n)%shp[1]] * H[m,n]
Calculation design.py
これを実際の画像に適用させます。
plt.subplot(1,2,1) plt.gray() plt.imshow(F) plt.title("Before") plt.subplot(1,2,2) plt.gray() plt.imshow(G) plt.title("After")
Applied picture.py
出力結果はこんな感じになります。うまく画像をぼかすことができました。
次に、エッジ抽出フィルタの畳み込み演算を設計します。フィルタは以下のとおりです。
\begin{align}
H'' = \begin{pmatrix}
0 & 1 & 0 \\
0 & -1 & 0 \\
0 & 0 & 0
\end{pmatrix}
\end{align}