坦率地说,我不太明白你的问题,但让我写下我对这类问题的评论。这不仅是 MatLab 的信号处理论坛,所以我不会讨论代码。我在 Mathematica 中进行的所有计算。
首先你对像素强度进行聚类,这意味着你对一维数组和空间相关性进行聚类没有意义,最好处理图像直方图。
首先让我绘制您的图像直方图。
如您所见,左侧尖峰对应于背景。这不是什么大问题,但最好从聚类问题中消除背景。
我使用各种过滤器为您的图像创建蒙版,
并检查面罩是否正确。
让我们绘制没有背景的图像直方图(请注意,我绘制的是平滑直方图)。
现在您可以开始对直方图进行聚类了。例如,如果您事先知道聚类的数量,则可以进行 Kmean 聚类。Kmean 只是从集群中找到数据变化的局部最小值。您可能有许多局部最小值,并且您必须改变初始条件才能找到全局最小值。
让我给你一个简单的例子。
让我们考虑 4 个高斯分布的混合
其中平均值为 {10, 15, 25, 35},标准差为 {1, 1, 1, 1},幅度为 {1/4, 1/4, 1/4, 1/4}。您可以将两个集群上的混合聚类问题写成两个变量函数的最小化问题(因为您通过分析知道分布)。您可以绘制此函数
其中 x 变量对应于第一类和第二类之间的边界,而 y 变量对应于第二类和第三类之间的边界。
正如您在图中看到的那样,有两个最小值,其中右上角的最小值是全局最小值。让我们在混合物 PDF 上绘制这些最小值
其中红线表示全局最小值,绿线表示局部最小值。即使对于这样一个简单的问题,Kmean 也可能会收敛到局部解,您应该尽最大努力确保该方法收敛于全局解。
如果您有 1D 数据,则可以通过简单的蛮力来找到全局最小值。您可以在所有可能的类上拆分直方图,计算变化并找到全局解决方案。我拿了你的直方图并强力地将它分成三个类。请在下面找到结果
最佳组合在哪里
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {11, 12, 13, 14, 15, 16, 17}, {18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45}}
直方图是
强度= {0,0.0204082,0.0408163,0.0612245,0.0816327,0.102041,0.122449,0.142857,0.163265,0.183673,0.204082,0.22449,0.244898,0.265306,0.285714,0.306122,0.326531,0.346939,0.367347,0.387755,0.408163,0.428571,0.44898, 0.469388,0.489796,0.510204,0.530612,0.55102,0.571429,0.591837,0.612245,0.632653,0.653061,0.673469,0.693878,0.714286,0.734694,0.755102,0.77551,0.795918,0.836735,0.857143,0.897959,0.938776,0.959184}
仓= {0.00766421,0.0344291,0.0280162,0.0230938,0.0201404,0.0210605,0.0252008,0.0263049,0.0271238,0.0306568,0.0330398,0.0265901,0.0287339,0.0391123,0.0618841,0.0936635,0.091078,0.0935254,0.120474,0.0829354,0.0292859,0.0114089,0.00848308,0.00669813 ,0.00557564,0.0050144,0.00423234,0.00348708,0.00262221,0.00204256,0.00185855,0.0012237,0.000901672,0.000726858,0.000634851,0.000414033,0.000266821,0.000184015,0.0000736059,0.0000828066,9.20073 * 10 ^ -6,9.20073 * 10 ^ -6,9.20073 * 10 ^-6, 9.20073*10^-6, 0.0000184015}
如果你不知道类的数量,你可以使用可以检测到它的聚类(DBSCAN、Mean shift、分层聚类、变分高斯混合算法、谱聚类算法等等)。对于您的数据,最好看的结果给出了变分高斯混合算法,至少它给出了 3 个集群。其他方法给出超过 10 个或少于 2 个簇。请在下面找到使用变分高斯混合算法进行聚类的结果。
在我看来,结果仍然不够好。如果您的直方图是高度重叠分布的混合,则这种类型的聚类可能会失败。在这种情况下,缩放平面中的直方图聚类可能会有所帮助。我使用了 论文中的想法,并进行了修改。该想法的基本原理告诉您获取直方图,将其与高斯核进行卷积,增加尺度参数(标准偏差)并跟踪直方图的所有局部最小值(函数的局部最小值)。然后,您可能会发现某些最小值比其他最小值存活时间更长,并且幸存者最小值是集群边界。您可以找到根据直方图卷积中的比例参数显示最小值位置的图
然后,使用 Kmean 聚类,您可以将长线与短线分开(您可以在论文中找到详细信息)。分离给出
最后它表明存在三个最小值,其中正确的最小值看起来像边界伪影。这些最低限度是您班级的界限。请找出边界的情节
这看起来相当不错。请注意我稍微修改了论文中的方法,如果您需要更多详细信息,现在就告诉我。