搜索图像上指定项目的最快方法?

时间:2010-12-02 13:29:34

标签: algorithm performance image image-processing theory

想象一下,我们有一个简单的2D绘图,用很多非重叠的圆圈填充它,只有几颗星。

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

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

4 个答案:

答案 0 :(得分:5)

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

为了简单起见,我会将您尝试查找的对象称为,但通常它可以是任何形状。

上述方法存在一些问题:

  • 面具的大小必须与星星的大小相匹配。如果你不知道星星的大小,那么你将不得不尝试不同大小的面具。 Image pyramids比迭代尝试不同大小的蒙版更有效,但仍然需要额外的努力。
  • 同样,面具和星星的方向必须匹配。否则,互相关将无效。

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

正如您所提到的,缩小图像的大小将有助于减少进近的计算时间。在我看来,它不是解决方案的核心要素 - 它只是一个可选的优化步骤。

答案 1 :(得分:2)

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

如果您已经知道确切的形状并了解尺寸,您可能需要查看Generalized Hough Transform,这基本上是对“强力算法”的形式化描述

答案 2 :(得分:1)

当你列出一个形状没有重叠的属性时,我假设一个有效的算法能够

  • 通过以某种方式扫描图像来剪切所有形状(我可以想象相对有效且简单的凸形图算法)
  • 当你留下切出来的形状你可以使用交叉关系misha提到

你应该更好地描述问题

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

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

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

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

答案 3 :(得分:1)

步骤1:阈值处理 - 如果一般图像集允许,将图像缩小为1位(黑色或白色)。 [对于您引用的示例类型,我的猜测是阈值处理可以很好地工作 - 留下足够的细节来查找对象]。

步骤2:可选择进行一些平滑/去除噪音。

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

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

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