如何实现Hough变换?

时间:2012-03-06 22:18:10

标签: java image image-processing signals transform

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

以下是一些背景信息:

给定图像,确定线y = mx + b的等式。通常,霍夫变换以极坐标表示,使得Rho = y*sin(theta) + x*cos(theta)。 (我不确定XY值对应的图像是什么。

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

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

1 个答案:

答案 0 :(得分:5)

  

Hough变换最简单的情况是线性变换   检测直线。在图像空间中,直线可以是   描述为y = mx + b,并且可以对每对进行图形绘制   图像点(x,y)

因此,这会告诉您xy在图片中对应的内容。

  

在霍夫变换中,主要思想是考虑特征   直线不是图像点(x1,y1),(x2,y2),...,但是   相反,就其参数而言,例如斜率参数m和   拦截参数b。

     

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

     

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

这会告诉您rhotheta对应的内容:它们是斜率的极坐标中的表示,以及您尝试在图像中描述的线的截距。


SourceForge上,您可以找到hough变换的C++实现。

您应该能够解释我在上一个链接中指出的代码的描述可能如下:

  

Hough变换算法使用一个称为累加器的数组   检测线的存在y = mx + b。

     

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

     

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

     

通过寻找具有最高值的箱子,通常通过寻找   累加器空间中的局部最大值,最可能的行可以   提取