OpenCVのHoughLines 関数のrho
およびtheta
パラメーターの簡単な定義を教えてください
void cv::HoughLines ( InputArray image,
OutputArray lines,
double rho,
double theta,
int threshold,
double srn = 0,
double stn = 0,
double min_theta = 0,
double max_theta = CV_PI
)
私がドキュメントで見つけた唯一のものは:
rho:アキュムレータの距離分解能(ピクセル単位)。
シータ:アキュムレータの角度分解能(ラジアン)。
これは、rho=2
を設定すると、画像のピクセルの1/2が無視されることを意味します...一種のストライド= 2?
私はこれを何時間も探しましたが、それがきちんと説明されている場所をまだ見つけていません。しかし、ピースを拾って、私はそれを手に入れたと思います。
アルゴリズムは、すべてのEdgeピクセル(たとえば、Cannyの結果)を調べ、方程式ρ
を使用してρ = x * cosθ + y * sinθ
を計算します。 θ
の多くの値。
θ
の実際のステップは関数パラメーターによって定義されるため、シータの通常のmath.pi / 180.0
値を使用すると、アルゴリズムは1つのエッジピクセルに対して合計180回ρ
を計算します。画像。より大きなシータを使用すると、計算が少なくなり、アキュムレータの列/バケットが少なくなるため、検出される行が少なくなります。
もう1つのパラメーターρ
は、アキュムレータの行がどの程度「太い」かを定義します。値が1の場合、アキュムレータ行の数を、処理している画像の対角線である可能な最大のρ
に等しくする必要があると言っています。したがって、θ
のいくつかの2つの値について、ρ
の値が近い場合でも、精度を求めているため、それらは別々のアキュムレータバケットに入れられます。パラメータrhoの値が大きい場合、これら2つの値が同じバケットに含まれる可能性があります。これにより、より多くのバケットの投票数が多くなり、しきい値を超えるため、最終的にはより多くの行が得られます。
いくつかの役立つリソース:
http://docs.opencv.org/3.1.0/d6/d10/tutorial_py_houghlines.html
https://www.mathworks.com/help/vision/ref/houghtransform.html