Python+OpenCV|1次微分フィルタ

1次微分フィルタ

1次微分フィルタは、画像から輪郭を抽出する空間フィルタです。
1次微分を計算することで注目画素の左右上下の画素値の変化の傾きが求まります。
画像の輪郭は、画素値の変化が大きいため、微分値が大きい箇所が輪郭となります。

水平方向微分

縦方向のエッジを検出します。

$$K_x = \begin{bmatrix} 0 & 0 & 0 \\ -1 & 0 & 1 \\ 0 & 0 & 0 \end{bmatrix}$$

垂直方向微分

横方向のエッジを検出します。

$$K_y = \begin{bmatrix} 0 & -1 & 0 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix}$$

Python+OpenCV

%matplotlib inline
import matplotlib.pyplot as plt
import cv2
import numpy as np

gray = cv2.imread('haruna_kankore.png', 0)

#水平方向微分
kernel_1_x = np.array([[0, 0, 0],
                     [-1, 0, 1],
                     [0, 0, 0]])
x_1 = cv2.filter2D(gray, -1, kernel_1_x)
cv2.imwrite('x_1.png', x_1)

#垂直方向微分
kernel_1_y = np.array([[0, -1, 0],
                     [0, 0, 0],
                     [0, 1, 0]])
y_1 = cv2.filter2D(gray, -1, kernel_1_y)
cv2.imwrite('y_1.png', y_1)

出力結果

元画像

水平方向微分

水平方向微分は、縦方向のエッジを検出する。

垂直方向微分

垂直方向微分は、横方向のエッジを検出する。