专利名称:一种基于Android系统的手写数学公式识别及生成MathML的方法

技术领域:

本发明属于模式识别技术领域,涉及数学公式中字符间的空间结构分析,具体涉及一种基于Android系统的手写数学公式识别及生成MathML的方法。

背景技术:

Android系统是基于Linux平台的开源移动操作系统,它由操作系统、中间件、用户界面和应用软件组成,并采用软件堆层的架构,主要分为三部分:底层以Linux内核工作为基础,中间层包括函数库Library和虚拟机,最上层是各种应用软件。随着Android智能机的普及,手写识别正在成为智能机输入的主要方式。近几年,基于手写数学公式的识别取得了很大的进展,如微软的公式识别,汉王的e粉笔等,但是这些软件主要运行于Windows操作系统。手写字符识别属于光学字符识别OCR的一个分支,是近年来研究的热点。手写字符识别的发展历史可以追溯到本世纪50年代,伴随着手写板硬件的出现,人们开始研究联机手写字符识别技术。随着半导体和计算机技术的发展以及模式识别领域理论和方法研究的不断深入和完善,到80年代后期,联机 手写字符识别技术的研究已经朝着实用的方向努力,特别是英文,已经开始研究完全无限制的整句识别技术。我国最早的手写体字符识别系统可以追溯到70年代初,中科院自动化所的科技工作者胡启恒院士等人于1974年开始研制手写体数字识别系统并成功的应用于邮局的信件自动分拣系统之中。80年代开始,清华大学自动化学院,北京大学等高校开始系统的对字符识别技术进行研究并取得成果。手写字符由于不同的人的笔划不同,造成即使是同一字符,不同的人书写也会因字体,习惯不同而大不一样。笔划的粗细、字体的大小、手写体的倾斜度、字符笔划的局部扭曲变形、字体灰度的差异等都直接影响到字符的最终识别效果,因此手写体字符识别是模式识别领域内最具挑战性的课题。手写字符识别最为根本的目标是在一定速度前提下获得尽可能高的识别率。也就是说一是速度,二是识别率。目前无论是传统方法还是一些新方法都不可避免地存在无法解决的识别“死角”,而采用单一的识别方法来提高识别率是十分困难的。因此,手写字符识别的研究趋势应该采用多种分类器组合的多级匹配识别方法,即在特征抽取时以多种方法有效结合来获取优化特征,互相补充,从而减少误识率,提高OCR系统的性能。另外,目前,数学公式的结构分析常采用最小生成树和LL (I)文法,LL(I)文法是一种利用栈结构的自顶向下算法,从文法的起始符号开始反复使用产生式进行推导直至推导出输入符号串,最小生成树法是依据运算符的优先级来建立二叉树的方法,其思想是先对数学公式的字符集进行优先级处理,根据优先级建立二叉树,使用这种方法节省了内存空间,但对优先级的要求很高

发明内容

为了克服上述现有技术中存在的缺陷,本发明的目的是提供一种基于Android系统的手写数学公式识别及生成MathML的方法,能够减少误识率,提高系统性能。为了实现本发明的上述目的,本发明提供了一种基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,包括如下步骤:S1:采集绘图板上手写字符的离散坐标序列,计算所述离散坐标序列在坐标轴X和坐标轴Y上的最小值和最大值,得到字符的边界信息;S2:在处理器内生成一个初始图像,将采集的离散坐标序列画在初始图像中,根据步骤Si得到的边界信息将初始图像剪切成只包含字符的字符图像;S3:对所述字符图像进行灰度处理和二值化处理,得到一个由O和I表示的二维数组;S4:使用细化处理和轮廓提取方法提取特征值;S5:对所述二维数组的行和列分别进行降维处理,生成固定的维数;S6:对所述步骤中S4提取的特征值进行粗分类,判断待识别的字符包含于哪种类型,再对这种类型的字符集使用BP神经网络进行字符识别,得到最优字符;S7:采用三叉树结构定位数学公式的空间关系,使用三叉树的先序算法进行排序,得到Ma^ML ;S8:利用浏览器对MathML进行显示。本发明的基于Android系统的手写数学公式识别及生成MathML的方法能够减少误识率,提闻系统性能。 本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:图1是本发明基于Android系统的手写数学公式识别及生成MathML的方法的流程图;图2是在本发明一种优选实施方式中手写的数学公式;图3是本发明一种优选实施方式中点P的3*3临域图;图4是本发明一种优选实施方式中三叉树的建立过程;图5是本发明一种优选实施方式中三叉树的层次结构图;图6是本发明一种优选实施方式中三叉树先序排序生成的MathML ;图7是浏览器对MathML的显示。

