HoughLines中rho和theta参数的解释

时间:2016-11-10 15:39:30

标签: opencv image-processing hough-transform

您能否在OpenCV's HoughLines函数

中快速定义rhotheta参数
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:累加器的距离分辨率,以像素为单位。

     

theta:累加器的角度分辨率,以弧度表示。

这是否意味着如果我设置rho=2,那么我的图像像素的1/2将被忽略...一种步幅= 2?

2 个答案:

答案 0 :(得分:6)

我已经搜索了好几个小时,仍然没有找到一个整齐解释的地方。但拿起碎片,我想我明白了。

算法遍历每个 edge 像素(例如Canny的结果)并使用等式ρ计算ρ = x * cosθ + y * sinθ,用于θ的许多值。

θ的实际步骤由函数参数定义,因此如果您使用theta的常用math.pi / 180.0值,算法将只计算一次ρ 180次图像中的边缘像素。如果你使用一个更大的theta,那么计算量就会减少,累加器列数/桶数就会减少,因此找到的行数就会减少。

另一个参数ρ定义" fat"累加器的一行是。如果值为1,则表示您希望累加器行数等于可能的最大ρ,这是您正在处理的图像的对角线。因此,如果对于θ的某些两个值,您获得ρ的接近值,它们仍会进入单独的累加器桶,因为您需要精确度。对于参数rho的较大值,这两个值可能最终会在同一个存储桶中,最终会为您提供更多行,因为更多存储桶的投票数会更多,因此会超过阈值。

一些有用的资源:

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

答案 1 :(得分:0)

要使用Hough变换检测线条,最好的方法是使用此图像上显示的两个参数rho和theta的等式来表示线条。等式如下:

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

其中(x,y)是线参数。

这种写入(θ,ρ)参数允许检测的位置比写入更少,因为y = a * x + b

在这种情况下,

(θ,ρ)给出了这两个参数的离散化

Hough explanation