使用 Sift 特征和 Knn 进行图像分类?
Posted
技术标签:
【中文标题】使用 Sift 特征和 Knn 进行图像分类?【英文标题】:Image classification with Sift features and 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 中的行数。我能做什么?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于使用 Sift 特征和 Knn 进行图像分类?的主要内容,如果未能解决你的问题,请参考以下文章