我正在使用C ++和OpenCV 3.3.1 我尝试用OpenCV训练SVM我的步骤是:
现在我的问题:让我说我的图像是128 x 128并且在特征提取后我得到了一个有16行和128列的Mat,重新形状后我得到1行和2048列,现在是用这种大小的行和列训练的SVM。当我尝试使用我的SVM进行预测时,我遇到了SVM需要相同大小的Mat(1行和2048列)的问题但是我的预测图像获得了更多的功能作为学习图像所以预测Mat是一种方式根据需要更大。
使用与我用于学习相同的图像的预测效果很好,所以我猜SVM是有效的。
如何将SVM用于更大的图像?
使用SURF / SIFT描述符使它们成为1X 2048特征并不是一个好主意,原因有两个:
更加强大和标准的方法是使用Bag of Words。您可以使用词袋和直方图方法从SIFT特征获得K维描述符,然后在此K维描述符上训练SVM分类器,wchih将与每个图像相同。
此链接可能对您有所帮助,
https://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O
如果你想使用MATLAB;然后vlfeat有整个管道的实现。