使用霍夫变换进行矩形检测

Posted

技术标签:

【中文标题】使用霍夫变换进行矩形检测【英文标题】:Rectangle detection with Hough transform 【发布时间】:2010-11-24 19:09:45 【问题描述】:

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

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

我通过求解四个方程组找到了交点。这些交点是在笛卡尔空间还是极坐标空间?

【问题讨论】:

你能提供更多细节吗? 没有 DOI 为“10.1.1.59.4239”的文档 提供的文档标识符与我们存储库中的任何文档都不匹配。在句柄系统中找不到您请求的 DOI - 10.1.1.59.4239。 被引论文和OP丢失。我们应该关闭这个吗? 你能把你的代码放在 pastebin 里,然后放一个链接。 【参考方案1】:

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

基于窗口霍夫变换的矩形检测 作者:Cláudio Rosito Jung 和 Rodrigo Schramm。

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

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

然后您必须执行第 4.3 节中公式 (3) 给出的峰值配对或

其中表示平行线对应的角度阈值 而是对应长度相似的行的归一化阈值。

【讨论】:

应该是 \delta\rho= |\rho_i + \rho_j | 【参考方案2】:

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

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

线性霍夫空间中准确性的第二个因素是原点在原始图像中的位置。看看如果对 \rho 的任何给定变化进行 \theta 扫描会发生什么。在原点附近,这些扫描之一将覆盖比图像边缘附近的扫描少得多的像素。这样做的结果是,在图像边缘附近,您的累加器需要更高的 \rho \theta 分辨率,以便在转换回笛卡尔时达到相同的精度水平。

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

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

    将原点放在 图像的中心。与 使用自然的左下角或顶部 代码中图像的左侧。 尽量使用最接近的图像 到达一个广场。越拉长 图像对于给定区域越多 发音为分辨率陷阱 成为边缘 尝试将图像划分为 4/9/16 等不同的蓄电池,每个都有 该子图像中心的原点。 链接需要一点开销 每个累加器的结果一起 用于矩形检测,但它应该有帮助 更均匀地分布分辨率。 最终的解决方案是增加 分辨率线性取决于 与原点的距离。这可以使用

    (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

【讨论】:

在分析了图像的两个部分后,您对如何组合累加器有什么建议吗? (你的第 3 点)【参考方案3】:

参考论文的链接无效,但如果您使用标准霍夫变换,则四个交点将以笛卡尔坐标表示。实际上,使用霍夫变换检测到的四行将使用“正常参数化”表示:

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 是表示交点的笛卡尔坐标的未知数。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于使用霍夫变换进行矩形检测的主要内容,如果未能解决你的问题,请参考以下文章

无法使用opencv使用霍夫变换定位线

MATLAB中用霍夫变换检测出了直线之后怎么求斜率

HoughLinesP(霍夫变换直线检测)

OpenCV霍夫变换进行形状检测

标准霍夫变换识别粗直线

标准霍夫变换识别粗直线