Image processing k-means中的聚类中心?

Image processing k-means中的聚类中心?,image-processing,numpy,machine-learning,scikit-learn,Image Processing,Numpy,Machine Learning,Scikit Learn,我有一张96x96像素的灰度面部图像。我试图找到眼睛的中心和唇角。我在人脸图像上应用了一个gabor滤波器(θ=pi/2,lamda=1.50),在卷积之后,我得到了如下的滤波器输出 从gabor输出可以看出,眼睛和嘴角清晰可辨。我应用scikit kmeans聚类将像素分组到4个簇(2个眼睛和2个唇角) 输出 Input X,y: (100, 96, 96) (1783, 1) Gabor Filters (1, 9, 9) Final output X,y (100, 96, 96) (0

我有一张96x96像素的灰度面部图像。我试图找到眼睛的中心和唇角。我在人脸图像上应用了一个gabor滤波器(θ=pi/2,lamda=1.50),在卷积之后,我得到了如下的滤波器输出

从gabor输出可以看出,眼睛和嘴角清晰可辨。我应用scikit kmeans聚类将像素分组到4个簇(2个眼睛和2个唇角)

输出

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,输出就像一本代码本。我看不到星团质心的坐标


我正在使用本文中描述的步骤:

我认为这里对进行K-means聚类的空间有一些混淆。在问题中包含的代码片段中,您正在使用矢量化的人脸图像作为数据点来训练
KMeans
模型。K-意味着簇与您提供的数据位于同一空间,因此(正如您所注意到的)簇质心也将是矢量化的人脸图像。重要的是,这些人脸图像的尺寸是9216,而不是尺寸2(即x-y坐标)

要获得二维(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-均值簇质心也将生活在同样的12维空间中

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

1 1
0 2
2 3

在这个例子中,我们从这个“图像”中提取了3个二维点;图像越多,得到的二维点就越多。在对这些二维数据点运行K-means之后,您将获得簇质心,该质心也可以解释为原始图像中的像素位置。您可以在图像顶部绘制这些质心位置,并查看它们在图像中的对应位置。

似乎我需要将维度降低到2d以找到簇中心。应用阈值是一个好主意:)但即使在阈值之后,高强度像素的维数在9216中也超过100。似乎无法将其带到2d???@pbu抱歉造成混乱。我的意思是,在对图像中的像素设置阈值后,可以提取每个暗像素的(x,y)坐标,因此可以从每个图像中提取约100(x,y)个位置,然后在该组二维点上运行K-means。我将添加一个例子。@pbu我刚刚读了你链接到的文章,这也是他们正在做的。仔细阅读第IV-B部分和第IV-C部分。我猜出来了:)谢谢你的详细解释
0 0 0 0 1 0 1 0 0 0 0 1
1 1
0 2
2 3