用Hough变换检测矩形

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Hough变换检测矩形相关的知识,希望对你有一定的参考价值。

我正在尝试使用基于Hough transformthis paper实现矩形检测。

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

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

答案

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

CláudioRositoJung和Rodrigo Schramm基于窗口Hough变换的矩形检测。

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

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

Peaks

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

equation 3

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

另一答案

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

累加器映射到霍夫空间。要遍历累加器阵列,需要累加器将霍夫空间划分为离散网格。

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

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

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

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

    (x-a)^2 + (y-b)^2 = 
ho^2

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

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

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

另一答案

我不是数学家。我愿意经过纠正...... 从霍夫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。由此我得出结论,这些点位于极坐标空间中。

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

HoughLinesP(霍夫变换直线检测)

基于matlab程序hough变换检测圆源码

数字图像处理课程设计(基于matlab的Hough变换检测图像边缘提取,包含完整代码)

Python OpenCV 霍夫(Hough Transform)直线变换检测原理,图像处理第 33 篇博客

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

Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