使用 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 进行图像分类?的主要内容,如果未能解决你的问题,请参考以下文章

基于SIFT特征提取的图像拼接算法matlab仿真

如何使用 SIFT 和 SVM 实现通用图像分类器

OpenCV中的特征匹配(Feature Matching)

机器学习算法篇之KNN图像识别分类器构建

SVM 用于图像特征分类?

Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练