【问题标题】:OpenCV: parabola detection using Hough TransformOpenCV:使用霍夫变换进行抛物线检测
【发布时间】:2011-07-14 03:49:33
【问题描述】:

我想检测图像中的抛物线类型:y^2 = 4a*x [大小:512 X 512]。我准备了一个累加器数组 acc[size: 512 X 512 X 512]。我准备了一个与该图像相对应的 MATRIX。我使用了霍夫变换。我就是这样做的:

for x = 1 to 512
  for y= 1 to 512
   if image_matrix(x,y)> 245//almost white value, so probable to be in parabola
   {
     for x1= 1 to 512
       for y1= 1 to 512
       {
           calculate 'a' from (y-y1)^2 = 4*a*(x-x1).
           increment acc(i,j,k) by 1
       }
   }

if acc(i,j,k) has a maximum value.
{
   x1=i, y1=j,a =k
}

我遇到了以下问题:

1) acc[512][512][512] 占用大量内存。它需要大量计算。如何减小数组大小从而最小化计算? 2) acc(i,j,k) 的最大值并不总是给出预期的输出。有时第二个或第三个最大值,甚至第 10 个最大值给出预期的输出。我需要大约。 'a'、'x1'、'y1' 的值(不是精确值)。​​

请帮助我。我的概念有问题吗?

【问题讨论】:

  • 你可以发布一个图片示例的链接

标签: image opencv hough-transform


【解决方案1】:

我要说的可能只能部分回答你的问题,但应该可以。

如果你想找到这些类型的抛物线

 y^2 = 4a*x

然后它们仅由一个参数“a”进行参数化。因此,我真的不明白您为什么使用 3 维的累加器。

当然,如果您想找到具有更一般方程的抛物线,例如:

y = ax^2 + bx + c

或者通过将 x 替换为 y 在 y 方向上,您将需要一个 3 维累加器,就像您的示例一样。

我认为在你的情况下问题可以很容易地解决,说你只需要一个累加器(因为你只有一个参数可以累加:a)

这就是我的建议:

  for every point (x,y) of your image (x=0 exclusive) {
      calculate (a = y^2 / 4x ) 
      add + 1 in the corresponding 'a' cell of your accumulator 
      (eg: a = index of a simple table)
  }

  for all the cells of your accumulator {
      if (cell[idx] > a certain threshold) there is a certain parabola with a = idx
  }

希望对你有帮助 This is as well an interesting thing to look at : 朱利安,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2013-03-09
    • 2012-09-16
    相关资源
    最近更新 更多