在 SKLearn 中使用 K-Means 处理图像矩阵

Posted

技术标签:

【中文标题】在 SKLearn 中使用 K-Means 处理图像矩阵【英文标题】:Processing an image-matrix with K-Means in SKLearn 【发布时间】:2018-05-12 04:20:09 【问题描述】:

我想用 SKLearn 对我的图像进行分类。 使用 python,我从磁盘读取图像并通过自适应阈值“删除”背景。此外,我计算对象(无背景)的平均颜色以及所有像素与平均颜色之间的标准偏差。 阈值图像、平均颜色和 stdv 是我的特征提取的结果,我现在想对所有图像及其特征运行聚类算法,以对相似图像进行分类。

但是,the KMeans function 似乎只接受每个要聚类的对象的每个特征具有单个值的一维数组,而不是我的数据,其中单个对象具有

一个矩阵,显示图像如下: (((r,g,b)(r,g,b,)(r,g,b,)), ((r,g,b,)(r,g,b,)(r,g,b,)))

具有平均颜色的向量: (r,g,b)

每个颜色方面的标准向量: (r,g,b)

如果我只有两个向量,我会将它们分成 6 个特征,例如 (r, g, b, r2, g2, b2)。但是,矩阵是 100x100,这会给我带来 10.000 个额外的功能,这不是答案。

我很高兴听到有关我的问题的解决方案或使用我提取的特征对图像进行分类的其他方法的指南。 提前致谢!

【问题讨论】:

【参考方案1】:

是的,您需要重塑数据。是的,一张 100x100x3 的图像会产生 30000 个特征。

由于维度灾难,KMeans 往往不能很好地处理此类数据。

您需要提取特征以获得合适的低维表示。几年前,这个问题的答案是“视觉词袋”。现在是“深度学习”,使用最后一层作为特征,而不是分类输出层。

【讨论】:

以上是关于在 SKLearn 中使用 K-Means 处理图像矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何在sklearn中检查k-means中给定向量的集群细节

Sklearn入门之k-means聚类算法

使用sklearn估计器构建K-Means聚类模型

使用 sklearn_pandas 查找 k-means 聚类最重要的词

为啥我的 k-means 收敛条件给出的结果与 sklearn 不同?

k-means算法处理聚类标签不足的异常