用Hough变换检测矩形

时间:2009-09-01 22:32:35

标签: image-processing computer-vision hough-transform

我正在尝试使用Hough transform实现矩形检测,基于 this paper

我使用Matlab编程,但在检测到平行线对和正交对之后,我必须检测这些对的交集。我的问题是关于霍夫空间中两线交叉口的质量。

我通过求解四个方程系统找到了交点。这些交叉点是否位于笛卡尔坐标或极坐标空间中?

4 个答案:

答案 0 :(得分:7)

对于那些想知道这篇论文的人,它是:

CláudioRositoJung和Rodrigo Schramm的

基于窗口Hough变换的矩形检测

现在根据论文,交点被表示为极坐标,显然你的实现可能会有所不同(唯一的方法是告诉我们你的代码)。

假设您的符号与您的符号一致,您的峰值应表示为:

Peaks

然后必须执行4.3节或

中公式(3)给出的峰值配对

equation 3

其中T_theta表示对应于平行线的角度阈值 enter image description here是与相似长度的行相对应的归一化阈值。

答案 1 :(得分:4)

霍夫空间的准确性应取决于两个主要因素。

累加器映射到Hough Space。要循环累加器数组,需要累加器将霍夫空间划分为离散网格。

线性霍夫空间中准确度的第二个因素是原始图像中原点的位置。如果您对\ rho中的任何给定更改扫描\ theta,请查看会发生什么。在原点附近,这些扫描中的一个将覆盖比在图像边缘附近扫出的像素少得多的像素。这导致在图像边缘附近需要更高的\ rho \ theta分辨率,以便在转换回笛卡尔时获得相同的精度。

当然,增加分辨率的问题是你需要更多的计算能力和内存来增加它。此外,如果您统一增加累加器分辨率,则会在不需要的原点附近浪费分辨率。

有些想法可以帮助解决这个问题。

  1. 将原点放在 图像的中心。而不是 使用自然的左下方或顶部 代码中的图像左侧。
  2. 尝试使用最近的图像 去一个广场。更长的一个 图像是针对给定区域的 发音分辨率陷阱 变得边缘
  3. 尝试将图片分割为4/9/16 等各种不同的蓄电池 该子图像中心的原点。 链接需要一点开销 每个累加器的结果在一起 对于矩形检测,但它应该有所帮助 更均匀地分散分辨率。
  4. 最终的解决方案是增加 分辨率线性地取决于 距原点的距离。这可以使用
  5. 来实现
        (x-a)^2 + (y-b)^2 = \rho^2
    

    circle equation where
        - x,y are the current pixel
        - a,b are your chosen origin
        - \rho is the radius
    once the radius is known adjust your accumulator
    resolution accordingly. You will have to keep
    track of the center of each \rho \theta bin.
    for transforming back to Cartesian
    

答案 2 :(得分:1)

参考纸张的链接不起作用,但如果使用标准霍夫变换,则四个交点将以笛卡尔坐标表示。实际上,使用“正常参数化”表示用霍夫变换检测到的四条线:

rho = x cos(theta) + y sin(theta)

所以你将有四对(rho_i,theta_i)来识别你的四行。在检查正交性之后(例如仅通过比较角度theta_i),您可以解决四个方程式系统:

rho_j = x cos(theta_j) + y sin(theta_j)
rho_k = x cos(theta_k) + y sin(theta_k)

其中x和y是表示交点的笛卡尔坐标的未知数。

答案 3 :(得分:0)

我不是数学家。我愿意经过纠正...... 从霍夫2)... xy平面上的任何线都可以描述为 p = x cos theta + y sin theta。在这种表示中,p是正常距离,θ是直线的法线角度,...在实际应用中,角度θ和距离p被量化,我们得到一个数组 C(p,theta) 即可。
来自CRC标准数学表解析几何,平面部分中的极坐标... 这种有序数字对(r,theta)被称为点p的极坐标。 直线:令p =距离O的线距离,w =从OX到垂直线的逆时针角度,直到O线。正常形式: r cos(theta - w)= p 。 由此我得出结论,这些点位于极坐标空间中。