具体实施例方式下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。在本发明的描述中,除非另有规定和限定,需要说明的是,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,也可以通过中间媒介间接相连,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。本发明提供了一种基于Android系统的手写数学公式识别及生成MathML的方法,如图1所示,包括如下步骤:第一步:如图2所示,在绘图板上手写数学公式,处理器采集绘图板上手写字符的离散坐标序列,然后计算该离散坐标序列在坐标轴X和坐标轴Y上的最小值和最大值,得到字符的边界信息。第二步:在处理器内生成一个初始图像,将采集的离散坐标序列画在初始图像中,根据第一步得到的边界信息将图像剪切成只包含字符的字符图像,该字符图像小于初始图像。第三步:对所述字符图像进行灰度处理和二值化处理,得到一个由O和I表示的二维数组,在本实施方式中,得到二维数组后对该二维数组进行除噪处理,即对二维数组中的某些瑕疵点进行处理,去除二维数组中的瑕疵点,在本实施方式中,瑕疵点的判断方法为:如果与一个点相邻的四个点,即上,下,左,右四个点的值均与该点的值不同,则该点为瑕疵点,去除瑕疵点的方法是将瑕疵点的值进行变换,即将O变为1,或将I变为O。第四步:使用细化处理和轮廓提取方法提取特征值。在本实施方式中,具体步骤为:S31:使用细化算法对二维数组进行细化处理。在本实施方式中,使用细化算法对二维数组进行细化处理,具体可以采用Hilditch细化算法对二维数组进行细化处理,具体方法为:将二维数组从左向右从上向下迭代每个点的值作为一个迭代周期,在每个迭代周期中,对于每一个点P,如果它同时满足阈值条件,则标记它,在当前迭代周期结束时,把所有标记的点的值设为0,如果某次迭代周期中不存在标记点,则算法结束,结合图3所示,点P的3*3邻域的8个点以点P右侧的点为起始点,按照逆时针顺序依次编号为xl,x2, x3,x4, x5, x6, x7, x8,所述阈值条件包括以下6点:I)点P的值为I;2)点ρ的上、下、左、右四个点的值不全部为1,在本实施方式中,即点xl,x3, x5,x7的值不全部为I ;3)点ρ的3*3邻域中至少有2个点的值为1,在本实施方式中,即xl,x2, x3, x4,x5,x6,x7,x8中至少有2个点的值为I ;4)点ρ的8连通联结数为I,所述联结数指在点P的3*3邻域中,与点P连接的图形分量的个数,在图3中,灰色点值为1,白色点值为0,图3中左图的4连通联结数是2,8连通联结数是I,而右图的4联通联结数和8联通联结数都是2。在本实施方式中,4连通联结数计算公式是:

权利要求

1.一种基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,包括如下步骤: S1:采集绘图板上手写字符的离散坐标序列,计算所述离散坐标序列在坐标轴X和坐标轴Y上的最小值和最大值,得到字符的边界信息; S2:在处理器内生成一个初始图像,将采集的所述离散坐标序列画在初始图像中,根据步骤SI得到的边界信息将所述初始图像剪切成只包含字符的字符图像; 53:对所述字符图像进行灰度处理和二值化处理,得到一个由O和I表示的二维数组; 54:使用细化处理和轮廓提取方法提取特征值; 55:对所述二维数组的行和列分别进行降维处理,生成固定的维数; 56:对所述步骤中S4提取的特征值进行粗分类,判断待识别的字符包含于哪种类型,再对这种类型的字符集使用BP神经网络进行字符识别,得到最优字符; 57:采用三叉树结构定位数学公式的空间关系,使用三叉树的先序算法进行排序,得到MathML ; 58:浏览器对MathML进行显示。

