我有一个96x96像素的灰度面部图像。 我想找到眼睛中心和唇角。 我在面部图像上应用了一个gabor滤镜(theta = pi / 2,lamda = 1.50),在卷积后我得到了这样的滤镜输出。

Gabor滤波器响应

正如你从gabor输出中看到的那样,眼睛和嘴角是清晰可辨的。 我应用scikit kmeans聚类将像素组合成4个簇(2个眼睛和2个唇角)

data = output.reshape(-1,96*96)
estimator = KMeans(n_clusters=4)
estimator.fit(data)
centroids = np.asarray(estimator.cluster_centers_) 
print 'Cluster centers', centroids.shape
print 'Labels', estimator.labels_, estimator.labels_.shape

产量

Input X,y: (100, 96, 96) (1783, 1)
Gabor Filters (1, 9, 9)
Final output X,y (100, 96, 96) (0,)
Shape estimator.cluster_centers_: (4, 9216)

现在问题是:我如何绘制4个聚类中心的质心x,y坐标? 我会看到眼睛中心和嘴角吗?

更多信息:我绘制了estimator.cluster_centers_,输出就像一本代码簿。 我没有看到聚类质心的坐标。

Kmeans码本

我正在使用本文所述的步骤: http//jyxy.tju.edu.cn/Precision/MOEMS/doc/p36.pdf

#1楼 票数:1 已采纳

我认为这里有一些关于你正在进行K-means聚类的空间的混淆。 在您提问中的代码段中,您将使用矢量化面部图像作为数据点来训练KMeans模型。 K-means群集与您提供的数据位于同一个空间中,因此(正如您所注意到的)您的群集质心也将是矢量化的脸部图像。 重要的是,这些面部图像的尺寸为9216,而不是尺寸2(即xy坐标)!

要获得二维(x,y)坐标作为K均值质心,您需要使用二维输入数据运行算法。 就在我的脑海中,您似乎可以对脸部图像应用暗度阈值,并组装仅有暗像素位置的聚类数据集。 然后在此数据集上运行K-means后,质心将有望接近脸部图像中存在最暗像素的像素位置。 这些位置(假设您的训练数据中的面部图像已经有所记录)应该与您希望的眼睛和嘴角有些接近。

这可能会让人感到困惑,所以我会尝试添加一个例子。 让我们说一个例子,你有“3个像素宽,4个像素高的”脸部图像“。 在对其中一个图像中的像素进行阈值处理后,它可能看起来像:

0 1 2  <-- x coordinates

0 0 0  0  ^ y coordinates
0 1 0  1  |
1 0 0  2  |
0 0 1  3  v

如果你直接在K-means中使用这个“图像”,你真的在​​12维空间中运行你的K-means算法,上面的图像将被矢量化为:

0 0 0 0 1 0 1 0 0 0 0 1

那么你的K-means聚类质心也将存在于同一个12维空间中。

我想建议的是你可以提取每个图像中1s的(x,y)坐标,并将它们用作K-means算法的数据。 因此,对于上面的示例图像,您将获得以下数据点:

1 1
0 2
2 3

在这个例子中,我们从这一个“图像”中提取了3个二维点; 拥有更多图像,您将获得更多的二维点。 使用这些二维数据点运行K-means后,您将获得聚类质心,这些聚类质心也可以解释为原始图像中的像素位置。 您可以在图像上绘制这些质心位置,并查看它们在图像中的对应位置。

  ask by pbu translate from so

未解决问题?本站智能推荐:

2回复

Python将k-means集群关联到实例

我已经阅读了这里的文档以及查看本教程,但我仍然缺少在scikit-learn中使用K-means的基本知识: 假设我有一个数据集: 由于K-means采用numpy数组,我必须删除用户名并只使用数值变量。 但是,在创建群集后,如何将它们与每个用户关联以进行进一步分析。 即我如何
2回复

是否可以使用k-means在scikit / sklearn中使用的K ++初始化过程学习?

我正在阅读k-means的文档,我看到它使用k ++作为初始化。 是否可以使用sci-py中实现的k ++初始化函数? 阅读他们的文档我假设唯一的方法是使用K-means算法,但不训练任何数量的迭代,如: 会有用吗还是有正确的方法来正确使用他们的图书馆? (在他们的文档中找不到
1回复

如何使用scikit-learn获得每个k-means集群的惯性值?

我正在使用scikit学习聚类(k-means)。 当我使用详细选项运行代码时,它会打印每次迭代的惯性。 一旦算法结束,我想得到每个形成的簇的惯性(k惯性值)。 我怎样才能做到这一点?
1回复

在TruncatedSVD Python之后绘制K-means集群

我正在尝试绘制在我的数据集上运行群集的结果,但我收到错误: 我对fit()调用工作正常,但绘图是出错的地方。 这是我的代码: 任何人都可以建议我如何更改我的代码以获得群集图表?
2回复

k-means 集群中的项数

我需要知道由 k-means 生成的集群中的术语数。 我什至可以在此链接上找到可能的解决方案,内容失败。 K-Means 聚类 - 输出聚类包含相同数量的元素但顺序不同 [Python] 下面是我的代码: 上面代码的输出看起来像这样, 例如,我希望 clusterlists [0] 展
2回复

如何使用 python 用 K-Means 匹配标签集群与真实标签

我对 Kmeans 算法的标签数据有问题。 我的测试句子得到了真正的集群,但我没有得到真正的标签。 我已经使用 numpy 将集群与 true_label_test 匹配,但是这个 kmeans 可以移动集群,真实标签与集群数量不匹配。 我需要这个问题的帮助。 这是我的代码
1回复

K-means在3D矩阵上

我目前正在学习k-means并想在3D矩阵上尝试它, 这是我通过2D矩阵的链接。 但是在尝试但是在尝试的时候 错误的 ValueError:找到带有暗淡的数组3.估计的估计值<= 2。 任何我出错的建议都表示赞赏。
1回复

如何解释k-means聚类的结果?

我目前正在使用NTSB航空事故数据库进行一些分析。 此数据集中的大多数航空事故都有原因声明,描述导致此类事件的因素。 我的目标之一是尝试对原因进行分组,而群集似乎是解决此类问题的可行方法。 我在k-means聚类开始之前执行了以下操作: 停止删除词,即删除文本中的一些常用功能