Python+OpenCV|Canny法

Python+OpenCV

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

#グレースケールで画像を読み込む
gray = cv2.imread('haruna_kankore.png', 0)

#Canny法
canny = cv2.Canny(gray, 100, 200)
cv2.imwrite("canny.png", canny)

出力画像

元画像

Canny法

アルゴリズム

平滑化

ガウシアンフィルタなどで平滑化する

微分フィルタ

ソーベルフィルタなどで微分画像を作る。
水平方向微分画像を\(G_x\)、垂直方向微分画像を\(G_y\)と表現する。

勾配強度と勾配方向

微分画像から、勾配強度|G|と勾配方向θを計算する。
$$|G| = \sqrt{G_x^2 + G_y^2}$$

$$\theta = \arctan \frac{G_y}{G_x}$$

エッジを細線化

勾配方向に走査し、最大輝度の点のみを残して、エッジを細線化する。

ヒステリシス閾値処理

ヒステリシス閾値処理により、信頼度の高いエッジを選択する。

参考

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_canny/py_canny.html