【发布时间】:2015-08-13 06:27:13
【问题描述】:
我一直在尝试使用 SURF 功能来制作带有 sklearn SVM 的分类器(以识别一类对象)。 我一直遇到特征向量维度的问题。 我已经生成了一个特征对象数组和一个描述符数组,但是我用什么作为特征向量呢? 我尝试将特征和描述符直接作为参数传递,如下所示:
sd = cv2.FeatureDetector_create("SURF")
keypoints = sd.detect(img)
kp,des = surf.compute(img, keypoints)
model = svm.SVC()
model.fit(des,['type1'])
我是否必须提取特征对象或描述符数组的属性才能得到最终的特征向量?特征向量的维度应该是多少?不应该是一个向量数组(一个向量代表一个关键点)吗?
【问题讨论】:
-
为什么不尝试任何你能做的,看看有什么效果呢?我可能会从关键点数组开始。
-
好吧,我尝试将点特征的角度和坐标放入向量列表中,但似乎每个向量都需要一个标签。我收到一条错误消息,提示“X 和 y 的形状不兼容”。我的问题是:为什么每个向量都有一个标签?我们不应该为向量列表设置一个标签吗(因为整个向量列表代表一张图像)?
-
输入到 SVM 的每个向量都是一个单独的训练项。因此,您对相关图像的所有了解都需要放入一个向量中。然后你需要给它很多向量,代表很多图像。我认为您对图像特征和 SVM 特征有一些基本的误解,这就是您目前困惑的原因。
-
你是对的。我试图以某种方式将单个关键点的图像特征与 NLP 中用于整个文档的 TF/IDF 联系起来,结果完全搞糊涂了。不过现在明白了。
标签: python opencv scikit-learn svm surf