数字 OCR。用胡不变矩分类
Posted
技术标签:
【中文标题】数字 OCR。用胡不变矩分类【英文标题】:OCR of digits. Classify with Hu Invariant Moments 【发布时间】:2014-04-22 14:28:46 【问题描述】:我正在对多位数字的图片进行 OCR。我隔离数字,计算每个数字的七胡不变矩,并存储数据。因此,当我对每个数字都有足够的数据时,我想将一个传入的数字与我已经拥有的数据相匹配。
我首先计算数字的七个 hu 矩,然后检查所有数据并检查其他 hu 矩向量是否与我新到达的数字相匹配。
对于数字 6,七个 hu 时刻可能如下所示:
0.0015019597635929924
8.216737738246056E-7
2.0375639403591246E-10
7.83546684255912E-11
7.317864741055554E-21
3.429093590309372E-14
-6.668347984552349E-21
其他六人也很相似。
数字1可能有这样的数据:
0.0013343457573374317
7.801615619419164E-7
1.2084360881640018E-10
2.0011222038541843E-10
3.0737764628109555E-20
1.7596117047839112E-13
4.854579634937481E-21
因此,如果我收到 1 的 hu 时刻,我希望它与 1 数据最匹配。我应该如何解决这个问题,实现它的最佳方法是什么?我正在使用 Java 和 OpenCV 来计算矩。
编辑:另外一个问题:现在我刚刚用每个数字周围的边界框隔离了每个数字,并计算了该图像的 hu 矩。计算数字本身周围轮廓的 hu 矩是否更准确?如果是这样,有人愿意解释这种方法吗? 只需这样做:
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(image, contours, new Mat(),Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_SIMPLE);
Moments mom = new Moments();
mom = Imgproc.moments(contours.get(0), false);
Mat hu = new Mat();
Imgproc.HuMoments(mom, hu);
我有时会以零值作为 hu 时刻。 contours.get(0) 是传递给矩计算的正确参数吗?
EDIT2: 很抱歉进行了编辑,但从我现在对自己的尝试来看,我计算的 hu 不变矩太相似了。我无法以聪明的方式区分它们。可能我现在计算它们的方式太“粗糙”了。我实际上只是在每个数字图像中找到最大的计数,即每个数字的边界框图像,并从中计算 hu 矩。
【问题讨论】:
【参考方案1】:首先你必须使用或构建一个大型数据库,这个网站有很多数据:machine learning data set collection
其次,最好的办法是使用神经网络分类器或决策树的提升,在我的情况下,我使用 C4.5 算法和这个数据库Pen-Based Recognition of Handwritten Digits Data Set ,它给我的比率是 99%,这几乎是.我认为所有这些算法都已经在 boost 库中实现了。 对于 java 试试weka
【讨论】:
以上是关于数字 OCR。用胡不变矩分类的主要内容,如果未能解决你的问题,请参考以下文章