2012-03-06 43 views
7

如何在文本图像上实现Hough transform?我正在寻找伪代码(最终这将在Java中)。如何实现Hough变换?

下面是一些背景信息:

给定一个图像,确定所述方程用于线路y = mx + b。通常,霍夫变换在极坐标中表示为Rho = y*sin(theta) + x*cos(theta)。 (我不太确定XY的值对应于图像)。

我们只对Rhotheta值感兴趣并绘制它们。累加器中有许多点的位置(我知道一些实现,而不是执行)被认为是一条线。

我不明白的问题是如何找到您要更新累加器的rhotheta

+0

让我知道如果答案是有用的! ;) – Matteo 2012-03-07 20:20:58

回答

5

霍夫变换的最简单情况是线性变换为 检测直线。在图像空间中,直线可以被 描述为y = mx + b中,并且可以以图形绘制图像点(X,Y)

因此,这告诉您的每对 什么xy对应回到图像中。

在Hough变换,一个主要的想法是考虑特性的直线还不如像点(X1,Y1),(X2,Y2),......的 ,但 相反,在条款的参数,例如斜率参数m和截距参数b。

基于此事实,直线y = mx + b可以表示为参数空间中的点(b,m)。 然而,人们面临的问题是,垂直线引起参数m和b的无界值产生 。出于计算原因,因此对于霍夫变换中的线,使用不同的一对参数(表示为 和θ)是更好的。

参数rho表示线和原点之间的距离,而θ表示从原点到此最近点的矢量的角度。

这告诉你什么rhotheta对应:他们在你想在你的形象来描述线的斜率和截距的极坐标表示。


SourceForge你可以找到一个C++执行霍夫变换。

从中应该能够解释我在以前的链接指出的代码中的描述可以是以下各项:

霍夫变换算法使用一个数组,称为蓄能器,以 检测线y = mx + b的存在。

例如,线性Hough变换问题有两个未知参数:m和b。

对于每个像素及其邻域,霍夫变换算法 确定在该像素处是否有足够的边缘证据。如果是 那么它会计算该行的参数,然后查找参数落入的累加器的bin,并增加该bin的值 。

通过找到具有最高值的垃圾箱,通常通过寻找在储存室 局部最大,最有可能的线可以 提取