【发布时间】:2015-08-12 11:14:17
【问题描述】:
我想用 scikit-learn 训练我的 svm 分类器进行图像分类。
而我想使用opencv-python的SIFT算法函数来提取图像特征。情况如下:
1. scikit-learn的svm分类器的输入是一个二维数组,也就是说每一行代表一张图片,每张图片的特征量是一样的;here
2. opencv-python 的 SIFT 算法返回一个关键点列表,它是一个形状为 的 numpy 数组。 here
所以我的问题是:
我如何处理 SIFT 特征以适应 SVM 分类器的输入?你能帮帮我吗?
更新1:
感谢 pyan 的建议,我已将我的建议修改如下:
1. 从每张图像中获取 SIFT 特征向量
2. 对所有向量执行 k-means 聚类
3. 基于集群中心创建特征字典,又名食谱
4.根据特征字典重新表示每张图片,当然每张图片的维数是一样的
5. 训练我的 SVM 分类器并对其进行评估
更新2:
我已经将所有图像 SIFT 特征向量收集到一个数组(x * 128)中,这个数组太大了,然后我需要对其进行聚类。
问题是:
如果我使用 k-means ,必须设置参数簇数,我不知道如何设置最佳值;如果我不使用 k-means,哪种算法可能适合这个?note:I want to use scikit-learn to perform clustering
我的建议是:
1.对向量进行dbscan聚类,得到label_size和labels;
2. 因为scikit-learn中的dbscan不能用于预测,所以我可以根据dbscan结果训练一个新的分类器A;
3. 分类器 A 就像一本食谱,我可以标记每个图像的 SIFT 向量。之后,每个图像都可以重新表示;
4.基于以上工作,我可以训练我的最终分类器B。note:for predict a new image, its SIFT vectors must be transform by classifier A into the vector as classifier B's input
你能给我一些建议吗?
【问题讨论】:
标签: image classification svm sift