我们目前正在开发一个使用opencv.pre-processing,分段,功能提取步骤的android ocr应用程序。分类是剩下的一步,我们被卡住了......我们正在使用一个填充了每个字母特征的数据库表。首先,我们每个字母只有1个特征,我们使用欧几里德距离,但结果不准确等等需要获得的功能,所以我们做了。现在的问题是我们每个字母有7个功能,完全不知道如何根据它们对i / p进行分类。有些人建议使用knn,但我们无法弄清楚如何并且那部分中的opencv文档并不清楚..如果有人可以帮助它,那将是伟大的。 提前致谢
答案 0 :(得分:3)
简短而不讨论细节。矢量空间在这里派上用场。您需要构建一个特征向量
<feature1, feature2, feature3.. featureN>
用于训练集中的每个实例。
从这些图像中,您可以提取您认为或在研究文章中阅读的功能对图像分类很重要。例如,您可以执行质心,高斯模糊,直方图等。
一旦你有了这些值,线性代数就会发挥一些分类算法:你在训练集上运行的knn,svm,naive bayes等,那就是你建立你的模型。
如果模型已准备好,则在测试集上运行它。
使用交叉验证可获得更全面的结果。
有关详细信息,请查看课程说明:
http://www.inf.ed.ac.uk/teaching/courses/iaml/slides/knn-2x2.pdf
要么
http://www.inf.ed.ac.uk/teaching/courses/inf2b/lectureSchedule.html
答案 1 :(得分:0)
想补充一点,OpenCV可能没有您可能更喜欢的那种分类器。
有几个库,但你可能必须看看哪个库在移动平台上效果最好。您能否详细说明您正在使用的功能?
最简单的KNN(k-最近邻)度量将是在输入样本的要素与数据库表中的每个向量之间找到n维(对于n维特征向量)的欧几里德距离。如果你有多个类并且输入图像被分类为一个这样的“类型”或“类”图像,也可以探索马哈拉诺比斯距离(用于测量点和数据集/类之间的距离)。
正如@matcheek所提到的,使用机器学习技术(如SVM,神经网络等)可以实现更复杂。但首先,您可能会考虑更简单的事情,如kNN,考虑到它可能会限制计算复杂性的移动平台。