【画像処理】Cannyエッジ検出器の原理・特徴・計算式

スポンサーリンク
ビッグバナー(上2)

この記事では、Cannyエッジ検出器により輪郭(エッジ)検出の原理や特徴、計算式についてまとめました。

Cannyエッジ検出器

Cannyエッジ検出器は、画像の輪郭(エッジ)部分を検出するアルゴリズムです。
輪郭を検出する他のアルゴリズムとしては「ソーベルフィルタ」「ラプラシアンフィルタ」などがあります。
それらと比べた時のCannyエッジ検出器の特徴は以下の通りです。

①輪郭の検出漏れや誤検出が少ない。
②各点に一本の輪郭を検出する。
③真にエッジの部分を検出できる。

■入力画像(左)、出力画像(右)

Cannyアルゴリズムの大まかな処理手順は以下の通りです。

順序 内容
Gaussianフィルタで画像を平滑化する。
平滑化された画像の微分を計算する。
微分した結果から勾配の大きさと方向の計算する。
Non maximum Suppression処理をする。
Hysteresis Threshold処理をする。

アルゴリズム

Cannyエッジ検出器のアルゴリズムは以下の通りです。

①ガウシアンフィルタで平滑化処理

ガウシアンフィルタは、画像の平滑化処理に用いられているフィルタです。
このフィルタは、処理をかける画素の周りの画素値とガウス分布の重み付けを利用することで自然な平滑化をおこなうことができます。
入力画像をI(x,y)、出力画像をI'(x,y)とすると、変換式は次のようになります。

(1) \begin{eqnarray*} I'(x,y)=I(x,y)*g(x,y)\\ g(x,y)=\frac{1}{\sqrt{2\pi}\sigma}exp(\frac{x^2+y^2}{2\sigma^2}) \end{eqnarray*}

*は畳み込み積分を表しています。

②滑化された画像を微分

平滑化処理された画像I'(x,y)を水平方向、垂直方向に微分します。
このフィルタは、処理をかける画素の周りの画素値とガウス分布の重み付けを利用することで自然な平滑化をおこなうことができます。
水平方向、垂直方向に微分した画像をそれぞれI_{x}(x,y), I_{y}(x,y)とすると、変換式は次のようになります。

(2) \begin{eqnarray*} I_{x}(x,y)=I(x,y) * g_x(x,y)\\ I_{y}(x,y)=I(x,y) * g_y(x,y)\\ g_x(x,y)=\frac{-x}{\sqrt{2\pi}\sigma^3}exp(\frac{x^2+y^2}{2\sigma^2})\\ g_y(x,y)=\frac{-y}{\sqrt{2\pi}\sigma^3}exp(\frac{x^2+y^2}{2\sigma^2}) \end{eqnarray*}

③微分画像の勾配の大きさと方向の計算

微分画像の勾配の大きさIと方向\thetaの計算式は次のとおりです。

(3) \begin{eqnarray*} I&=&\sqrt{I_x^2+I_y^2}\\ \theta&=&tan^{-1}\frac{I_y}{I_x}=atan2(I_y, I_x) \end{eqnarray*}

④Non maximum Suppression処理

Non maximum Suppression処理により、2つの閾値で「信頼性の高いエッジ」と「信頼性の低いエッジ」を選びます。

⑤Hysteresis Threshold処理

処理④で得られた信頼性の高いエッジから、それと繋がっている信頼性の低いエッジを選んで行きます。
この処理により、エッジの検出漏れを防ぎます。

【関連記事】
【画像処理入門】アルゴリズム&プログラミング

スポンサーリンク
レクタングル(下2)
レクタングル(下2)

シェア&フォローお願いします!