2.如权利要求1所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,所述步骤S3中得到一个由O和I表示的二维数组后还具有以下步骤:对所述二维数组进行除噪处理,去除所述二维数组中的瑕疵点。

3.如权利要求 1所述的基于Android系统的手写数学公式识别及生成MathML的方法,所述步骤S4其特征在于,所述使用细化处理和轮廓提取方法提取特征值的步骤为: 531:使用细化算法对所述二维数组进行细化处理; 532:对所述二维数组提取轮廓,所述轮廓根据下列公式进行判断:\\p-p, l\p~p, NP1-Pi I[I A-Λ 1\Ρ~Ρ31<1 P1-P) I 令图像细化处理后的二维数组为G[h] [w],p, Pl, p2, p3的位置关系为:P=G[i] [j],pl=G[i] [j+1],p2=G[i+l] [j],p3=G[i+l] [j+1],其中,0 ( i〈h,0 ( j0p(/) = ^ ' ':/ = 1--6II5M/^ >0.1, ^ >0 ' IO

4.如权利要求3所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,使用细化算法对所述二维数组进行细化处理的方法为:将二维数组从左向右从上向下迭代每个点的值作为一个迭代周期,在每个迭代周期中,对于每一个点P,如果它同时满足阈值条件,则标记它,在当前迭代周期结束时,把所有标记的点的值设为O,如果某次迭代周期中不存在标记点,则算法结束;所述阈值条件为: O点P的值为I; 2)点P的上、下、左、右四个点的值不全部为I; 3)点P的3*3邻域中至少有2个点的值为1,所述点P的3*3邻域的8个点以点p右侧的点为起始点,按照逆时针顺序依次编号为xl,χ2, χ3, χ4, χ5, χ6, χ7, χ8 ; 4)点ρ的8连通联结数为1,所述联结数指在点P的3*3邻域中,与P连接的图形分量的个数,所述8连通联结数计算公式为:

5.如权利要求1所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,对所述二维数组的行和列分别进行降维处理,生成固定的维数包括以下步骤: 551:对二维数组进行降维处理,以固定的维数表示; 552:生成新的二维数组并对新的二维数组中的每一块进行赋值; 553:将二维数组中的值连起来生成固定长度的模板。

6.如权利要求1所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,在所述步骤S7中,采用三叉树结构定位数学公式的空间关系时,确定三叉树指针的指向方法为: 1)当所述数学公式的空间关系中存在包含结构时,所述包含结构中的包含体的边界包含其他字符,如果包含体的左右两侧均有被包含字符,则将存储信息为包含体的三叉树结点的左指针指向存储信息为所述包含体左侧字符的左子结点,将存储信息为包含体的三叉树结点的中指针指向存储信息为所述包含体右侧字符的中子结点; 2)当所述数学公式的空间关系中存在由分隔符分成的上下结构时,将存储信息为分隔符的三叉树结点的左指针指向存储信息为所述分隔符上方最左侧的字符的左子结点,将存储信息为分隔符的三叉树结点的中指针指向存储信息为所述分隔符下方最左侧的字符的中子结点; 3)当所述数学公式的空间关系中存在上下标结构时,将存储信息为被标注字符的三叉树结点的左指针指向存储信息为上标的左子结点,将存储信息为被标注字符的三叉树结点的中指针指向存储信息为下标的三叉树中子结点; 4)当所述数学公式的空间关系中存在左右结构时,将存储信息为左侧字符的三叉树结点的右指针指向存储信息为右侧字符的右子结点。

7.如权利要求6所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,所述三叉树根节点的确定方法为: 当数学表达式的最左侧字符的空间关系中没有上下结构或包含结构时,则所述最左侧字符即为根节点; 当数学表达式的最左侧字符的空间关系中有上下结构或包含结构时,则先标记所述最左侧字符为根结点,然后检查包含所述最左侧字符的上下结构或包含结构中是否有特定字符,所述特定字符的种类包括分式,根号或求和符号,若有,则根结点改为特定字符,否则根结点不变。

