Skip to main content
 首页 » 编程设计

python之筛选特征的 Kmeans 聚类

2025年05月04日8zengkefu

注意:这是我的第一个 stackexchange 问题。如果我提出问题的方式不符合预期,我很抱歉。所以,这是我的疑问。

我有大约 3000 张图像的数据集。我对所有这些图像执行了筛选(尺度不变特征变换)(使用 David Lowe 的筛选演示)并获得了图像各自的 (3000) 个关键点特征。现在我必须对 3000 张图像的关键点特征执行 k 均值聚类。每个图像都有自己的关键点(从图像到图像的变化)并且它们位于 128 维矩阵中。现在我要执行 k-means,这 3000 个 sift 向量必须放在一起,并且应该训练它们从中获得一个 k-means 模型。

例如:

图像在筛选之前被转换为 .pgm 格式,这是执行筛选后其中一张图像的 226 个关键点:

74 128 
 
98.20 126.13 16.47 2.776 
 
0 0 0 0 0 0 0 0 9 12 1 0 0 0 0 0 39 9 0 0 
 
0 15 24 12 29 1 0 0 0 27 92 33 13 1 0 0 0 0 0 20 
 
83 90 19 1 2 6 3 19 165 86 2 0 1 8 44 88 24 0 3 21 
 
8 24 165 64 3 1 4 0 0 1 1 18 116 23 10 0 1 14 11 51 
 
165 101 9 20 5 1 5 84 38 24 28 157 40 5 10 14 0 3 5 0 
 
0 0 0 0 45 101 16 0 0 0 0 1 114 165 17 8 1 0 0 1 
 
7 56 17 46 26 0 0 0 

(同样,剩余的关键点及其 128 个维度一直持续到第 226 个关键点特征)。

同样,其余 2999 张图像也有各自的关键点特征。

现在我必须对整个 3000 张图像的筛选特征执行 k-means 聚类,并从中获得一个 k-means 模型。我计划使用来自 scikit (sklearn) 的 k-means 包。如何在 scikit 中输入这 3000 张图像的关键点?请帮忙。

请您参考如下方法:

您必须实例化一个 sklearn.cluster.KMeans 对象并调用 fit(X),其中 X 是一个矩阵,所有图像的所有关键点都堆叠起来。例如,如果不是你的 3000 张图像,你只有两张分别具有 100 和 50 个关键点的图像,则 X 将为 150 x 128。运行 fit 后,你应该查看对象的属性 cluster_centers_,这将对应于您训练的 k-means 模型。

不过,从您的问题中不清楚的是,您是否已经拥有在 python 中表示为矩阵的每个图像的关键点。你可能想看看 their k-means example .