从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起

Posted

技术标签:

【中文标题】从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起【英文标题】:Image clustering from many number and char pictures , group similar ones together 【发布时间】:2017-12-17 18:31:24 【问题描述】:

我有很多图片,其中的内容是其中之一 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,如下图:

有一万张图片,我不想自己贴标签。所以我尝试使用 sklearn 对它们进行聚类。

我的计划:

    选择 sklearn 聚类模型,例如 Kmeans

    由于1,l,Ic,Co,Os,Sx,Xv,Vz,Z类似,我可以设置一个较低的n_cluster参数,比如56。

    将所有图像填充到相同大小,但位置随机(我认为这可能会带来很好的结果)。

    集群完成后,我可以将标签(1~56)标记为真正的字符。然后可以使用这个数据集来训练一个分类器。


但梦想是美好的,事实是艰难的。

我的代码:

from sklearn import cluster
data = load('data.pkl', '.')

#data.shape
#(103083, 76, 70)

k_means = cluster.KMeans(n_clusters=56, n_jobs=-1)
k_means.fit(data.reshape((data.shape[0], -1)))

# print top 10 image which label by 25
for i in data[np.where(k_means.labels_==25)[0][:10]]:
    plt.figure(figsize=(1,1)), plt.imshow(i, 'gray')
    plt.xticks([]), plt.yticks([])

输出:

看起来 kmeans 仅由位置确定(标签 25 都在中间)。 我现在正在尝试其他模型(不包括神经网络),但其中许多没有n_job 参数(用于并行处理),非常慢。我猜结果也可能像kmeans。所以我在这里为这种情况寻求适当的解决方案。

【问题讨论】:

比较是如何进行的?什么相似度得分? 【参考方案1】:

如果我要这样做,我会

手动标记每个字符的几个样本(比如 4 个,大约 250 个图像),

对最近邻进行自动分类,

如果对分类有疑问,建议最接近的分类并请求人工确认。当最佳聚类和次佳聚类的相似度差异超过估计的聚类大小时,会提出疑问。

为了提高安全性,在第一个训练步骤之后,您可以检查每个集群中的异常值。

【讨论】:

【参考方案2】:

K-means 和几乎所有聚类算法都不会比较相邻像素。因为向量中没有这样的邻接。所以聚类算法不能在像素上做到这一点

即使是大多数分类算法也很难处理原始数据。很明显,您应该进行分类,而不是聚类

如果你想要 10 年前的结果,那就仔细设计一些特征,比如边缘特征,用好的特征而不是像素

如果您想对此类数据进行最先进的分类性能,请使用深度学习。

【讨论】:

以上是关于从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起的主要内容,如果未能解决你的问题,请参考以下文章

有效地将相似的数字组合在一起[重复]

Excel 公式将相似的值替换为单个公式

数学建模算法学习之K-means聚类算法(建议收藏)

Python3 - 将相似的字符串分组在一起

聚类算法---引言

多元统计学-聚类分析