【问题标题】:Explanation of rho and theta parameters in HoughLinesHoughLines中rho和theta参数的解释
【发布时间】:2017-03-24 17:01:35
【问题描述】:

你能给我一个关于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 像素将被忽略...一种 stride=2 ?

【问题讨论】:

  • 这是累加器空间中的一种跨步,而不是图像空间。这是一个二维直方图。如果是一维直方图,和设置每个bin的大小一样。

标签: opencv image-processing hough-transform


【解决方案1】:

我已经搜索了好几个小时,但仍然没有找到一个可以清楚地解释它的地方。但收拾残局,我想我明白了。

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

θ 的实际步长由函数参数定义,因此如果您使用通常的math.pi / 180.0 θ 值,算法将对图像中的一个边缘像素总共计算 ρ 180 次。如果您使用更大的 theta,则计算会更少,累加器列/存储桶也会更少,因此找到的行也会更少。

另一个参数ρ 定义累加器的一行有多“胖”。如果值为 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

【讨论】:

    【解决方案2】:

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

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

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

    这种写入 (θ,ρ) 参数允许检测比写入 y=a*x+b 的位置依赖性更小

    (θ,ρ) 在此上下文中给出这两个参数的离散化

    【讨论】:

    • 这如何解释任何事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2021-05-09
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多