我有一个矩形平面网格,每个单元格分配了一些整数权重。我正在寻找一种算法来识别具有高于平均重量的3到6个相邻细胞的簇。这些斑点应该具有近似圆形的形状。
对于我的情况,不包含聚类的细胞的平均重量约为6,而含有聚类的细胞的平均重量约为6 + 4,即在6附近有一个“背景重量”。权重随波动而变化。泊松统计。
对于小背景贪婪或种子算法表现相当不错,但如果我的聚类单元的权重接近背景中的波动,即使没有任何东西,它们将倾向于找到聚类。此外,我无法通过所有可能的设置进行暴力搜索循环,因为我的网格很大(类似于1000x1000),我打算经常这样做(10 ^ 9次)。我的印象是,在图论中可能存在解决这个问题的方法。我听说过顶点封面和派系,但是不知道如何最好地将我的问题翻译成他们的语言。我知道图论可能会对输入的统计性质产生问题,但我很有兴趣看到哪些算法可以找到,即使它们无法识别每个簇。
这里是一个示例剪辑:框架区域每个单元平均有10个条目,所有其他单元格平均有6个。当然,网格进一步扩展。
| 8| 8| 2| 8| 2| 3|
| 6| 4| 3| 6| 4| 4|
===========
| 8| 3||13| 7| 11|| 7|
|10| 4||10| 12| 3|| 2|
| 5| 6||11| 6| 8||12|
===========
| 9| 4| 0| 2| 8| 7|
答案 0 :(得分:1)
对于图论解决方案,有几句in wikipedia,但您可能最好在MathOverflow上发布。 This question也可能有用。
用于解决这些问题的计算中的传统方法(可能最好考虑其无处不在)是栅格分析 - 在GIS和遥感世界中众所周知,因此有许多工具可以提供实现。用于查找最适合您的问题的关键字将是栅格,最近邻,重采样和聚类。 GDAL库通常是其他工具的基础。
E.g。 http://clusterville.org/spatialtools/index.html
您可以尝试检查GDAL库和源代码,看看您是否可以在您的情况下使用它,或者查看它是如何实现的。
要检查圆形形状,您可以将剩余值转换为多边形并检查结果特征
答案 1 :(得分:0)
我不确定我是否看到了图论的类比,但你可以通过预先计算一个区域积分来加快速度。这感觉就像一个多尺度的东西。
A [i,j] = Sum [Sum [p [u,v],{u,0,i}, {v,0,j}]];
然后矩形(a,b),(c,d)区域的平均亮度为
(A [c,d] - (A [c,b] + A [a,d])+ A [a,b])/((c-a)(d-b))
如果您的单元格中有大数字,溢出可能不是您的朋友。
答案 2 :(得分:0)
使用union-find算法进行聚类?它非常快。
我猜这个图是由于考虑了每对相邻的高值单元而产生的。使用union-find算法查找所有聚类,并接受所有超过一定大小的聚类,也许还有形状约束(例如,基于聚类中心与聚类大小的平均平方距离)。联合查找算法的一个微不足道的变化是收集你需要的统计数据(计数,x的和,x的总和,y的总和,y ^ 2的总和)。
答案 3 :(得分:0)
如果您只是想找到一种方法将问题转化为图形问题,那么您可以做些什么。
从每个点看你所有的邻居(这可能是8个相邻的正方形或4个相邻的正方形取决于你想要的东西)。查找具有最大值的邻居,如果它大于您,则将自己连接到此正方形。如果它小,那么什么都不做。
在此之后你会有一个森林或可能是一棵树(虽然我想这不太可能)。这是将矩阵转换为图形的一种可能方式。我不确定它是否是最有用的翻译。