[英]How to implement the Hough Transform?
如何在文本图像上实现Hough变换 ? 我正在寻找伪代码(最终将在java中)。
以下是一些背景信息:
给定图像,确定线y = mx + b
的等式。 通常,霍夫变换以极坐标表示,使得Rho = y*sin(theta) + x*cos(theta)
。 (我不确定X
和Y
值对应于图像)。
我们只对Rho
和theta
值感兴趣并绘制它们。 累加器中有多个点的位置(我知道一些实现,而不是执行)被认为是一条线。
我不明白的问题是如何找到你用更新累加器的rho
和theta
。
霍夫变换的最简单情况是用于检测直线的线性变换。 在图像空间中,直线可以描述为y = mx + b,并且可以对每对图像点(x,y)进行图形绘制
因此,这会告诉您x
和y
对应于图像中的背面。
在霍夫变换中,主要思想是将直线的特征视为图像点(x1,y1),(x2,y2)......,而是根据其参数,例如斜率参数m和截距参数b。
基于该事实,直线y = mx + b可以表示为参数空间中的点(b,m)。 然而,人们面临的问题是垂直线产生参数m和b的无界值。 出于计算原因,因此最好对霍夫变换中的线使用表示为(θ)的不同参数对。
参数rho表示线与原点之间的距离,而θ是从原点到该最近点的矢量角。
这告诉你rho
和theta
对应的是:它们是斜率的极坐标中的表示,以及你试图在图像中描述的线的截距。
在SourceForge上,您可以找到hough变换的C++
实现。
您应该能够解释我在上一个链接中指出的代码的描述可能如下:
霍夫变换算法使用称为累加器的数组来检测线y = mx + b的存在。
例如,线性Hough变换问题有两个未知参数:m和b。
对于每个像素及其邻域,霍夫变换算法确定在该像素处是否存在足够的边缘证据。 如果是这样,它将计算该行的参数,然后查找参数所属的累加器的bin,并增加该bin的值。
通过查找具有最高值的区间,通常通过在累加器空间中查找局部最大值,可以提取最可能的线条
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.