使用Sift功能和Knn进行图像分类?

时间:2014-11-10 12:14:25

标签: image-processing classification sift knn

你能帮助我使用SIFT功能进行图像分类吗?

我想根据SIFT功能对图片进行分类:

  • 给定一组训练图像,从中提取SIFT
  • 在整个SIFT集合中计算K-Means 训练集。 “K”参数(簇的数量)取决于 您用于培训的SIFT数量,但通常是 500-> 8000(越高越好)。
  • 现在您已获得K个集群中心。
  • 您可以通过分配每个SIFT来计算图像的描述符 图像到K簇之一。通过这种方式你获得了一个 长度直方图K。
  • 我在训练集中有130张图像,因此我的训练设置为130 * K. 维
  • 我想对我的测试图像进​​行分类,我有1张图片,所以我的样本是1 * k 维。我写了这个代码knnclassify(样本,培训 组,组)。

我想归类为7组。所以,knnclassify(sample(1*10),trainingset(130*10),group(7*1))

错误是: GROUP的长度必须等于TRAINING中的行数。我该怎么办?

1 个答案:

答案 0 :(得分:0)

直接来自文档:

  

CLASS = knnclassify(SAMPLE,TRAINING,GROUP)对每一行进行分类       将SAMPLE中的数据导入TRAINING中的一个组,使用最近的 -       邻居法。 SAMPLE和TRAINING必须是相同的矩阵       列数。 GROUP是TRAINING的分组变量。它的       唯一值定义组,每个元素定义组       相应的TRAINING行所属。 GROUP可以是一个       数字向量,字符串数组或字符串的单元格数组。的 TRAINING       和GROUP必须具有相同的行数。

这意味着group应该是130x1,并且应该指出每个训练样本属于哪个组。 unique(group)应该返回7个值 - 您的训练集中包含的七个类别。 如果您还没有指定图像属于哪些类别的组向量,则可以使用kmeans将训练集分成7组:

group = kmeans(trainingset,7);
knnclassify(sample, trainingset, group);