你能给我一个
rho
和theta
参数在OpenCV的HoughLines函数中的快速定义吗
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 ?
我已经搜索了几个小时,但仍然没有找到一个对其进行清晰解释的地方。但收拾残局,我想我明白了。
该算法遍历每个 edge 像素(例如 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
我知道这是一篇非常旧的帖子,但无论如何我想分享我的发现。
检测到的线的输出图像的分辨率(累加器)基本上由 ρ (rho) 和 θ (theta) 参数控制。
其中 ρ (rho) 负责以像素为单位的分辨率。 θ (theta) 负责以天使为单位的分辨率。
低 rho 值 > 更小的细胞 > 更高分辨率 > 更高精度的线条检测 > 更长的计算时间
Cells:是累加器中的元素。 每个单元格都有多个 (θ,ρ) 值,其中 theta 是角度,rho 是距离,正如您所知,可能存在的线的坐标。
所以基本上在计算完成后,单元格充当可能存在的行的“投票”,而累加器是单元格投票的“投票场所”。 对这些参数 (θ,ρ) 的投票越高,这些参数 (θ,ρ) 上存在一条线的可能性就越大。
总之,将 (θ,ρ) 视为 (x,y) 的平面,其中为每个边缘像素绘制了波(圆),并且它们在特定点上相互交叉越多,就越像一条线在那里。
左图像 XY 平面,
右图像 (θ,ρ) 平面,