我一直在尝试使用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'])
我是否必须提取特征对象或描述符数组的属性以获得最终的特征向量?特征向量的维数应该是多少?它不应该是一个向量数组(一个向量对应一个关键点)吗?
我解决了。问题是将多维描述符"扁平化"为描述整个关键点集的一维向量。我将图像的大小调整为标准的行数和列数,并将二维像素网格平展为一维数组。数组中的每个元素唯一标识一个像素,值为1或0(1表示它是一个关键点)。如果我想为每个关键点添加更多描述性特性,我可以用类似的格式扩展数组(扩展中的数组元素的值将是描述性特性的值)。这使得一个单维向量包含了整个图像所需的特征信息。