8.如权利要求6或7所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,三叉树建立的方法为: 581:初始化一个空队列Q,将查找的根结点放进队列Q的队尾中; 582:从队列Q的队头取出一个三叉结点,记为N,对结点N的存储信息中的字符进行空间关系判断,判断是否存在所述包含结构,上下结构或上下标结构,若有,则执行步骤S83,若没有,则判断是否存在所述左右结构,若有,则执行转入步骤S84,若无,则执行步骤S85 ; 583:按照权利要求6所示的方法将所述三叉结点N的左指针和中指针指向其子结点,同时将其子结点依次从队尾进入队列Q,对三叉结点N的存储信息中的字符进行空间关系判断,判断是否存在所述左右结构,若有,执行步骤S84,若无,则执行步骤S85 ; 584:根据所述权利要求6所示的存在上下标结构时三叉树指针的指向方法,将三叉结点N的右指针指向其子三叉结点,同时将其子结点从队尾进入队列Q中,返回步骤S82 ; S85:判断队列Q是否为空,若队列Q不为空,则返回步骤S82,若队列为空,则摧毁队列,算法结束。·

9.如权利要求6或7所述的基于Android系统的手写数学公式识别及生成MathML的方法,其特征在于,在所述步骤S7中,使用三叉树的先序算法进行排序得到MathML的方法为: 如果某一个三叉树结点有左孩子或中孩子,则先查看所述三叉树结点存储的字符的类型,根据不同的类型生成不同的MathML标记语言,将所述三叉树结点的左孩子和中孩子放进所述MathML标记语言中,将所述三叉树结点的右孩子放在所述三叉树结点的MathML标记语言外。

全文摘要

本发明提出了一种基于Android系统的手写数学公式识别及生成MathML的方法,包括如下步骤采集绘图板上手写字符的离散坐标序列,得到字符的边界信息;在处理器内生成一个初始图像,将采集的离散坐标序列画在初始图像中,将图像剪切成只包含字符的字符图像;对字符图像进行灰度处理和二值化处理;提取特征值;对二维数组的行和列分别进行降维处理;根据特征值进行粗分类,将所要识别的字符先固定到某一类中,再使用BP神经网络进行字符匹配,得到最优字符;采用三叉树结构定位数学公式的空间关系,使用三叉树的先序算法进行排序,得到MathML;浏览器对MathML进行显示。本发明的基于Android系统的手写数学公式识别及生成MathML的方法能够减少误识率,提高系统性能。

文档编号G06K9/20GK103235945SQ20131010018

公开日2013年8月7日 申请日期2013年3月27日 优先权日2013年3月27日

发明者王少青, 胡龙灿, 孙怀义, 樊爱军, 钟琼茹, 夏国庆, 陆科成 申请人:重庆市科学技术研究院

