给k的图像数据意味着在matlab中进行聚类?

时间:2014-06-26 14:28:04

标签: matlab image-processing k-means pca

我在我的数据库中有100个图像。我使用这100个图像作为训练集和测试图像。我必须制作5个簇。我使用特征面(PCA)进行特征提取。应该为kmeans提供哪些数据在matlab中命令?

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);

1 个答案:

答案 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算法没有加权,因此你不能为向量提供权重。