【问题标题】:Cascaded Hough Transform in OpenCVOpenCV中的级联霍夫变换
【发布时间】:2014-09-18 15:20:11
【问题描述】:

是否可以在 OpenCV 中执行级联霍夫变换?我知道它只是一个 HT,然后是另一个。我面临的问题是返回的值始终是 rho 和 theta,并且从不采用 y 截距形式。

是否可以将这些值转换回 y 截距并将它们拆分为子空间,以便检测消失点?

还是自己用 Python 编写一个 HT 的实现会更好?

【问题讨论】:

    标签: image-processing opencv


    【解决方案1】:

    您可以尝试使用 m 和 c 参数填充 Hough 域,这样 y = mx + c 可以重写为 c = y - mx 所以而不是通常的 rho = x cos(theta) + y sin(theta),你有 c = y - mx

    通常,您会遍历 thetas 并计算 rho,然后增加该对 rho 和 theta 的累加器值。在这里,您将遍历 m 的值并计算 c 的值,然后将 m,c 元素累加到累加器中。得票最多的 bin 是正确的 m,c

    // going through the image looking for edge pixels
    for (i = 0;i<numrows;i++)
        {
            for (j = 0;j<numcols;j++)
            {
                if (img[i*numcols + j] > 1)
                {
                    for (n = first_m;n<last_m;n++)
                    {   
                        index = i - n * j;
                        accum[n][index]++;
                    }
                }
            }
        }
    

    我想这变得无效的地方在于,很难定义通过 m 的步长,因为从技术上讲,它们应该从 -infinity 变为 infinity,所以你会遇到麻烦。是的,就 m,c 而言,霍夫变换如此之多。哈哈

    我想你可以走另一条路,隔离 m,所以它会是 m = (y-c)/x,所以现在,你循环通过一堆有意义的 y 值,虽然它仍然很难管理,但它更易于管理定义您的累加器矩阵,因为 m 仍然没有限制。我想你可以限制你有兴趣寻找的 m 的值。

    是的,使用 rho 和 theta 并将它们转换为 y = mx + c 然后甚至制作一个全新的图像并对其重新运行霍夫变换更有意义。

    【讨论】:

      【解决方案2】:

      我不认为 OpenCV 可以执行级联霍夫变换。您应该自己将它们转换为 xy 空间。本文可能会对您有所帮助:

      http://aishack.in/tutorials/converting-lines-from-normal-to-slopeintercept-form/

      【讨论】:

      • 谢谢。但我认为我需要直接以 y-intercept 形式解决 HT 而不是转换。你知道像 Cascaded Hough Transform 那样将霍夫空间分成 3 个子空间是什么意思吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      相关资源
      最近更新 更多