![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
前のチュートリアル: Cannyエッジ検出器
次のチュートリアル: ハフ円変換
| 原著者 | Ana Huamán |
| 互換性 | OpenCV >= 3.0 |
このチュートリアルでは、以下の方法を学ぶ:
ハフ変換では、直線を極座標系で表現する。したがって、直線の方程式は次のように書ける:
\[y = \left ( -\dfrac{\cos \theta}{\sin \theta} \right ) x + \left ( \dfrac{r}{\sin \theta} \right )\]
項を整理すると: \(r = x \cos \theta + y \sin \theta\)
一般に、各点 \((x_{0}, y_{0})\) について、その点を通る直線の集合を次のように定義できる:
\[r_{\theta} = x_{0} \cdot \cos \theta + y_{0} \cdot \sin \theta\]
これは、各組 \((r_{\theta},\theta)\) が \((x_{0}, y_{0})\) を通る各直線を表すことを意味する。
ここでは \(r > 0\) かつ \(0< \theta < 2 \pi\) を満たす点のみを考える。
3つのプロットは1つの点 \((0.925, 9.6)\) で交差する。これらの座標は、\((x_{0}, y_{0})\)、\((x_{1}, y_{1})\)、\((x_{2}, y_{2})\) が乗る直線の引数( \(\theta, r\))である。
OpenCVは3種類のハフ変換による直線検出を実装している:
a. 標準ハフ変換
b. 確率的ハフ変換による直線検出
c. 重み付きハフ変換
ここでハフ変換を適用する。この目的で利用できる2つのOpenCV関数の使い方を説明する。
まず、変換を適用する:
そして線を描画して結果を表示する。
まず、変換を適用する:
そして線を描画して結果を表示する。
数独の画像のような入力画像を使う。標準的ハフ直線変換を使うと次の結果が得られる: 
確率的ハフ変換を使うと: 
threshold を変更すると、検出される線の数が変化することがわかる。その理由は明白である。しきい値を高く設定すると、検出される線は少なくなる(線が検出されたと判定するためにより多くの点が必要になるため)。