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}$$
エッジを細線化
勾配方向に走査し、最大輝度の点のみを残して、エッジを細線化する。
ヒステリシス閾値処理
ヒステリシス閾値処理により、信頼度の高いエッジを選択する。
参考
Canny法によるエッジ検出 — OpenCV-Python Tutorials 1 documentation