【发布时间】:2021-12-31 09:34:44
【问题描述】:
试图在图像中找到“簇”/“圆”/“椭圆”等的中心点。
示例图片:
很明显,有 3 个集群。我正在寻找集群的中心点,以及定义 - 矩形、圆(带半径)或椭圆,但是要描述它。
理想情况下,扩展为以下几种情况:
- 如果需要,为简单起见,集群数量未知(假设最少 1 个,最多 10 个)。
这张图片是一张较大图片的一部分,该图片利用精明的边缘检测、阈值处理和轮廓来找到我感兴趣的区域。不幸的是,我需要它......更精致(或更好的参数,但我找不到任何有用的东西)
我尝试过的事情:
我尝试过使用 kmeans 分割,但它们主要用于颜色分割。对于颜色给我们的所有信息,此图像可能是黑白的。 opencv 中的 HughCircles 并不是我真正想要的圆圈,因为它们给了我太多匹配“边缘”的圆圈 通过 opencv 进行模板匹配也不起作用,因为它太受限制,而且这些不能完全匹配。
欢迎提出任何建议/检查途径!
我还尝试了一些基本的散点图 k-means 聚类(好像这是数据),但到目前为止还没有得到好的结果。
选择的语言:python,但适应性强。
【问题讨论】:
-
我可能会在图像的二进制副本上尝试一些dilations followed by erosions 来填充这些簇的孔并使其彼此分开。然后我会运行blob detector
-
请注意,您需要在膨胀/腐蚀之前进行反转,因为 OpenCV 需要黑色背景和白色对象/前景。
-
您需要定义一些领域知识。你可以很容易地说这整个事情只是一个单一的集群或许多非常小的集群。只是观点问题。我将从阈值和距离变换开始,然后尝试找到集群中元素的平均距离(这里的领域知识可以帮助简化或跳过该步骤)。然后找到离下一个掩码像素更远的点,并找到“大”(再次是领域知识)这些区域,并将它们视为可能是集群之间的分隔符。但我没有尝试过,所以可能效果很好。
-
你说你用过 Canny。这是一个危险信号。呈现数据之前 Canny。
标签: python opencv image-processing