整理数据集的坏图片(k-means,clustering,sklearn)

时间:2013-09-10 14:09:30

标签: python computer-vision cluster-analysis scikit-learn k-means

我正在测试图像回溯中的一些东西,我正在考虑如何整理数据集的坏图片。例如,只有房屋的照片,中间有人和一些汽车的照片。所以最后我想只得到房子。 在片刻,我的方法看起来像:

  • 所有图片的计算描述符(筛选)
  • 使用k-means
  • 聚类所有描述符
  • 通过计算聚类中心与图片描述符之间的欧氏距离来创建图片的直方图
  • 再次聚类直方图。

此刻我得到了第一种(这不是很好)。现在我的想法是将所有聚集在一起的照片带到len(center) > 1的中心,并一次又一次地聚集它们。因此结果是中心特定的图片将被整理出来。也许它足以使结果再次适应相同的k-means而不再聚类?!

结果并不令人满意,所以也许有人有个好主意。

对于聚类等我正在使用k-means of scikit learn。

2 个答案:

答案 0 :(得分:1)

K-means对噪音不是很稳健;你的“糟糕图片”可能会被认为是这样的。此外,对于稀疏数据,k-means不能很好地工作;因为手段不会稀疏。

您可能想尝试其他更现代的聚类算法,以便更好地处理这种情况。

答案 1 :(得分:1)

我没有解决您的问题的方法,但这是在最终聚类之前执行的健全性检查,以检查您提取的功能类型是否适合您的问题:

  • 提取数据集中所有图片的直方图功能
  • 使用直方图功能计算数据集中所有图片的成对距离(您可以使用sklearn.metrics.pairwise_distance

np.argsort raveled distance矩阵根据你的特征找到20个最接近的不同图片对的索引(你必须过滤掉距离矩阵的零值对角元素)并做同样的事情根据您的直方图特征提取前20个最最精确的图片对。

可视化(例如使用plt.imshow)顶部最近对的图片,并检查它们是否是您期望非常相似的对。

可视化最顶层对的图片并检查它们是否非常不同。

如果这两个检查中的一个失败,则表示SIFT单词包的直方图不适合您的任务。也许您需要提取其他类型的功能(例如HoG功能)或重新组织您提取SIFT描述符集群的方式,可能使用金字塔池结构来提取各种比例的图片的全局布局信息。