如何在文本图像上实现Hough transform?我正在寻找伪代码(最终将在java中)。
以下是一些背景信息:
给定图像,确定线y = mx + b
的等式。通常,霍夫变换以极坐标表示,使得Rho = y*sin(theta) + x*cos(theta)
。 (我不确定X
和Y
值对应的图像是什么。
我们只对Rho
和theta
值感兴趣并绘制它们。累加器中有多个点的位置(我知道一些实现,而不是执行)被认为是一条线。
我不明白的问题是如何找到您要更新累加器的rho
和theta
。
答案 0 :(得分:5)
Hough变换最简单的情况是线性变换 检测直线。在图像空间中,直线可以是 描述为y = mx + b,并且可以对每对进行图形绘制 图像点(x,y)
因此,这会告诉您x
和y
在图片中对应的内容。
在霍夫变换中,主要思想是考虑特征 直线不是图像点(x1,y1),(x2,y2),...,但是 相反,就其参数而言,例如斜率参数m和 拦截参数b。
基于这个事实,直线y = mx + b可以表示为参数空间中的点(b,m)。 然而,人们面临垂直线产生的问题 参数m和b的无界值。出于计算原因, 因此,最好使用一对不同的参数,表示 和(theta),用于霍夫变换中的线。
参数rho表示线与线之间的距离 原点,而theta是从原点到此的矢量角 最近点。
这会告诉您rho
和theta
对应的内容:它们是斜率的极坐标中的表示,以及您尝试在图像中描述的线的截距。
在SourceForge上,您可以找到hough变换的C++
实现。
您应该能够解释我在上一个链接中指出的代码的描述可能如下:
Hough变换算法使用一个称为累加器的数组 检测线的存在y = mx + b。
例如,线性Hough变换问题有两个未知数 参数:m和b。
对于每个像素及其邻域,Hough变换算法 确定该像素是否有足够的边缘证据。如果 所以,它会计算该行的参数,然后查找 参数落入的累加器箱,并增加 那个箱子的价值。
通过寻找具有最高值的箱子,通常通过寻找 累加器空间中的局部最大值,最可能的行可以 提取