web-dev-qa-db-ja.com

HoughLinesのrhoおよびthetaパラメーターの説明

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?

11
Ghilas BELHADJ

私はこれを何時間も探しましたが、それがきちんと説明されている場所をまだ見つけていません。しかし、ピースを拾って、私はそれを手に入れたと思います。

アルゴリズムは、すべての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

https://www.youtube.com/watch?v=2oGYGXJfjzw

12
Zantsu

ハフ変換で線を検出するには、この画像に示すように、2つのパラメーターrhoとthetaの方程式で線を表すのが最善の方法です。方程式は次のとおりです。

xcos⁡(θ)+ysin⁡(θ)=ρ

ここで、(x、y)はラインパラメータです。

この(θ、ρ)パラメータへの書き込みにより、y = a * x + bとしての書き込みよりも、位置依存性が低くなります。

この文脈での(θ、ρ)は、これら2つのパラメーターの離散化を示します。

Hough explanation

0
RaymoAisla