android 手写字体识别,一种基于Android系统的手写数学公式识别及生成MathML的方法...相关推荐

  1. 浅析一种基于Android、iOS平台的移动端银行卡识别方法,简化移动支付中卡号绑定过程

    近些年来,我国经济飞速发展,科技实力日益突飞猛进.手机移动端的使用给人们的生活带来了许多便利.日常生活中,移动端支付的方式越来越流行.手机端进行支付往往需要绑定银行卡.目前,在众多需要录入银行卡信息才 ...

  2. 一种基于Android、iOS平台的移动端车牌识别方法,能够在复杂背景下迅速识别多种车牌

    随着智慧城市愿景的推广,以及车辆管理需求的迅猛扩增,对于各类车辆识别系统有了新的要求.而以往的固定式特定设备的车牌识别系统已经不能够满足灵活的智能交通系统需求,例如路边停车管理和交管违章登记等.本文简 ...

  3. android智能识别技术,一种基于Android的智能心音听诊与识别系统

    主权项: 1. 一种基于Android的智能心音听诊与识别系统,其特征在于:包含心音采集设备以及Android手机,心音采集硬件设备由驻极体话筒.30Hz到500Hz滤波器.主控制芯片.蓝牙芯片模组. ...

  4. android流程点击开机键熄屏,一种基于android系统的灭屏状态下指纹解锁加速亮屏方法与流程...

    本发明涉及android系统解锁显示方法,尤其涉及一种基于android系统的灭屏状态下指纹解锁加速亮屏方法. 背景技术: 目前,随着指纹技术越来越普及,很多android系统设备都带有指纹外设,特别 ...

  5. 残疾人手语交流辅助系统手语识别与翻译基于数据手套的虚拟手的实现

    残疾人手语交流辅助系统手语识别与翻译&&基于数据手套的虚拟手的实现 1. 特征提取 原始数据含有背景等大量无用成分,通过骨架技术,直接获得手的运动信息,减小问题复杂度.硬件和软件使用的 ...

  6. android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...

    本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法. 背景技术: 目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一.传 ...

  7. 在android添加数据采集,一种基于Android系统的地理信息数据采集方法与流程

    本方法属于采集地理信息数据的发明,是一种基于android操作系统和gis地理信息系统进行户外地理信息数据采集的方法. 背景技术: 众所周知地理信息数据采集在很多行业中都有应用,比如说农业中的土地普查 ...

  8. android 订餐系统,一种基于Android平台手机订餐系统的实现方法

    一种基于Android平台手机订餐系统的实现方法[ 技术领域: ][0001]本发明涉及一种手机订餐系统,能够通过手机上的Android软件实现订餐.[ 背景技术: ][0002]目前已有的网上订餐系 ...

  9. android 获取hdmi数据格式,一种基于Android系统HDMI同显时节省带宽的方法与流程

    本发明涉及一种基于Android系统HDMI同显时节省带宽的方法,属于计算机领域. 背景技术: 通常很多移动设备都配备了小尺寸的LCD屏幕,有些使用场景为了能提供更好的交互控制操作,需要移动设备在大尺 ...

最新文章

  1. 无人驾驶汽车系统入门——基于Frenet优化轨迹的无人车动作规划方法
  2. dpi shell命令 安卓_android 中 dumpsys 命令使用
  3. Oracle Sql技巧 - Upsert, Multitable Insert, Undrop
  4. 基于double-check模式尝试将消息放到batch中
  5. 关于百度地图api测距显示NaN的解决方案
  6. ibd finance
  7. 重庆邮电大学java试题_Java程序设计
  8. Sklearn (一) 监督学习
  9. Java经典实例:比较浮点数
  10. 带有Spring Boot 2支持的Apache Camel 2.22发布
  11. 第三章 Joomla!扩展开发:后端开发
  12. 重写GridView支持数据筛选和自动排序功能
  13. ASP.NET页面生命周期概述
  14. gramer法则matlab,线性代数-matlab实验报告.doc
  15. java获取年份getyear_Java LocalDateTime getYear()用法及代码示例
  16. luoguP3600 随机数生成器 期望概率DP + DP优化
  17. VMware下虚拟系统上网与互ping
  18. java组件名词解释_简述Java EE三类组件的构成及运行环境。
  19. CuteEditor 6.0 在线HTML编辑器的领航者
  20. android 方向键 按钮,这不科学!安卓虚拟按键、实体键谁更好?

热门文章

  1. 金融行业安全漏洞分析报告
  2. 编写运行最简单的java程序——使用记事本编写java程序
  3. UITableView模版
  4. Linux下使用mv重命名文件或者移动文件(增强版的工具为rename)
  5. vim block vim_如何不再害怕Vim
  6. hitchhiker部署_Hitchhiker的React Router v4指南:无限远的递归路径!
  7. 基于matlab的硅晶体模型,基于Matlab的图像处理技术识别硅太阳电池的缺陷
  8. 80070583类不存在_Java自学-接口与继承 内部类
  9. (C++)1011 World Cup Betting
  10. 在linux上装git教程,教你玩转Git-Linux 平台上安装