我考虑2D(10x10)矩阵的情况,该矩阵当前填充有零(在某种意义上是非活动网格)。在某些时候,某些矩阵元素将变为活动状态(因此,将赋予值1)。
发生这种情况的方式是在将要激活的矩阵上传递(X,Y)坐标列表。顺序或先出现哪些元素是未知的。在矩阵上变为活动状态的区域可以与矩阵中的一个元素(1x1)一样大,或者网格(群集)的某些部分以特定模式变为活动状态,如本例所示:
首先,我可以将活跃的相邻元素捆绑在一起,并获得有关该“集群”的一些信息:集群中活跃元素的数量以及行和列的宽度。例如,右上方的群集具有3个活动元素,行宽为2,列宽为2。
我的目标是使这些聚类与预定义形状匹配,并通过其ID进行标识:
具有每个集群的活动元素的数量,可以将类别进行第一次粗划分:
使用第二种类型的信息(行,活动元素簇的列宽),可以再次拆分每个类别。以类别中包含三个活动元素的类别进行分类:
对于四个集群也可以这样做。
按照这种逻辑,我可以解决我的问题并将一些聚类分配给它们的正确形状。我的问题现在出现在信息(关于有效元素的数量,它们的行和列宽度)不足的形状上。
一个例子是图1的右上和右下集群。在这里,两个元素均处于活动状态,列和行的宽度= 2。
如何再次将其分开并分配正确的形状?
[也许尝试“标准化”您的集群坐标-也就是说,给定一个集群(集群的表示形式)中坐标的列表C = [(i1,j1)...(ik,jk)],让(i *,j *)是列表中按字典顺序排列的第一个点(即最左下角的点)。从所有聚类坐标中减去i *和j *,对坐标进行排序,然后对排序后的坐标进行哈希处理。您可以确保唯一的簇形状具有唯一的哈希,而具有相同形状的簇现在具有不同的哈希。无需分配特定的集群ID即可完成此操作,但是可以通过查看哈希表的键集轻松恢复它们。希望这会有所帮助。