【问题标题】:How to implement the Hough Transform?如何实现霍夫变换?
【发布时间】:2012-03-24 11:16:20
【问题描述】:

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

这里是一些背景信息:

给定图像,确定直线y = mx + b 的方程。通常,霍夫变换以极坐标表示,例如Rho = y*sin(theta) + x*cos(theta)。 (我不太确定 XY 值对应于图像)。

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

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

【问题讨论】:

  • 如果回答有用,请告诉我! ;)

标签: java image image-processing signals transform


【解决方案1】:

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

所以这会告诉您xy 对应于图像中的背面。

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

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

参数 rho 表示直线与直线之间的距离 原点,而 theta 是从原点到这个向量的角度 最近的点。

这告诉您 rhotheta 对应于什么:它们是您试图在图像中描述的直线的斜率和截距的极坐标表示。


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

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

霍夫变换算法使用一个称为累加器的数组来 检测是否存在一条线 y = mx + b。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    相关资源
    最近更新 更多