二进制图像,OpenCV白点浓度

时间:2015-03-03 23:40:45

标签: c++ opencv image-processing

给定一个黑色的二进制图像,带有一些零星的白点,我正在寻找一种方法,以及#34; lasso"边界矩形内的大多数白点。考虑这张图片:

enter image description here

看看所有的点是如何被包围的,只是那些明显比其他地方有更多白点的聚类(或聚类集合)?

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

N.B。:此边界框不必倾斜。即使是凸包也很好。作为输出。

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

1 个答案:

答案 0 :(得分:2)

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

否则,您可以将问题视为指标最大化问题。

您需要一个针对数据密度奖励的指标,但也需要奖励框大小(因此您最终不会得到1x1框)。我提出了类似的建议:

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

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