【发布时间】:2014-09-18 15:20:11
【问题描述】:
是否可以在 OpenCV 中执行级联霍夫变换?我知道它只是一个 HT,然后是另一个。我面临的问题是返回的值始终是 rho 和 theta,并且从不采用 y 截距形式。
是否可以将这些值转换回 y 截距并将它们拆分为子空间,以便检测消失点?
还是自己用 Python 编写一个 HT 的实现会更好?
【问题讨论】:
是否可以在 OpenCV 中执行级联霍夫变换?我知道它只是一个 HT,然后是另一个。我面临的问题是返回的值始终是 rho 和 theta,并且从不采用 y 截距形式。
是否可以将这些值转换回 y 截距并将它们拆分为子空间,以便检测消失点?
还是自己用 Python 编写一个 HT 的实现会更好?
【问题讨论】:
您可以尝试使用 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 然后甚至制作一个全新的图像并对其重新运行霍夫变换更有意义。
【讨论】:
我不认为 OpenCV 可以执行级联霍夫变换。您应该自己将它们转换为 xy 空间。本文可能会对您有所帮助:
http://aishack.in/tutorials/converting-lines-from-normal-to-slopeintercept-form/
【讨论】: