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

yin*_*ner 5 image classification svm sift

我想用scikit-learn训练我的svm分类器进行图像分类.我想使用opencv-python的SIFT算法函数来提取图像特征.情况如下:

1.svm分类器的scikit-learn输入是2-d数组,这意味着每行代表一个图像和特征每幅图像的数量是相同的; 这里
2. opencv-python的SIFT算法返回一个关键点列表,这是一个numpy形状的数组在此输入图像描述.这里
我的问题是:
我如何处理SIFT功能以适应SVM分类器的输入?你能帮助我吗 ?

update1:

感谢pyan的建议,我按照以下方式调整我的建议:
1.从每个图像中获取SIFT特征向量
2.对所有向量执行k-means聚类
3.基于聚类中心创建特征字典,即cookbook
4. re - 基于特征字典表示每个图像,当然每个图像的尺寸量是相同的
5.训练我的SVM分类器并评估它

UPDATE2:

我已经将所有图像SIFT特征向量收集到一个数组(x*128)中,这个数组太大了,然后我需要对它进行聚类.
问题是:
如果我使用k-means,必须设置参数簇号,我不知道如何设置最佳值; 如果我不使用k-means,哪种算法可能适合这个?
note:I want to use scikit-learn to perform clustering

我的建议是:
1.对向量执行dbscan聚类,然后我可以得到label_size和标签;
2.因为scikit-learn中的dbscan不能用于预测,我可以根据dbscan结果训练一个新的分类器A;
3.分类器A就像一本食谱,我可以标记每个图像的SIFT向量.之后,每个图像都可以重新表示;
基于上述工作,我可以训练我的最终分类B.
note:for predict a new image, its SIFT vectors must be transform by classifier A into the vector as classifier B's input

你能给我一些建议吗?

pya*_*yan 4

图像分类可能非常普遍。为了定义好的特征,首先你需要明确你想要什么样的输出。例如,可以根据图像中的场景将图像分类为自然景观、城市景观、室内景观等。不同种类的分类可能需要不同种类的特征。

计算机视觉中基于关键词的图像分类的常用方法是词袋(特征装袋)或字典学习。您可以进行文献检索来熟悉该主题。在您的例子中,基本思想是将 SIFT 特征分组到不同的集群中。不要直接输入scikit-learnSIFT 特征,而是将特征组频率的向量作为输入。因此每个图像将由一个一维向量表示。

维基百科的简短介绍计算机视觉中的词袋模型