二值图像,使用 OpenCV 的白点浓度

Binary Image, Concentrations of White Dots with OpenCV

给定一个黑色的二值图像,带有一些零星的白点,我正在寻找一种方法来 "lasso" 边界矩形内的大部分白点。考虑这张图片:

看看为什么没有 所有 个点都被包围起来,而只包含白点明显多于其他任何地方的簇(或一组簇)?

我已经知道如何 put a bounding box around all of the white dots 使用 OpenCV。任何人都可以指导我如何分析此图像的 大量集中的点 ,而忽略任何不属于一组的外围点?

N.B.: 这个边界框不必倾斜。即使是凸包也可以作为输出。

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

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

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

您想要一个既能因数据密度而受到奖励,又能因框大小而受到奖励的指标(因此您最终不会得到 1x1 框)。我提出以下建议:

metric_to_maximize = White_Dot_Density * Area^x,其中 x 是临时校准的。

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