在图像向量上使用 k-means 时,我有一个挥之不去的疑问。我有一个已转换为 HSV 空间的 RGB 图像。基本上我想单独对 H 向量执行 k-means。这是一个 214 x 300 的向量。
我有两个问题:
1.在将样本输入 kmeans 命令之前,是否应该将样本重塑为 64200*1 向量?
2.如何找到每个集群的中心(我将集群分为 4 个集群,因此我需要 4 个位置,每个位置代表每个集群的中心。)
在图像向量上使用 k-means 时,我有一个挥之不去的疑问。我有一个已转换为 HSV 空间的 RGB 图像。基本上我想单独对 H 向量执行 k-means。这是一个 214 x 300 的向量。
我有两个问题:
1.在将样本输入 kmeans 命令之前,是否应该将样本重塑为 64200*1 向量?
2.如何找到每个集群的中心(我将集群分为 4 个集群,因此我需要 4 个位置,每个位置代表每个集群的中心。)
是的,您应该将矩阵重塑为1xN
向量,其中N
对应于您要聚类的色调值的数量。每个都被视为要聚类的单个数据点。
k-means 的很大一部分是寻找正确的聚类中心。这发生在你身上,它不需要事先设置。如果您想用良好的中心初始化集群,请查看k-means++,但您不必在运行 k-means 之前找到集群中心。要在聚类后获得计算的聚类中心,您只需查看调用 k-means 提供的输出数组。签名如下:
双 kmeans(InputArray 数据,int K,InputOutputArray bestLabels,TermCriteria 标准,int 尝试,int 标志,OutputArray 中心 = noArray());
如您所见,kmeans() 调用的最后一个参数是包含聚类中心的矩阵。