我是新手,只想为 RGB 图像实现分层凝聚聚类。为此,我从图像中提取所有 RGB 值。然后我处理图像。接下来我找到它的距离,然后开发联动。现在,我想从链接中提取具有索引 id 的指定索引上的原始数据(即 RGB 值)。这是我到目前为止所做的代码。
image = Image.open('image.jpg')
image = image.convert('RGB')
im = np.array(image).reshape((-1,3))
rgb = list(im.getdata())
X = pdist(im)
Y = linkage(X)
I = inconsistent(Y)
基于第 4 列的一致性。我选择截止值的最小值以获得最大集群。
cutoff = 0.7
cluster_assignments = fclusterdata(Y, cutoff)
# Print the indices of the data points in each cluster.
num_clusters = cluster_assignments.max()
print "%d clusters" % num_clusters
indices = cluster_indices(cluster_assignments)
ind = np.array(enumerate(rgb))
for k, ind in enumerate(indices):
print "cluster", k + 1, "is", ind
dendrogram(Y)
我得到了这样的结果
cluster 6 is [ 6 11]
cluster 7 is [ 9 12]
cluster 8 is [15]
意味着集群 6 包含 6 和 11 个叶子的索引。现在在这一点上,我坚持如何映射这些索引以获取原始数据(即 rgb 值)。图像中每个像素的每个 rgb 值的索引。然后我必须生成码本来实现聚集聚类。我不知道如何处理这项任务。读了很多东西,但没有任何线索。