我正在开发一个需要对字符和符号进行分类的项目(基本上是需要处理单个ASCII字符的OCR和符号,如音乐符号)。我正在使用矢量图形(WPF中的路径和字形),因此图像可以是任何分辨率,旋转将是可忽略的。它需要对不在训练集中的字体和路径进行分类(并且可能从中学习)。性能很重要,但高精度优先。
我查看了一些examples of image detection using Emgu CV(OpenCV的.Net包装器)。然而,我发现的示例和教程似乎专门处理图像检测而不是分类。我不需要在较大的图像中找到图像的实例,只需确定图像中的符号种类。
似乎有多种方法可供选择可能工作,我不知道从哪里开始。任何建议或有用的链接将不胜感激。
答案 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'用于更精细的此类方法。