想象一下,我们有一个简单的2D绘图,用很多非重叠的圆圈填充它,只有几颗星。
如果我们要在所有这些圈子中找到所有明星,我可以想到很少的方法。蛮力就是其中之一。另一个可能是缩小图像大小(到仍然可以区分对象的最佳点),然后应用蛮力并映射到原始图像。蛮力的缺点当然是非常耗时的。我正在寻找更快的方法,可能是最快的方法。
在简单的2D图像上搜索指定项目的最快图像处理方法是什么?
答案 0 :(得分:5)
在图像中查找对象的一种典型方法是cross correlation。基本上,您要查找掩码(您尝试查找的对象)与图像之间的互相关性最高的位置。该位置是您尝试查找的对象的可能位置。
为了简单起见,我会将您尝试查找的对象称为星,但通常它可以是任何形状。
上述方法存在一些问题:
由于这些原因,您对问题的了解越多,它就越简单。这就是人们在评论中要求您提供更多信息的原因。据我所知,通用解决方案并不存在。也许更有知识的人可以纠正我。
正如您所提到的,缩小图像的大小将有助于减少进近的计算时间。在我看来,它不是解决方案的核心要素 - 它只是一个可选的优化步骤。
答案 1 :(得分:2)
如果形状很容易从背景segment,您可能能够计算区分形状/颜色描述符。根据您的问题,您可以选择对缩放,平移或旋转不变的描述符(例如compactness,如果它对每个形状都是唯一的)。不过,我不知道这会更快。
如果您已经知道确切的形状并了解尺寸,您可能需要查看Generalized Hough Transform,这基本上是对“强力算法”的形式化描述
答案 2 :(得分:1)
当你列出一个形状没有重叠的属性时,我假设一个有效的算法能够
你应该更好地描述问题
根据上述问题的答案,您可能会有更多或更简单的解决方案。
此外,也许这个article可能很有趣。
如果形状非常规则,将它们变成矢量可以很好地满足你的需求,但这可能是一种矫枉过正,真的取决于你以后想要做什么。
答案 3 :(得分:1)
步骤1:阈值处理 - 如果一般图像集允许,将图像缩小为1位(黑色或白色)。 [对于您引用的示例类型,我的猜测是阈值处理可以很好地工作 - 留下足够的细节来查找对象]。
步骤2:可选择进行一些平滑/去除噪音。
步骤3:使用一些聚类方法来收集前景对象。
步骤4:使用适当的启发式识别对象。
步骤1/2中的参数将在很大程度上取决于图像的类型以及实验/观察。如果你正确地计算出1/2,那么通常很简单。 4将在很大程度上取决于问题(例如,在您的情况下识别星星 - 这将取决于图像中预期的恒星的实际形状)。