28

基于 this paper ,我正在尝试使用霍夫变换实现矩形检测。

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

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

4

4 回答 4

7

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

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

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

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

峰

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

等式 3

其中T_theta表示对应于平行线的角度阈值,在此处输入图像描述是对应于相似长度线的归一化阈值。

于 2009-11-05T21:41:17.487 回答
4

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

累加器映射到霍夫空间。循环通过累加器阵列需要累加器将霍夫空间划分为离散网格。

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

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

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

  1. 将原点放在图像的中心。而不是在代码中使用图像的自然左下角或左上角。
  2. 尝试使用最接近正方形的图像。对于给定区域,图像越拉长 ,边缘处的分辨率陷阱就越明显
  3. 尝试将您的图像分成 4/9/16 等不同的累加器,每个累加器的原点位于该子图像的中心。将每个累加器的结果链接在一起以进行矩形检测需要一点开销,但它应该有助于更均匀地分布分辨率。
  4. 最终的解决方案是根据与原点的距离线性增加分辨率。这可以使用

    (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
于 2009-11-14T06:19:00.047 回答
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 是表示交点的笛卡尔坐标的未知数。

于 2009-11-05T07:52:34.903 回答
0

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

于 2009-10-03T03:44:20.913 回答