我想用scikit-learn训练我的svm分类器进行图像分类.
我想使用opencv-
python的SIFT算法函数来提取图像特征.情况如下:
1. skm分类器的scikit-learn输入是2-d数组,这意味着每行代表一个图像,每个图像的特征量是相同的; here
2. opencv-python的SIFT算法返回一个关键点列表,这是一个numpy形状的数组. here
所以我的问题是:
我如何处理SIFT功能以适应SVM分类器的输入?你能帮助我吗 ?
UPDATE1:
感谢pyan的建议,我调整了我的建议如下:
1.从每个图像中获取SIFT特征向量
2.对所有向量执行k均值聚类
3.创建基于集群中心的特征字典a.k.a. cookbook
4.基于特征字典重新表示每个图像,当然每个图像的尺寸量是相同的
5.训练我的SVM分类器并对其进行评估
UPDATE2:
我已经将所有图像SIFT特征向量收集到一个数组(x * 128)中,这个数组太大了,然后我需要对它进行聚类.
问题是:
如果我使用k-means,则必须设置参数簇号,我不知道如何设置最佳值;如果我不使用k-means,哪种算法可能适合这个?
注意:我想使用scikit-learn来执行群集
我的建议是:
1.对矢量执行dbscan聚类,然后我可以得到label_size和标签;
2.因为scikit-learn中的dbscan不能用于预测,我可以根据dbscan结果训练一个新的分类器A;
3.分类器A就像一本食谱,我可以标记每个图像的SIFT向量.之后,每个图像都可以重新表示;
基于上述工作,我可以训练我的最终分类器B.
注意:为了预测新图像,其SIFT向量必须由分类器A转换为向量作为分类器B的输入
你能给我一些建议吗?