![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
前のチュートリアル: 画像への境界の追加
次のチュートリアル: Laplace演算子
| 原著者 | Ana Huamán |
| 互換性 | OpenCV >= 3.0 |
このチュートリアルでは、以下の方法を学ぶ:
エッジ では、ピクセル強度が顕著に 変化 することが容易に見て取れる。変化 を表現する良い方法は、導関数 を用いることである。勾配の大きな変化は、画像における大きな変化を示す。
操作対象の画像を \(I\) とすると、
2つの導関数を計算する。
\[G_{x} = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix} * I\]
\[G_{y} = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ +1 & +2 & +1 \end{bmatrix} * I\]
画像の各点で、上記2つの結果を組み合わせることで、その点における 勾配 の近似を計算する。
\[G = \sqrt{ G_{x}^{2} + G_{y}^{2} }\]
ただし、次のより単純な式が用いられることもある。
\[G = |G_{x}| + |G_{y}|\]
3, the Sobel kernel shown above may produce noticeable inaccuracies (after all, Sobel is only an approximation of the derivative). OpenCV addresses this inaccuracy for kernels of size 3 by using the Scharr() function. This is as fast but more accurate than the standard Sobel function. It implements the following kernels: \[G_{x} = \begin{bmatrix} -3 & 0 & +3 \\ -10 & 0 & +10 \\ -3 & 0 & +3 \end{bmatrix}\]
\[G_{y} = \begin{bmatrix} -3 & -10 & -3 \\ 0 & 0 & 0 \\ +3 & +10 & +3 \end{bmatrix}\]
x 方向と y 方向の「導関数」を計算する。このために、以下に示すように Sobel() 関数を使用する。この関数は次の引数を取る。
x 方向の勾配を計算するには \(x_{order}= 1\) と \(y_{order} = 0\) を使うことに注意。y 方向についても同様に行う。
両方向の勾配を加算することで 勾配 を近似する(これは決して厳密な計算ではないことに注意。しかし本目的には十分である)。