我正在尝试使用基于Hough transform的this paper实现矩形检测。
我使用Matlab编程,但在检测到平行线对和正交对之后,我必须检测这些对的交集。我的问题是关于霍夫空间中两线交叉口的质量。
我通过求解四个方程系统找到了交点。这些交叉点是否位于笛卡尔坐标或极坐标空间中?
霍夫空间的准确性应取决于两个主要因素。
累加器映射到霍夫空间。要遍历累加器阵列,需要累加器将霍夫空间划分为离散网格。
线性霍夫空间中准确度的第二个因素是原始图像中原点的位置。如果您对\ rho中的任何给定更改扫描\ theta,请查看会发生什么。在原点附近,这些扫描中的一个将覆盖比在图像边缘附近扫出的像素少得多的像素。这导致在图像边缘附近需要更高的\ rho \ theta分辨率,以便在转换回笛卡尔时获得相同的精度。
当然,增加分辨率的问题是你需要更多的计算能力和内存来增加它。此外,如果您统一增加累加器分辨率,则会在不需要的原点附近浪费分辨率。
一些想法来帮助解决这个问题。
(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
引用纸张的链接不起作用,但如果使用标准霍夫变换,则四个交点将以笛卡尔坐标表示。事实上,使用“正常参数化”表示使用霍夫变换检测到的四条线:
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。由此我得出结论,这些点位于极坐标空间中。