【问题标题】:Image classification with Sift features and Knn?使用 Sift 特征和 Knn 进行图像分类?
【发布时间】:2015-01-06 17:52:02
【问题描述】:
你能帮我等待使用 SIFT 特征的图像分类吗?
我想根据 SIFT 特征对图像进行分类:
- 给定一组训练图像,从中提取 SIFT
- 在从
训练集。 “K”参数(簇数)取决于
您用于训练的 SIFT 数量,但通常约为
500->8000(越高越好)。
- 现在您已经获得了 K 个聚类中心。
- 您可以通过分配每个 SIFT 来计算图像的描述符
图像到 K 个集群之一。这样你就可以获得一个
长度为 K 的直方图。
- 我的训练集中有 130 张图像,所以我的训练集是 130*K
维度
- 我想对我的测试图像进行分类,我有 1 张图像,所以我的样本是 1*k
维度。我写了这段代码 knnclassify(sample,training
组,组)。
我想分类到 7 组。所以,knnclassify(sample(1*10),trainingset(130*10),group(7*1))
错误是: GROUP 的长度必须等于 TRAINING 中的行数。我能做什么?
【问题讨论】:
标签:
image-processing
classification
sift
knn
【解决方案1】:
直接来自文档:
CLASS = knnclassify(SAMPLE,TRAINING,GROUP) 对每一行进行分类
将 SAMPLE 中的数据放入 TRAINING 中的组之一,使用最近的
邻接法。 SAMPLE 和 TRAINING 必须是相同的矩阵
列数。 GROUP 是 TRAINING 的分组变量。它的
唯一值定义组,每个元素定义组
TRAINING 对应的行属于哪个。 GROUP 可以是
数值向量、字符串数组或字符串元胞数组。 培训
和 GROUP 的行数必须相同。
这意味着,group 应该是 130x1,并且应该指出每个训练样本属于哪个组。 unique(group) 在您的情况下应该返回 7 个值 - 您的训练集中代表的七个类别。
如果您还没有指定图像所属类别的组向量,您可以使用kmeans 将您的训练集分成 7 个组:
group = kmeans(trainingset,7);
knnclassify(sample, trainingset, group);