对符号/图像进行分类的建议

时间:2010-07-03 16:01:47

标签: image opencv classification

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

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

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

3 个答案:

答案 0 :(得分:2)

你应该看一下这篇论文:基于梯度的学习应用于文档识别,虽然它指的是手写的字母和数字。您还应该阅读Belongie和Malik的Shape Context。你应该寻找的关键字是数字/字符/形状识别(不是检测,不是分类)。

答案 1 :(得分: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]给出最佳匹配的分数。

答案 2 :(得分:1)

将所有图像放入标准分辨率(适当缩放和居中) 将画布分成n个方形或矩形块。

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

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

谷歌'viola jones'用于更精细的此类方法。