2010-12-02 37 views
3

想象一下,我们有一个简单的2D绘图,填充了大量不重叠的圆圈和只有几颗星星。在图像上搜索指定项目的最快方法?

如果我们要找到所有这些圈子中的所有星星,我可以想到很少的方法。蛮力是其中之一。另一个可能会减小图像大小(到仍然可以区分对象的最佳点),然后应用强力和映射到原始图像。蛮力的缺点当然是非常耗时。我正在寻找更快的方法,可能是最快的方法。

在简单的2D图像上搜索指定项目的最快图像处理方法是什么?

+1

星星都一样吗?他们只是翻译不同?或者也旋转地? – lijie 2010-12-02 13:33:35

回答

5

在图像中查找对象的一种典型方法是通过cross correlation。基本上,您可以查找掩码(您尝试查找的对象)与图像之间的交叉关联性最高的位置。该位置是您尝试查找的对象的可能位置。

为了简单起见,我会参考您尝试寻找的对象明星,但通常它可以是任何形状。

一些问题,上述办法:

  • 面具的大小必须匹配恒星的大小。如果你不知道明星的大小,那么你将不得不尝试不同大小的面具。 Image pyramids比反复尝试不同大小的蒙版更有效,但仍需要额外的努力。
  • 同样,面具和星星的方向必须匹配。如果他们不这样做,互相关将不起作用。

由于这些原因,对问题了解得越多,问题就越简单。这就是为什么人们要求您在评论中提供更多信息的原因。 A 通用解决方案并不存在,据我所知。也许更有知识的人可以在这方面纠正我。

如上所述,缩小图像的大小将有助于缩短您的方法的计算时间。在我看来,它几乎不是解决方案的核心元素 - 它只是一个可选的优化步骤。

2

如果背景中的形状很容易到segment,则可能可以计算出区分形状/颜色描述符。根据您的问题,您可以选择不变的缩放,平移或旋转描述符(例如compactness,如果它对每个形状都是唯一的)。不过,我不知道这是否会更快。

如果你已经知道确切的形状,并有大小约一个想法,你可能想看看Generalized Hough Transform,这基本上是你的“蛮力算法”

1

当你列出的形式化描述该形状并不那么重叠的属性我假定一个有效的算法将能够

  • 通过以某种方式扫描图像(I可以想像为凸形状相对高效和简单的算法)
  • 切出的所有形状
  • 当你离开时c UT斯达康出来的形状,你可以使用交叉关系米莎提到

你应该说明问题更好一点

  • 可以在形状旋转或缩放(或其他一些改变?)
  • 是背景均匀颜色
  • 是形状均匀的颜色
  • 是形状填充

根据上述问题的答案,您可能会有更少或更简单的解决方案。

此外,也许这article可能会有趣。

如果形状非常规则,将它们转换为矢量可以很好地满足您的需求,但这可能是一个矫枉过正的问题,真的取决于您以后想要做什么。

1

步骤1:阈值 - 如果通用图像集允许,则将图像缩小为1位(黑色或白色)。 [对于你引用的例子类型,我的猜测是阈值将很好地工作 - 留下足够的细节来找到对象]。

第2步:可选择做一些平滑/噪音消除。

第3步:使用一些聚类方法来收集前景对象。

第4步:使用适当的启发式来识别对象。

步骤1/2中的参数将取决于图像的类型以及实验/观察。 3如果你正确地计算了1/2,通常很简单。 4将很大程度上取决于问题(例如,在您的情况下,识别星星 - 这取决于图像中预期星星的实际形状)。

相关问题