【问题标题】:Binary Image, Concentrations of White Dots with OpenCV二进制图像,使用 OpenCV 的白点浓度
【发布时间】:2015-03-03 23:40:44
【问题描述】:

给定黑色的二进制图像,带有一些零星的白点,我正在寻找一种方法来“套索”边界矩形内的大多数白点。考虑这张图片:

看到不是所有点都被包围了,而是只包含明显比其他任何地方都多的白点的簇(或簇集)?

我已经知道如何使用 OpenCV put a bounding box around all of the white dots。谁能指导我如何分析此图像以找出一大堆点,忽略不属于组的任何外围点?

注意:此边界框不必倾斜。即使是凸包也可以作为输出。

我可以调整这些点的大小、颜色、alpha、位置、密度等。因此,如果您的想法涉及对这些点做某事以处理它们,那可能会奏效。

【问题讨论】:

  • I understand that phrase is hard to quantify。在您弄清楚如何量化之前,我们甚至都不知道您想要什么。例如,您在矩形的上边缘遗漏了一个点。怎么会?为什么你画的矩形更好,包括这个点?同样,在矩形的左边缘附近有一个相当孤独的点(定性地说)。为什么你画的矩形比排除那个点的小矩形更好?一旦你可以量化这一点,这个过程应该会为你推荐一个算法。
  • @SchighSchagh 也许最好忽略它。如果这样的建议有诸如可调整的密度常数之类的东西,那么我可以用它来量化一个“集群”。
  • 白点明显比其他任何地方都多?”哦,rly?你怎么知道=)。实施“常识”并不容易,而且往往非常主观。例如,我会排除顶部的点并包括左侧的点,我认为这会增加框内的密度。
  • 即使没有这个短语,你仍然需要一些方法来量化它。我不知道你用什么来为你画的盒子创建这个指标,那么计算机怎么能希望呢?如果您说“将彼此相距 x 像素内的所有点作为一个组包括在内”,这将为您提供一个允许您构建它的指标。回答这个问题,你应该能够解决你的问题。 tl;博士:luk32 写的
  • @Olivier 好吧,说了这么多,我认为这是一个很好且有趣的问题,尽管没有关注真正的问题,即找到点簇的好方法是什么。我认为在分类问题领域有一些算法。这真的很重要。您可以查看一些资源:en.wikipedia.org/wiki/Cluster_analysis。顺便提一句。一句好话:“根据 Vladimir Estivill-Castro 的说法,“集群”的概念无法准确定义,这也是为什么有这么多集群算法的原因之一”。

标签: c++ opencv image-processing


【解决方案1】:

您需要的是一种 1-cluster 检测算法,其中异常值检测很重要。聚类算法通常被设计和调整以产生多个聚类;其中一部分(例如 k-means)甚至不处理异常值。如果您决定使用真正的聚类算法,请尝试DBSCAN 并将其设置为检测 1 个聚类 - 它具有异常值检测能力。

否则,您可以将您的问题视为度量最大化问题。

您需要一个指标,该指标因数据密度而得到奖励,但也因盒子大小而得到奖励(因此您最终不会得到一个 1x1 的盒子)。我提出以下建议:

metric_to_maximize = White_Dot_Density * Area^x,其中x 是专门校准的。

另一个可行的方法是将图像划分为 m x n 个矩形矩形。计算每个盒子的平均密度。选择顶部的 x%(或所有具有 density>threshold 的矩形)。在这些“好框”周围创建一个边界框,而不包括太多额外区域。

【讨论】:

  • 哇!有趣的是,当我推出自己的解决方案时,我使用了你的第二个想法,直到现在都没有注意到你的建议。
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2012-03-10
  • 2011-02-02
相关资源
最近更新 更多