kmeans命令的语法:
[IDX,C] = kmeans(X,k)
1.什么是X值?
2.我们是否必须将欧几里德距离作为输入?
3.我们是否必须给出输入图像的权重向量?
请详细解释我。
我试过的源代码
X = []
srcFiles = dir('C:\Users\rahul\Desktop\tomorow\*.jpg'); % the folder in which ur images exists
for i = 1 : length(srcFiles)
filename = strcat('C:\Users\rahul\Desktop\tomorow\',srcFiles(b).name);
Imgdata = imread(filename);
X(:, i) = princomp(Imgdata);
end
[idx, c] = kmeans(X, 5)
我得到的错误:
指数超出矩阵维度。 pca出错(第4行) filename = strcat('C:\ Users \ rahul \ Desktop \ tomorow \',srcFiles(b).name);
答案 0 :(得分:1)
您正在使用的PCA功能(我不知道它究竟是什么),产生一个n个数字的向量。该向量描述了图像,并且是需要给予k均值算法的。
首先,为所有100张图像运行PCA,生成nX100矩阵。
X = []
for i = 1 : 100
X(:, i) = PCA(picture...)
end
如果pca返回一行而不是一列,则需要
X(:, i) = PCA(picture)'
k-means函数采用此参数,以及簇的数量k。所以
[idx, c] = kmeans(X, 5);
默认情况下,用于聚类的距离是欧几里德。如果您需要一些不同的距离度量,可以将其作为参数提供。有关可用的距离指标,请参阅表格here。
最后,标准的k-means算法没有加权,因此你不能为向量提供权重。