![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
円は数学的に \((x-x_{center})^2 + (y - y_{center})^2 = r^2\) と表される。ここで \((x_{center},y_{center})\) は円の中心、\(r\) は円の半径である。この式から、3つのパラメータがあることがわかるので、ハフ変換には3次元のアキュムレータが必要となり、これは非常に非効率である。そこでOpenCVは、より巧妙な方法である ハフ勾配法 (Hough Gradient Method) を用いる。これはエッジの勾配情報を利用する。
次の関数を使用する: cv.HoughCircles (image, circles, method, dp, minDist, param1 = 100, param2 = 100, minRadius = 0, maxRadius = 0)
| image | 8ビット、シングルチャンネルのグレースケール入力画像。 |
| circles | 検出された円の出力ベクトル(cv.CV_32FC3型)。各ベクトルは3要素の浮動小数点ベクトル (x,y,radius) としてエンコードされる。 |
| method | 検出方法(cv.HoughModes を参照)。現在実装されている方法は HOUGH_GRADIENT のみである。 |
| dp | アキュムレータの解像度と画像の解像度の逆比。たとえば dp = 1 の場合、アキュムレータは入力画像と同じ解像度を持つ。dp = 2 の場合、アキュムレータの幅と高さは入力画像の半分になる。 |
| minDist | 検出される円の中心間の最小距離。このパラメータが小さすぎると、真の円に加えて複数の隣接する円が誤って検出されることがある。大きすぎると、いくつかの円が見逃されることがある。 |
| param1 | 1つ目の方法固有のパラメータ。HOUGH_GRADIENT の場合、これはCannyエッジ検出器に渡される2つのしきい値のうち高い方である(低い方はその半分になる)。 |
| param2 | 2つ目の方法固有のパラメータ。HOUGH_GRADIENT の場合、これは検出段階における円の中心に対するアキュムレータのしきい値である。これが小さいほど、より多くの誤った円が検出されることがある。より大きなアキュムレータ値に対応する円が先に返される。 |
| minRadius | 円の最小半径。 |
| maxRadius | 円の最大半径。 |