Python+OpenCV|Sobelフィルタ

Sobelフィルタ

ソーベルフィルタは、プレウィットフィルタを改良した空間フィルタです。
プレウィットフィルタでは、平滑化フィルタと微分フィルタを組み合わせることで、ノイズの影響を抑えながら輪郭を抽出した

平滑化フィルタをかける際に注目画素との距離に応じて重み付けを変化させたものがソーベルフィルタです。

これにより、自然に平滑化できる。

フィルター

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

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

Python+OpenCV

import cv2
import numpy as np

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

#縦方向のエッジ
sobel_10 = cv2.Sobel(gray, cv2.CV_32F, 1, 0, ksize=3)
#横方向のエッジ
sobel_01 = cv2.Sobel(gray, cv2.CV_32F, 0, 1, ksize=3)
#右斜め上のエッジ
sobel_11 = cv2.Sobel(gray, cv2.CV_32F, 1, 1, ksize=3)

cv2.imwrite('sobel_10.png', sobel_10)
cv2.imwrite('sobel_01.png', sobel_01)
cv2.imwrite('sobel_11.png', sobel_11)

出力結果

元画像

Sobel-縦方向エッジ

Sobel-横方向エッジ

Sobel-右斜め上方向エッジ

参考書