1

我正在使用OpenCVVisual C++开发英文手写 OCR 。我使用基于区域的方法进行特征提取。这里我使用64×64图像。所以我有一张样本图像的64 个特征。我的SVM将是多类 SVM,因为我有52 个大写字母和简单字母的类。这是特征向量的格式。

Class A image1 0:0.222000 1:0.0250222 ..... 63:0.000052
Class A image2 (some float values) .... 
Class A image200 (some float values)

同样,我有52个班级的200 张图像。在测试时,我当前的准确率仅为35% - 40%。我已经阅读了缩放数据增加了预测的准确性。但我有几件事要说清楚。

  1. 我如何缩放这些特征值?

  2. 是否有任何函数可以获取OpenCV LibSVM中每个测试特征向量的匹配概率(我搜索了OpenCV 2.4.5文档,但我找不到这个)。

谁能解释这些?,并且如果可能的话,还有一些非常少的代码行

4

2 回答 2

3
  1. 查看支持向量分类的实用指南。基本上,您应该将特征向量的每个维度缩放为 [-1, 1] 或 [0, 1](所有维度都相同)。例如,对于第一个维度,如果你知道可能的最大值和最小值是v_maxv_min(如果是像素灰度值,那么它们是 0 和 255)。然后您可以将新特征值计算为new_val = (old_val-v_min)/(v_max-v_min);

  2. 这是 OpenCV SVM 预测函数的文档:predict.

    float CvSVM::predict(const CvMat* sample, bool returnDFVal=false ) const

    If you pass in returnDFVal as true, then you will get the distance to the margin as returned value. It's not a probability, but you can use it as an indicator to how good your classification is.

Hope this helps.

于 2013-06-11T20:46:37.777 回答
2
  1. 您的数据已经进行了一定程度的缩放,但 libsvm 人员会建议 ( http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf ) 线性缩放到 [0, 1] 或 [-1 , 1]。如果您有像素数据 [0,1] 可能更有意义。

  2. 我也看不到。您可以链接到 C++ libsvm ( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ),然后您有两个选择。A)训练类概率,在这种情况下你会得到这些概率,或者 B)询问与决策边界的距离。

于 2013-06-11T20:46:15.577 回答