18

Can you give me a quick definition of rho and theta parameters in OpenCV's HoughLines function

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 
)

The only thing I found in the doc is:

rho: Distance resolution of the accumulator in pixels.

theta: Angle resolution of the accumulator in radians.

Do this mean that if I set rho=2 then 1/2 of my image's pixels will be ignored ... a kind of stride=2 ?

Community
  • 1
  • 1
Ghilas BELHADJ
  • 13,412
  • 10
  • 59
  • 99
  • It's a _kind of stride_ in the accumulator space, not image space. This is for a 2D histogram. If it was a 1D histogram, it's the same as setting the size of each bin. – Miki Nov 10 '16 at 15:45

2 Answers2

27

I have searched for this for hours and still haven't found a place where it is neatly explained. But picking up the pieces, I think I got it.

The algorithm goes over every edge pixel (result of Canny, for example) and calculates ρ using the equation ρ = x * cosθ + y * sinθ, for many values of θ.

The actual step of θ is defined by the function parameter, so if you use the usual math.pi / 180.0 value of theta, the algorithm will compute ρ 180 times in total for just one edge pixel in the image. If you would use a larger theta, there would be fewer calculations, fewer accumulator columns/buckets and therefore fewer lines found.

The other parameter ρ defines how "fat" a row of the accumulator is. With a value of 1, you are saying that you want the number of accumulator rows to be equal to the biggest ρ possible, which is the diagonal of the image you're processing. So if for some two values of θ you get close values for ρ, they will still go into separate accumulator buckets because you are going for precision. For a larger value of the parameter rho, those two values might end up in the same bucket, which will ultimately give you more lines because more buckets will have a large vote count and therefore exceed the threshold.

Some helpful resources:

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

mj3c
  • 1,447
  • 15
  • 18
0

To detect lines with Hough Transform, the best way is to represents lines with an equation of two parameters rho and theta as shown on this image. The equation is the following :

x cos⁡(θ)+y sin⁡(θ)=ρ

where (x,y) are line parameters.

This writing in (θ,ρ) parameters allow the detection to be less position-depending than a writing as y=a*x+b

(θ,ρ) in this context give the discretization for these two parameters

Hough explanation

RaymoAisla
  • 161
  • 1
  • 7