如何实施霍夫变换 http://en.wikipedia.org/wiki/Hough_transform在文本图像上?我正在寻找伪代码(最终这将在java中)。
以下是一些背景信息:
给定图像,确定直线的方程y = mx + b
。通常,霍夫变换以极坐标表示,使得Rho = y*sin(theta) + x*cos(theta)
。 (我不太确定是什么X
and Y
值对应于返回图像)。
我们只对Rho
and theta
值并绘制它们。累加器中具有许多点的位置(我知道一些实现,而不是执行)被视为一条线。
我不明白的问题是如何找到rho
and theta
您将用它来更新累加器。
霍夫变换最简单的情况是线性变换
检测直线。在图像空间中,直线可以表示为
描述为 y = mx + b 并且可以为每对绘制图形
图像点 (x, y)
所以这告诉你什么x
and y
对应于图像中的背面。
在霍夫变换中,一个主要思想是考虑特征
直线的不是图像点 (x1, y1), (x2, y2), ...,而是
相反,就其参数而言,例如斜率参数 m 和
截距参数 B.
基于这一事实,直线 y =
mx + b 可以表示为参数空间中的点(b, m)。
然而,人们面临着垂直线引起的问题
参数 m 和 b 的无界值。出于计算原因,
因此,最好使用一对不同的参数,表示为
和 (theta),用于霍夫变换中的线。
参数 rho 表示直线与直线之间的距离
原点,而 theta 是从原点到此向量的角度
最近点。
这告诉你什么rho
and theta
对应于:它们是您试图在图像中描述的线的斜率和截距的极坐标表示。
On 来源锻造 http://cimg.cvs.sourceforge.net/cimg/CImg/examples/hough_transform.cpp?view=markup你可以找到一个C++
霍夫变换的实现。
您应该能够解释我在上一个链接中指出的代码的描述可能如下:
霍夫变换算法使用一个称为累加器的数组来
检测直线 y = mx + b 的存在。
例如,线性霍夫变换问题有两个未知数
参数:m 和 b。
对于每个像素及其邻域,霍夫变换算法
确定该像素处是否有足够的边缘证据。如果
所以,它会计算该行的参数,然后寻找
参数落入的累加器的 bin,并增加
该垃圾箱的价值。
通过查找具有最高值的箱,通常通过寻找
累加器空间中的局部最大值,最可能的线可以是
提取的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)