给定一个黑色的二进制图像,带有一些零星的白点,我正在寻找一种方法,以及#34; lasso"边界矩形内的大多数白点。考虑这张图片:
看看所有的点是如何被包围的,只是那些明显比其他地方有更多白点的聚类(或聚类集合)?
我已经知道如何使用OpenCV put a bounding box around all of the white dots。任何人都可以指导我如何分析这个图像一个大点的点,忽略任何不属于一个群体的外围点?
N.B。:此边界框不必倾斜。即使是凸包也很好。作为输出。
我可以调整这些点的大小,颜色,alpha,位置,密度等。因此,如果您的想法涉及使用这些点来处理它们,那可能会有效。
答案 0 :(得分:2)
您需要的是一种1-cluster检测算法,其中异常检测很重要。通常设计和调整聚类算法以产生多个聚类;其中一部分(例如k-means)甚至不处理异常值。如果您决定使用真正的聚类算法,请尝试DBSCAN并将其设置为检测1个群集 - 它具有异常检测能力。
否则,您可以将问题视为指标最大化问题。
您需要一个针对数据密度奖励的指标,但也需要奖励框大小(因此您最终不会得到1x1框)。我提出了类似的建议:
metric_to_maximize = White_Dot_Density * Area^x
,其中x
是专门校准的。
可能有用的另一个想法是将图像分成m×n个框矩形。计算每个盒子的平均密度。选择顶部x%(或具有density>threshold
的所有矩形)。在这些“好盒子”周围创建一个边界框,而不包括太多的额外区域。