在OpenCV中,有一个CvSVM类,它接受一个样本矩阵来训练支持向量机。矩阵是2D的,样本在行中。
我创建了自己的方法来从视频提要中生成定向梯度(HOG)的直方图。为此,我创建了一个9通道矩阵来存储HOG,其中每个通道对应一个方向框。最后我得到了一个CV_32FC(9)类型的40x30矩阵。
也为这只猪做了一个可视化,它正在工作。
我不知道如何将这个矩阵输入OpenCV支持向量机,因为如果我将其展平,我不知道支持向量机如何从1D输入数据中学习9D超平面。
发布于 2011-07-22 07:02:00
支持向量机总是接受每个特征向量的单行数据。因此,特征向量的维度是行的长度。如果你在处理2D数据,那么每个特征向量有2个项目。2D数据的示例在此网页上:
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
OpenCV http://sites.google.com/site/btabibian/labbook/svmusingopencv中等效演示的代码
重点是,即使你认为直方图是具有9-bin单元格的二维直方图,特征向量实际上是它的平面化版本。因此,将其展平为一个长的特征向量是正确的。对我来说,结果是一个长度为2304 (16x16x9)的特征向量,并且我在一个小的测试集上获得了100%的预测准确率(即,它可能略低于100%,但它工作得非常好)。
这样做的原因是,支持向量机在特征向量的每个项目的权重系统上工作。所以它与问题的维度没有任何关系,超平面总是与特征向量在同一维度上。另一种看待它的方式是忘记超平面,只将其视为特征向量中每一项的一组权重。在这种情况下,它需要为每个项目设置一个权重,然后将每个项目与其权重相乘,并输出结果。
https://stackoverflow.com/questions/6706919
复制相似问题