4

我正在研究一个需要对字符和符号进行分类的项目(基本上是 OCR,需要处理单个 ASCII 字符和符号,例如音乐符号)。我正在使用矢量图形(WPF 中的路径和字形),因此图像可以具有任何分辨率,并且旋转可以忽略不计。它需要对不在训练集中的字体和路径进行分类(并可能从中学习)。性能很重要,尽管高精度是优先考虑的因素。

我查看了一些使用 Emgu CV(OpenCV 的 .Net 包装器)进行图像检测的示例。然而,我发现的示例和教程似乎专门处理图像检测而不是分类。我不需要在更大的图像中找到图像的实例,只需确定图像中的符号类型。

似乎有多种方法可供选择,其中可能有效,我不知道从哪里开始。任何建议或有用的链接将不胜感激。

4

3 回答 3

2

您可能应该看一下论文:Gradient-Based Learning Applied to Document Recognition,尽管它指的是手写字母和数字。您还应该阅读 Belongie 和 Malik 的 Shape Context。您应该寻找的关键字是数字/字符/形状识别(不是检测,不是分类)。

于 2010-07-05T04:53:02.377 回答
2

如果您使用 EmguCV,SURF 特征示例(StopSign 检测器)将是一个很好的起点。另一种(可能是互补的)方法是使用 MatchTemplate(..) 方法。

然而,我发现的示例和教程似乎专门处理图像检测而不是分类。我不需要在更大的图像中找到图像的实例,只需确定图像中的符号类型。

通过在图像中查找符号的实例,您实际上是在对其进行分类。不知道为什么你认为这不是你需要的。

    Image<Gray, float> imgMatch = imgSource.MatchTemplate(imgTemplate, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED);

        double[] min, max;
        Point[] pointMin, pointMax;
        imgMatch.MinMax(out min, out max, out pointMin, out pointMax);
//max[0] is the score
        if (max[0] >= (double) myThreshold)
        {
            Rectangle rect = new Rectangle(pointMax[0], new Size(imgTemplate.Width, imgTemplate.Height));
            imgSource.Draw(rect, new Bgr(Color.Aquamarine), 1);
        }

那个 max[0] 给出了最佳匹配的分数。

于 2010-07-05T09:13:57.637 回答
1

把你所有的图像都降低到一些标准分辨率(适当地缩放和居中)。
将画布分解成 n 个正方形或矩形块。

对于每个块,您可以测量该块中黑色像素的数量或黑白之间的比率,并将其视为特征。

现在您可以将图像表示为特征向量(每个特征源自不同的块),您可以使用许多标准分类算法来预测图像所属的类别。

谷歌“viola jones”以获得这种类型的更详细的方法。

于 2010-07-05T04:20:41.130 回答