自由手写体数字识别系统的设计与实现
手写体数字识别研究及系统实现
手写体数字识别研究及系统实现随着人工智能的快速发展,机器学习和深度学习等技术正在飞速发展。
手写体数字识别作为人工智能的一个重要应用领域,正在得到越来越广泛的关注。
手写体数字识别技术的核心是构建一个准确、高效的数字识别算法。
本文将从手写体数字识别的必要性、技术原理、算法实现和应用场景四个方面,探讨手写体数字识别研究及系统实现。
一、手写体数字识别的必要性手写体数字识别的最初应用是在邮政系统中。
随着互联网的普及和电子商务的兴起,手写体数字识别逐渐成为数字图像处理领域的一个重要技术。
手写体数字识别的应用领域非常广泛,例如智能化识别信用卡、护照、身份证、驾驶证、学生证等证件上的手写数字信息,以及检测、追踪和分类许多与手写数字密切相关的信息。
手写体数字识别的技术研究和发展能有效促进数字信息技术的发展,提高数字信息技术在各行各业中的应用。
二、手写体数字识别的技术原理手写体数字识别技术原理主要是数字图像处理技术。
数字图像处理技术是一门研究数字图像的获取、处理、传输和显示的学科,主要包括图像获取、预处理、特征提取与选择、分类与识别等四个方面。
图像获取是数字图像处理技术的第一步,通过将纸质文档或图像数字化,即根据摄影原理或扫描原理将成像的二维图像转换成数字信号。
预处理是指对图像进行增强、滤波、降噪等操作,以使原始图像能够更好地适应后续处理需求。
特征提取与选择是指从图像中提取有助于识别和分类的特征,以还原图像中的数字信息。
分类与识别是指学习和选择分类器,正确分类和识别数字图像。
三、手写体数字识别的算法实现手写体数字识别的算法实现可以分为三个阶段:前端特征提取、分类器设计和后处理。
前端特征提取是将手写数字转换成具有辨别性的数学向量的过程,即将手写数字的图像进行预处理和特征提取,产生用于后续处理的特征向量。
常用的特征提取方法包括灰度直方图、傅里叶描述符、Zernike描述符、矩形描述符等。
分类器设计是定义分类器的类型和参数并进行训练的过程。
手写数字识别系统的设计与实现
手写数字识别系统的设计与实现摘要本手写数字识别系统是一个以VISUAL STUDIO C++ 6.0为编译环境,使用MFC进行图形图像界面开发的系统。
主要功能是通过在点击手写数字识别菜单下的绘制数字标签弹出的绘制数字窗口中完成数字的手写,在此窗口中可以进行数字的保存及清屏,然后通过文件菜单中的打开标签打开所绘制的数字,从而进行数字的预处理,其中包括灰度化及二值化处理,然后进行特征提取,最后实现数字的识别。
本系统的界面设计友好,流程正确,功能也较为完善。
实验结果表明,本系统具有较高的识别率。
关键词:绘制数字;预处理;特征提取;特征库;数字识别目录前言 (4)概述 (5)1 需求分析 (6)1.1 功能需求分析 (7)1.2 性能需求分析 (7)1.3 数据需求分析 (8)1.4 相关软件介绍 (8)2 手写数字识别系统的设计与基本原理 (8)2.1 系统整体功能模块设计 (8)2.2 手写数字识别系统的基本原理 (9)2.2.1 数字图像的绘制 (9)2.2.2 图像的预处理 (9)2.2.3 图像的特征提取 (10)2.2.4 特征库的建立 (10)2.2.5 图像数字的识别 (11)3 手写数字识别系统程序设计 (11)3.1 数字图像的绘制 (11)3.2数字的特征提取 (17)3.3 模板特征库的建立 (20)3.4 数字的识别 (22)总结 (25)致谢..................................... 错误!未定义书签。
参考文献 (25)前言自上世纪六十年代以来,计算机视觉与图像处理越来越受到人们的关注,并逐渐成为一门重要的学科领域。
而作为它们的研究对象的数字图像,也因为它含有研究目标的丰富信息而成为越来越重要的研究对象。
图像识别的目标是用计算机自动完成某些信息的处理,用来替代人工去处理图像分类及识别的任务。
手写数字识别是图像识别学科下的一个分支,是图像处理和模式识别领域研究的课题之一,由于其具有很强的实用性一直是多年来的研究热点。
手写数字识别的实现
燕山大学课程设计说明书题目:手写数字识别的实现学院(系):电气工程学院年级专业: 08-自动化仪表学号: 080103020179学生姓名:付成超指导教师:林洪彬程淑红教师职称:讲师讲师2010年 12 月 24 日燕山大学课程设计(论文)任务书院(系):电气工程学院基层教学单位:自动化仪表系学号080103020179 学生姓名付成超专业(班级)自动化仪表设计题目手写数字识别实现设计技术参数通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率设计要求设计图像中不同数字的识别方法,可以先从两个数字的识别开始,尽量实现多个不同数字的识别。
设计中应该有自己的思想、设计体会工作量1.分析图像特征,查阅相关资料,根据图像的特征提出解决问题的思路。
2.查阅相关资料,学会MATLAB的编程方法3.根据解决思路,编辑程序,根据调试结果,修改相应思路,找出最佳解决方案工作计划周一分析图像,查阅各种资料,提出可行的解决方案。
周二熟悉MATLAB软件,学会软件的简单编程方法。
周三根据可行的方法,编写程序,调试并修改方案。
周四根据调试结果,选取最佳方案并完成设计论文。
周五进一步完善设计论文,准备论文答辩。
参考资料[] MICHAEL SIPSER著,张立昂等译,《计算理论导引》,机械工业出版社,2000。
[2] 王晓龙,关毅等编,《计算机自然语言处理》,清华大学出版社,2005。
[3] R.C.Gonzales等著,阮秋崎等译,《数字图像处理》,电子工业出版社,2002。
[4] 王文杰等编,《人工智能原理》,人民邮电出版社,2003。
指导教师签字基层教学单位主任签字2010年 12 月 24 日燕山大学课程设计评审意见表指导教师评语:工作态度认真较认真不认真理论分析正确完善较为合理一般较差方法设计完善合理一般较差成绩:指导教师:年月日答辩小组评语:原理清晰基本掌握了解不清楚设计结论正确基本正确不正确成绩:评阅人:年月日课程设计总成绩:答辩小组成员签字:赵彦涛、吴飞、林洪斌、程淑红2010年12 月24 日数字图像中手写数字识别的实现摘要:数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
手写字体识别算法及实现
手写字体识别算法及实现在日常生活中,手写字体识别算法是一个非常实用的技术。
无论是在自动化填写表格、邮寄信件、更改合同等方面,都经常需要使用手写字体识别技术。
因此,手写字体识别技术的发展变得越来越受到人们的关注。
本文将介绍手写字体识别算法及其实现的相关内容。
一、什么是手写字体识别算法?手写字体识别算法是一种模式识别算法,利用计算机通过对字体形态的识别来识别手写字体。
在手写字体识别算法中,有两个主要步骤:训练和测试。
在训练阶段,算法会学习样本数据中的特征和规律,得出一些针对特定手写字体的规则。
在测试阶段,算法将识别新的未知样本,比较它们与训练阶段学习到的规则,从而确定它们的类别。
手写字体识别算法可以分为多个不同的类别,例如隐马尔可夫模型、支持向量机、神经网络等。
每个算法都有其独特的优点和适用场景。
二、手写字体识别算法的实现手写字体识别算法的实现主要包括数据处理、特征提取和分类器构建三个阶段。
1. 数据处理数据处理阶段需要对手写字体数据进行预处理,以使其易于识别。
预处理的方法包括平滑、二值化和重定位等。
平滑可以减少图像中的噪声,二值化可以将图像范围转换为黑白两种颜色,重定位可以将图像位置调整为标准位置。
2. 特征提取特征提取阶段需要选取代表性的特征来表示手写字体。
常用的特征包括像素数量、等高线、垂线数、跳变次数等。
其中,等高线特征是一种更加高效和精确的特征提取方法。
3. 分类器构建分类器构建是将手写字体识别算法应用到实际场景中的关键步骤。
常用的分类器包括支持向量机、神经网络和隐马尔可夫模型等。
其中,支持向量机是一种非常常用的分类器,具有学习效率高、分类准确率高等优点。
三、手写字体识别算法的应用手写字体识别算法可以广泛应用于各种场景,例如邮寄地址识别、手写数字识别、汉字字形识别等。
除此之外,手写字体识别算法还可以用于其他应用,例如自动化签名识别、医学记录识别等。
在日常生活中,手写字体识别算法的应用越来越广泛,可以帮助人们更加高效地完成工作。
手写体汉字识别系统的设计与实现
手写体汉字识别系统的设计与实现1. 系统简介手写体汉字识别系统是一种将手写汉字图像识别为文字的技术,可以广泛应用于自然语言处理、OCR识别、智能手写输入、数字化文档等领域。
本系统采用卷积神经网络(CNN)进行手写汉字的分类识别。
2. 数据预处理为了提高识别率,需要对手写汉字图片进行预处理。
常见的预处理方法包括二值化、去噪、裁剪、拉伸等,以消除干扰噪声,使图像更具有对比度。
在本系统中,采用了以下预处理过程:2.1 二值化将彩色或灰度图像转换为黑白二值图像,目的是为了方便后续图像处理和分类。
本系统采用自适应阈值二值化算法,可根据图像局部分布自适应地确定二值化阈值,能有效改善不同光照条件下的图像质量。
2.2 去噪噪声是影响图像质量和分类结果的主要因素之一。
本系统采用中值滤波算法,能够有效地去除高斯噪声,保留汉字图像的边缘信息和特征。
2.3 裁剪为便于分类器对手写汉字进行识别,需要将图像按照边缘进行裁剪,去除多余背景信息。
本系统采用轮廓检测算法进行边缘提取和裁剪,以确保分类精度和速度。
2.4 拉伸为解决汉字字符样式和尺寸不一致的问题,需要将图像进行拉伸,使每个字符的尺寸和比例保持一致。
本系统采用等比例缩放算法,能够有效保留汉字特征和风格。
3. 特征提取特征提取是识别系统的核心步骤之一,目的是将原始汉字图像转换成一组可以用于分类的特征向量。
本系统采用卷积神经网络(CNN)对手写汉字进行特征提取和分类,其特点是可以从原始数据中进行自动学习,减少特征处理的复杂度。
4. 分类识别分类识别是系统的最后一步,目的是将手写汉字图像判定为特定的汉字字符,同时提供显著性分值和置信度。
本系统采用softmax分类器和交叉熵损失函数对手写汉字进行分类和识别,能够有效地提高识别精度和鲁棒性。
5. 总结手写体汉字识别系统是一项关键技术,具有广泛应用前景。
本系统采用卷积神经网络进行特征提取和分类识别,通过数据预处理、特征提取、分类识别等步骤,能够实现高效准确的手写汉字识别。
手写体数字识别实验报告
软件学院12-13-2学期《人工智能》课程项目报告题目:使用SMO方法进行手写体数字识别目录软件学院12-13-2学期《人工智能》课程项目报告 (1)1 问题描述 (2)2 二值化处理 (2)2.1 思想: (2)2.2 OSTU算法: (2)2.3 OTSU算法伪代码: (2)3 降维处理 (2)4.半监督算法 (4)4.1半监督算法流程: (4)4.2半监督算法的主要算法: (4)1)self-Training models: (4)2)Propagating-1-nearest-neighbor: (4)3)CLUSTER-THEN-LABELMETHODS (4)4)Co_Training: (4)5)基于图的算法(Graph based Learning): (5)4.4半监督学习分类算法的现实价值: (5)5 我使用SVM的SMO算法 (5)5.1 SMO算法基本思想: (5)5.2 应用SMO算法的流程: (5)6 性能分析 (6)6.1.监督学习 (6)6.2.半监督学习(Tri-training) (6)6.3 我们用J48,SMO, NaiveBayes以及BayesNet四种算法对降维后的算法进行训练并求出其准确性,得到如下数据 (7)7 思考总结 (7)1 问题描述手写体数字识别问题,简而言之就是识别出10个阿拉伯数字,由于数字的清晰程度或者是个人的写字习惯抑或是其他,往往手写体数字的形状,大小,深浅,位置会不大一样。
现在我们拥有3006个带标记的数据以及56994的未带标记的数据,而我们的目标就是正确识别出这些手写体数字。
因此我们可以把这些带标记的数据看作经验值,运用一定算法来学习,预测出这些未带标记的数据。
对问题的分析如下:1 考虑到每个值都是0-255之间的一个整型值,对于算法的分析操作会影响性能,我将每个值进行了二值化,变成0,1。
2 考虑到这些数据都是28×28=784维的,维数太大,在后续的学习过程中效率会很低,我对它进行了降维处理。
(完整版)基于神经网络的手写数字识别系统的设计与实现毕业论文
中南大学本科生毕业论文(设计)题目基于神经网络的手写数字识别系统的设计与实现目录摘要 (Ⅰ)ABSTRACT (Ⅱ)第一章绪论 (1)1.1手写体数字识别研究的发展及研究现状 (1)1.2神经网络在手写体数字识别中的应用 (3)1.3 论文结构简介 (4)第二章手写体数字识别 (5)2.1手写体数字识别的一般方法及难点 (5)2.2 图像预处理概述 (6)2.3 图像预处理的处理步骤 (6)2.3.1 图像的平滑去噪 (6)2.3.2 二值话处理 (7)2.3.3 归一化 (8)2.3.4 细化 (10)2.4 小结 (11)第三章特征提取 (12)3.1 特征提取的概述 (12)3.2 统计特征 (12)3.3 结构特征 (13)3.3.1 结构特征提取 (14)3.3.2 笔划特征的提取 (14)3.3.3 数字的特征向量说明 (15)3.3 知识库的建立 (15)第四章神经网络在数字识别中的应用 (17)4.1 神经网络简介及其工作原理 (17)4.1.1神经网络概述[14] (17)4.1.2神经网络的工作原理 (17)4.2神经网络的学习与训练[15] (18)4.3 BP神经网络 (20)4.3.1 BP算法 (20)4.3.2 BP网络的一般学习算法 (21)4.3.3 BP网络的设计 (22)4.4 BP学习算法的局限性与对策 (26)4.5 对BP算法的改进 (27)第五章系统的实现与结果分析 (29)5.1 软件开发平台 (29)5.1.1 MATLAB简介 (29)5.1.2 MATLAB的特点 (29)5.1.3 使用MATLAB的优势 (30)5.2 系统设计思路 (30)5.3 系统流程图 (31)5.4 MATLAB程序设计 (31)5.5 实验数据及结果分析 (32)结论 (27)参考文献 (28)致谢 (30)附录 (31)摘要手写体数字识别是模式识别中一个非常重要和活跃的研究领域,数字识别也不是一项孤立的技术,它所涉及的问题是模式识别的其他领域都无法回避的;应用上,作为一种信息处理手段,字符识别有广阔的应用背景和巨大的市场需求。
(完整版)手写体数字识别系统设计毕业设计
石河子大学信息科学与技术学院毕业论文课题名称:手写体数字识别系统设计学生姓名:学号:学院:信息科学与技术学院专业年级:电子信息工程2007级指导教师:职称:完成日期:二○一一年六月十一日手写体数字识别系统设计学生:指导教师:[摘要] 随着科学技术的迅速发展,在邮政编码、统计报表、财务报表、银行票据等处理大量字符信息录入的场合,手写数字识别系统的应用需求越来越强烈,如何将数字方便、快速地输入到计算机中已成为关系到计算机技术普及的关键问题。
本文设计实现了一个基于Matlab软件的手写体数字识别系统,采用模块化设计方法,编写了摄像头输入、直接读取图片、写字板输入三个模块,利用摄像头等工具,将以文本形式存在的手写体数字输入进计算机,完成对手写体数字图片的采集,并设计了一种手写数字识别方法,对手写体数字图像进行预处理、结构特征提取、分类识别,最终以文本形式输出数字,从而实现手写体数字的识别。
[关键词] 预处理,结构特征提取,分类识别,手写体数字识别Handwritten Digit Recognition SystemStudents:Teacher:Abstract:With the rapid development of science and technology, in zip code, statistics, reports, financial statements, Bank bills dealing with a large number of characters, such as information recorded occasions, handwritten digit recognition system of requirement has become stronger and stronger, how easily and quickly the number entered in the computer has become a key issue relates to the popularization of computer technology. This article design implementation has a based on Matlab software of handwriting body digital recognition system, used module of design method, write has camera entered, and directly read pictures, and write Board entered three a module, using camera, tools, will to text form exists of handwriting body digital entered into computer, completed on handwriting body digital pictures of collection, and design has a handwriting digital recognition method, on handwriting body digital image for pretreatment, and structure features extraction, and classification recognition, eventually to text form output digital, to implementation handwriting body digital of recognition.Key words: Pretreatment, structure feature extraction, classification and recognition, handwritten digit recognition.目录第一章引言 (1)1.1课题背景 (1)1.2课题研究目的及意义 (2)1.2.1 手写体数字识别的研究目的 (2)1.2.2 手写体数字识别的研究意义 (3)1.3课题研究现状及发展趋势 (3)1.4课题整体结构 (5)1.5课题难点分析 (5)第二章开发运行环境 (6)2.1系统开发环境和运行环境 (6)2.2开发工具介绍 (6)2.2.1 硬件部分介绍 (6)2.2.2 软件部分介绍 (8)第三章手写体数字识别系统构成及原理 (10)3.1图像处理基础知识 (10)3.2手写体数字识别系统构成 (13)3.3手写体数字识别系统原理 (13)3.3.1预处理 (13)3.3.2图像分割 (17)3.3.3特征提取 (19)3.3.4分类识别 (20)第四章手写体数字识别系统设计分析 (21)4.1程序主界面 (21)4.2基准库的选择与建立 (23)4.3手写体数字识别系统设计 (23)4.3.1摄像头输入模块的设计 (23)4.3.2直接读图模块的设计 (25)4.3.3写字板输入模块的设计 (27)第五章系统性能评价及实验结果分析 (30)5.1识别系统性能的评价 (30)5.2实验结果分析 (31)第六章结论 (33)6.1毕业设计总结 (33)6.2课题前景与展望 (34)致谢 (37)参考文献 (37)附录 (39)附1、识别部分主程序 (39)附2、创建模板部分函数 (40)附3、切割图片部分函数 (42)附4、输出图片部分函数 (43)第一章引言1.1 课题背景数字已有数千年的历史,在世界上使用很广,然而,在当今社会里,如何快速高效地将数字输入计算机,已成为影响人机接口效率的一个重要瓶颈,也关系到计算机能否真正在我国得到普及应用[1]。
手写数字识别实验报告
手写数字识别实验报告最近,手写数字识别技术受到越来越多的关注,各种手写数字识别系统也被广泛应用于实际应用中。
为了验证手写数字识别技术的有效性,本实验选择了国际上最流行的MNIST数据集,实现了一个深度学习模型,用来实现对手写数字的自动识别。
本实验步骤如下:一、数据集的准备本实验使用MNIST数据集。
MNIST数据集是一个包含60,000个训练图像和10,000个测试图像的数据集,所有图像都是灰度图像,每个图像都是28×28像素大小,每张图片都标记有0-9的数字,图像所属的类别。
二、模型构建本实验使用Convolutional Neural Network(CNN)构建模型,CNN是一种卷积神经网络,具有卷积层、池化层和全连接层等,可以有效提取图像中的特征。
本实验CNN模型构建方法:(1)卷积层:积核大小为3×3,输入通道为1,输出通道为64,采用ReLU激活函数;(2)池化层:用最大池化操作,池化窗口大小为2×2;(3)全连接层:入节点数为1024,输出节点为10,采用Softmax 激活函数。
三、模型训练本实验使用python的Keras库,并采用Adam作为优化器,学习率为0.001。
本实验使用训练集中的50,000图像训练模型,使用另外10,000图像作为测试集,训练次数为20次,每次训练500张图片。
四、结果分析本实验模型最终在测试集上的准确率达到99.32%,属于公认的良好水准。
从精度曲线图可以看出,模型的精度在训练的过程中持续上升,训练时间也在不断减少,说明模型越来越稳定,具有良好的泛化能力。
综上所述,本实验通过使用CNN模型,基于MNIST数据集,实现对手写数字的自动识别,达到了良好的效果。
本实验设计技术有助于提高手写数字识别技术的应用水平,为相关领域的研究提供了参考依据。
基于ARM9的手写体数字识别技术设计与实现
c h i p s ,i l l u s t r a t e d t h e r e a l i z a t i o n f e a s i b i l i t y o f h a n d wr i t t e n n u me r a l r e c o g n i t i o n f u n c t i o n o n ARM p l a t f o r m. An d t h e n c o n f i g u r a t e d a nd d e — bu g g e d t he LCD a n d t he t o u c h s c r e e n .Fi n a l l y mi g r a t e d Li n u x s y s t e m t o ARM p l a t f o r m ,a n d c o mb i n e d t he de v e l op me n t o f t h e c ur r e n t i ma g e r e c o g ni t i o n t e c h n o l o g y,t h i s p a p e r e x p o u n d e d t h e ma i n me t h o ds o f i ma g e p r e p r o c e s s i n g i n p a t t e r n r e c o g n i t i o n p r o bl e ms,a na l y z e d t he ma t h e — ma t i c s pr i n c i p l e s o f e a c h mo d u l e i n t h e i ma g e p r e t r e a t me n t p r o c e s s . K ey W or ds ARM ,n e ur a l n e t wo r k,h a n d wr i t i n g r e c o g n i t i o n,t ou c h s c r e e n Cl a s s Nu mb e r TP 39 1
基于KNN的手写数字模式识别设计与实现代码大全
基于模式识别系统的设计与实现1.1 题目的主要研究内容(1)运用KNN算法实现手写数字识别过程的主要描述:直接从sklearn 中加载自带的手写数字数据集,通过可视化的方式来查看图像的呈现;接着让数据规范化可以让数据都在同一个数量级的维度。
将全部的图像数据作为特征值矩阵;最后通过训练可以得到KNN分类器,然后用测试集进行准确率的计算。
下图是系统流程图:(2)运用图像特征提取算法LBP,在图像颜色调成黑白色的基础上,以及使用像素点描绘图像和画出图像的大致轮廓。
1.2 题目研究的工作基础或实验条件(1)硬件环境Win10 Intel(R)(2)软件环境(开发工具python)1.3 数据集描述(1)手写数字数据集:包含1797个0-9的手写数字数据,每个数据由8 * 8 大小的矩阵构成,矩阵中值的范围是0-16,代表颜色的深度。
(2)在网上下载的16张演员图像1.4 特征提取过程描述(1)手写数字数据集中的1797个数据,代表了0~9是个数字类别,每个数据由8 * 8 大小的矩阵构成,矩阵中值的范围是0-16,代表颜色的深度,颜色越深,矩阵中的值越大。
根据颜色的深度可以描绘出大致轮廓,因此可以判断此数据属于那一个数。
(2)运用cv2.cvtColor将原图像进行灰色处理,接着利用图像特征提取算法:LBP,实现在灰色图像的基础上用像素点处理,再用filters.sobel对图像进行轮廓的提取。
1.5 分类过程以及准确率描述(1)通过上文的特征提取过程,将1797个包含0-9的手写数字的数据,识别出了0、1、2、3、4、5、6、7、8、9十个数,如果以0~9中的每个数代表一类,这样就把1797个数据集分成了0~9一共十个类别。
分割数据,将25%的数据作为测试集,其余作为训练集,创建KNN分类器对准确率进行计算。
(2)无分类过程1.6 主要程序代码(要求必须有注释)(1)程序一:from sklearn.model_selection import train_test_splitfrom sklearn import preprocessingfrom sklearn.metrics import accuracy_scorefrom sklearn.datasets import load_digitsfrom sklearn.neighbors import KNeighborsClassifierimport matplotlib.pyplot as plt#加载数据digits = load_digits()data = digits.data#数据探索print(data.shape)# 查看第七幅图像print(digits.images[6])# 第七幅图像代表的数字含义print(digits.target[6])# 将第七幅图像显示出来plt.gray()plt.imshow(digits.images[6])plt.show()# 分割数据,将25%的数据作为测试集,其余作为训练集train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.25, random_state=33)# 采用Z-Score规范化ss = preprocessing.StandardScaler()train_ss_x = ss.fit_transform(train_x)test_ss_x = ss.transform(test_x)# 创建KNN分类器knn = KNeighborsClassifier(n_neighbors=4)knn.fit(train_ss_x, train_y)predict_y = knn.predict(test_ss_x)print("KNN准确率: %.4lf" % accuracy_score(test_y, predict_y))(2)程序二:import skimageimport numpy as npimport matplotlib.pyplot as pltfrom PIL import Imageimport cv2# settings for LBPradius = 1 # LBP算法中范围半径的取值n_points = 8 * radius # 领域像素点数# 读取图像image = cv2.imread('D:\SogouDownload/a/16.jpeg')#显示到plt中,需要从BGR转化到RGB,若是cv2.imshow(win_name, image),则不需要转化#显示原图像image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.subplot(111)plt.imshow(image1)plt.show()#将图像颜色调成灰色image = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)plt.subplot(111)plt.imshow(image, plt.cm.gray)plt.show()#利用像素点描绘图像lbp = local_binary_pattern(image, n_points, radius)plt.subplot(111)plt.imshow(lbp, plt.cm.gray)plt.show()#进行轮廓提取edges = filters.sobel(image)plt.subplot(111)plt.imshow(edges, plt.cm.gray)plt.show()1.7 运行结果及分析(1)第七幅图像(2)图像特征后的图像(示例)原图像描绘图像轮廓用像素点处理图像。
手写数字识别技术研究与实现
手写数字识别技术研究与实现随着科技的不断进步,人们的生活已经越来越离不开数字技术。
数字的出现使得人们的沟通变得更加方便快捷,数据的存储也变得更加便捷和安全。
然而,要让计算机能够真正地理解我们的数字需要一些特殊的技术。
手写数字识别技术正是其中之一。
一、手写数字识别技术手写数字识别技术是计算机视觉领域的一个重要应用。
其目的在于通过计算机对人类手写数字进行识别,实现计算机对人类数字信息的真正理解。
这个技术应用十分广泛,例如银行的手写数字支票识别、签名检测、数码相机的图像处理等。
通过手写数字识别技术,计算机能够自动化地分析和理解手写数字,有效提高了信息的处理和利用效率。
二、手写数字识别技术实现的主要方法1. 基于图像处理技术的方法基于图像处理的方法是一种较为常见的手写数字识别技术实现方法。
其基本思路是:将手写数字进行数字化图像处理,然后再对数字化图像进行进一步处理和分析,从而实现数字的识别。
首先,这种方法需要将手写数字进行图像化处理。
中文手写数字是由一系列的笔画和连接部分组成的,通过图像处理技术可以将这些笔画和连接部分变成数字化的线条。
然后可以通过特定的算法,将这些数字化线条进一步处理,从而提取出手写数字的特征。
最后,通过比较和匹配,就可以得到最终的数字识别结果。
2. 基于神经网络的方法随着深度学习技术的发展,基于神经网络的手写数字识别技术也开始逐渐流行起来。
其基本思路是:将手写数字转化为图像形式后,通过训练神经网络模型进行学习,达到识别数字的目的。
神经网络模型本质上是一个数学模型,具有强大的计算能力和学习能力,可以通过误差反向传播算法进行训练。
在这种方法中,首先需要对手写数字进行图像化处理,形成数字化的二值图像。
随后,通过训练神经网络模型,将数字化的二值图像分为哪些数字区域,并通过多次训练来提取数字的特征。
最后,通过比较和分类,得到数字的最终识别结果。
三、手写数字识别技术的应用手写数字识别技术的应用非常广泛。
手写数字识别系统设计与实现
2、平 滑
法做 出决 策得 出 识 别结 果 ,从 而完 成 数字 识 别 的过 程 。 总 体
由于 数 字 采集 仪 采 集 到 的 图像 ,一 般 都 带有 一 些 不 可避
设 计 流 程 图 如 图 1所 示 。
免 的噪 声 点 。噪 声 的存 在 恶 化 了图 像质 量 ,使 图像 模 糊 ,更
』
j 滑处理一击除F扰噪声 }
上
特 扯 提取 ,提 取模 扳 特祉 值
消 除 孤 立 像 素 的一 种 技 术 。均 值 滤 波 往 往 不 只是 把 干 扰 去 除 ,还常 把 图象 的 边缘 模 糊 ,因而 造 成 视觉 上 的失 真 ,如 果 目 的 只 要 把 干 扰 去 除 , 而 不 是 刻 意 让 图 象 模 糊 , 则 中 值 滤 波 是 比较 好 的选 择 。 中值 滤波 法 是对 一 个 滑动 的 窗 口内 的诸 像
一 、
引 言
对 数 字字 符 图 像 二值 化 ,要求 二 值 化后 的图 像 能真 实 地
手写 体 数 字 识 别是 模 式识 别的 一 个 重要 分 支 ,它涉 及 模 再 现 原 本 数 字 ,其 基 本 要 求 为 :
式 识 别 , 图像 处 理 ,人 工 智 能 等学 科 , 是一 门综 合 性 技 术 ,
(a l , a 2 , a 3 , a 4 , a 5 , a 6 , a 7 . a 8. a 9)则
图 l 系统总 体结构 流程
用 ITI取 代 a 5即可 。
三 、手 写体 数 字识 别 系 统 设 计
本 系统 在设 计 时 主要 南数 据 采 集 、预 处 理 、特 征 提 取 和
a 2 a 3
基于深度学习的手写数字识别系统设计与实现
基于深度学习的手写数字识别系统设计与实现手写数字识别是计算机视觉领域中的一个重要研究方向,它可以应用于自动化识别、数字化转换以及人机交互等领域。
本文将介绍一种基于深度学习的手写数字识别系统的设计与实现。
一、引言在数字化时代,手写数字识别系统扮演着重要角色,为了提高人工误差和效率问题,基于深度学习的手写数字识别系统应运而生。
本文将采用卷积神经网络(Convolutional Neural Network,CNN)作为深度学习模型,并通过系统设计和实现的具体方法,达到提高手写数字识别准确率和效率的目的。
二、深度学习模型1. CNN模型简介CNN是一种深度学习模型,它通过多层卷积和池化层来提取输入数据的特征,并通过全连接层进行最终的分类。
CNN的特点是可以自动学习输入数据的特征,对于图像处理任务具有很好的效果。
2. CNN模型设计手写数字识别任务可以看作是一个图像分类问题,因此我们可以使用经典的CNN模型LeNet-5作为基础模型进行设计。
LeNet-5模型包含了两个卷积层、两个池化层和三个全连接层,能够有效提取手写数字的特征并进行分类。
在设计过程中,我们可以根据实际需求进行调整和优化,例如增加卷积层深度或者全连接层神经元数量等。
三、数据集准备1. 数据集介绍在进行手写数字识别系统设计与实现之前,首先需要准备一个适用于训练和测试的手写数字数据集。
常用的数据集有MNIST、SVHN等。
本文将以MNIST数据集为例进行介绍。
MNIST数据集是一个包含60000个训练样本和10000个测试样本的手写数字数据集,每个样本都是28x28的灰度图像。
2. 数据预处理在使用MNIST数据集进行训练之前,我们需要对数据进行预处理。
预处理步骤包括数据归一化、标签编码等。
归一化可以将原始像素值缩放到0-1的范围内,以便进行更好的训练效果。
标签编码是将原始类别信息进行one-hot编码,方便进行分类模型的训练。
四、系统实现1. 环境搭建在进行系统实现之前,需要搭建相应的开发环境。
基于模式识别的手写体文字识别系统设计
基于模式识别的手写体文字识别系统设计手写体文字识别技术是近年来人工智能领域取得的一个重要突破。
基于模式识别的手写体文字识别系统是实现自动识别手写文字的关键。
本文将从设计原理、算法选择、模型训练和性能评估等方面详细介绍基于模式识别的手写体文字识别系统的设计。
一、设计原理基于模式识别的手写体文字识别系统的设计原理是将手写文字作为输入,通过一系列特征提取、分类和识别算法,将手写文字转换为计算机可理解的文本。
系统的设计包括数据采集、预处理、特征提取和分类等步骤。
1. 数据采集:为了构建一个有效的手写体文字识别系统,需要收集足够数量和种类的手写文字样本作为训练集和测试集。
样本的多样性能够提高系统的鲁棒性和泛化性能。
2. 预处理:手写文字包含噪声、不规则形状和变化大小等问题,预处理阶段的目标是对手写文字图像进行去噪、二值化和大小标准化处理,使得输入图像符合模型的输入要求。
3. 特征提取:手写体文字的特征提取是手写体文字识别的核心任务。
常见的特征提取方法包括基于像素、轮廓、SIFT特征等。
特征提取的目标是将复杂的手写文字图像转换成计算机可处理的特征向量,保留文字的语义和形态信息。
4. 分类和识别:基于特征向量,可以使用机器学习或深度学习算法进行分类和识别。
常见的算法包括支持向量机(SVM)、卷积神经网络(CNN)等。
分类和识别阶段的目标是将特征向量映射到相应的文字类别或字母数字。
二、算法选择手写体文字识别系统的算法选择直接影响系统的性能和效果。
以下是常见的手写体文字识别算法:1. 支持向量机(SVM):SVM是一种常用的二分类模型,利用核函数将输入特征映射到高维空间,通过找到一个最优超平面来实现分类。
SVM算法对于小样本和多分类问题有较好的性能。
2. 卷积神经网络(CNN):CNN是一种深度学习模型,通过多层卷积和池化操作进行特征提取和分类。
CNN模型在图像识别领域取得了巨大成功,对于手写体文字识别同样适用。
基于 CNN 的手写体数字识别系统的设计与实现代码大全
题目 基于CNN 的手写体数字识别系统的设计与实现(居中,宋体小三号,加粗)1.1 题目的主要研究内容(宋体四号加粗左对齐)(1)实验实验内容是通过CNN 模型实现对MNIST 数据集的手写数字识别,并通过GUI 界面进行演示,通过tensorflow 环境来构建模型并进行训练(2)系统流程图1.2 题目研究的工作基础或实验条件(1)硬件环境开始 获取数据集 构建CNN 模型 训练模型 搭建GUI 界面 测试结果结束Windows10系统(2)软件环境开发工具:python语言开发软件:pycharm开发环境:tensorflow1.3 数据集描述MNIST 是一个大型的、标准易用的、成熟的手写数字体数据集。
该数据集由不同人手写的0 至9 的数字构成,由60000 个训练样本集和10000 个测试样本集成,每个样本的尺寸为28x28x1,以二进制格式存储,如下图所示:1.4 特征提取过程描述CNN 是一种前馈型的神经网络,其在大型图像处理方面有出色的表现。
相比于其他神经网络结构,如多层感知机,卷积神经网络需要的参数相对较少(通过局部感受野和权值共享)。
CNN 的三个思想:局部感知野、权值共享、池化,能够大大简化权重参数的数量,网络的层数更深而参数规模减小,利于模型的训练。
CNN 主要包含三层:卷积层、池化层和全连接层,且在卷积层后应加入非线性函数作为激活函数,提高模型的非线性函数泛化能力,以下是单层CNN 的结构图:特征提取采用CNN模型中的卷积层,具体问为使用卷积核来进行特征提取。
1.5 分类过程描述分类过程采用全连接层和Softmax分类函数实现,通过softmax回归来输结果。
softmax模型可以用来给不同的对象分配概率。
对于输入的x加权求和,再分别i加上一个偏置量,最后再输入到softmax函数中,如下图。
其计算公式为:1.6 主要程序代码(要求必须有注释)import sys, ossys.path.append(os.pardir) # 为了导入父目录的文件而进行的设定import numpy as npimport matplotlib.pyplot as pltfrom dataset.mnist import load_mnistfrom simple_convnet import SimpleConvNetfrom common.trainer import Trainer# 读入数据(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)# 处理花费时间较长的情况下减少数据#x_train, t_train = x_train[:5000], t_train[:5000]#x_test, t_test = x_test[:1000], t_test[:1000]max_epochs = 20network = SimpleConvNet(input_dim=(1,28,28),conv_param = {'filter_num': 30, 'filter_size': 5, 'pad': 0, 'stride': 1},hidden_size=100, output_size=10, weight_init_std=0.01)trainer = Trainer(network, x_train, t_train, x_test, t_test,epochs=max_epochs, mini_batch_size=100,optimizer='Adam', optimizer_param={'lr': 0.001},evaluate_sample_num_per_epoch=1000)trainer.train()# 保存参数network.save_params("params.pkl")print("Saved Network Parameters!")# 绘制图形markers = {'train': 'o', 'test': 's'}x = np.arange(max_epochs)plt.plot(x, trainer.train_acc_list, marker='o', label='train', markevery=2)plt.plot(x, trainer.test_acc_list, marker='s', label='test', markevery=2)plt.xlabel("epochs")plt.ylabel("accuracy")plt.ylim(0, 1.0)plt.legend(loc='lower right')plt.show()MODE_MNIST = 1 # MNIST随机抽取MODE_WRITE = 2 # 手写输入Thresh = 0.5 # 识别结果置信度阈值# 读取MNIST数据集(_, _), (x_test, _) = load_mnist(normalize=True, flatten=False, one_hot_label=False)# 初始化网络# 网络1:简单CNN"""conv - relu - pool - affine - relu - affine - softmax"""network = SimpleConvNet(input_dim=(1,28,28),conv_param = {'filter_num': 30, 'filter_size': 5, 'pad': 0, 'stride': 1},hidden_size=100, output_size=10, weight_init_std=0.01) network.load_params("params.pkl")# 网络2:深度CNN# network = DeepConvNet()# network.load_params("deep_convnet_params.pkl")class MainWindow(QMainWindow,Ui_MainWindow):def __init__(self):super(MainWindow,self).__init__()# 初始化参数self.mode = MODE_MNISTself.result = [0, 0]# 初始化UIself.setupUi(self)self.center()# 初始化画板self.paintBoard = PaintBoard(self, Size = QSize(224, 224), Fill = QColor(0,0,0,0))self.paintBoard.setPenColor(QColor(0,0,0,0))self.dArea_Layout.addWidget(self.paintBoard)self.clearDataArea()# 窗口居中def center(self):# 获得窗口framePos = self.frameGeometry()# 获得屏幕中心点scPos = QDesktopWidget().availableGeometry().center() # 显示到屏幕中心framePos.moveCenter(scPos)self.move(framePos.topLeft())# 窗口关闭事件def closeEvent(self, event):reply = QMessageBox.question(self, 'Message',"Are you sure to quit?", QMessageBox.Yes |QMessageBox.No, QMessageBox.Y es)if reply == QMessageBox.Y es:event.accept()else:event.ignore()# 清除数据待输入区def clearDataArea(self):self.paintBoard.Clear()self.lbDataArea.clear()self.lbResult.clear()self.lbCofidence.clear()self.result = [0, 0]"""回调函数"""# 模式下拉列表回调def cbBox_Mode_Callback(self, text):if text == '1:MINIST随机抽取':self.mode = MODE_MNISTself.clearDataArea()self.pbtGetMnist.setEnabled(True)self.paintBoard.setBoardFill(QColor(0,0,0,0))self.paintBoard.setPenColor(QColor(0,0,0,0))elif text == '2:鼠标手写输入':self.mode = MODE_WRITEself.clearDataArea()self.pbtGetMnist.setEnabled(False)# 更改背景self.paintBoard.setBoardFill(QColor(0,0,0,255))self.paintBoard.setPenColor(QColor(255,255,255,255))# 数据清除def pbtClear_Callback(self):self.clearDataArea()# 识别def pbtPredict_Callback(self):__img, img_array =[],[] # 将图像统一从qimage->pil image -> np.array [1, 1, 28, 28]# 获取qimage格式图像if self.mode == MODE_MNIST:__img = self.lbDataArea.pixmap() # label内若无图像返回Noneif __img == None: # 无图像则用纯黑代替# __img = QImage(224, 224, QImage.Format_Grayscale8)__img = ImageQt.ImageQt(Image.fromarray(np.uint8(np.zeros([224,224]))))else: __img = __img.toImage()elif self.mode == MODE_WRITE:__img = self.paintBoard.getContentAsQImage()# 转换成pil image类型处理pil_img = ImageQt.fromqimage(__img)pil_img = pil_img.resize((28, 28), Image.ANTIALIAS)# pil_img.save('test.png')img_array = np.array(pil_img.convert('L')).reshape(1,1,28, 28) / 255.0# img_array = np.where(img_array>0.5, 1, 0)# reshape成网络输入类型__result = network.predict(img_array) # shape:[1, 10]# print (__result)# 将预测结果使用softmax输出__result = softmax(__result)self.result[0] = np.argmax(__result) # 预测的数字self.result[1] = __result[0, self.result[0]] # 置信度self.lbResult.setText("%d" % (self.result[0]))self.lbCofidence.setText("%.8f" % (self.result[1]))# 随机抽取def pbtGetMnist_Callback(self):self.clearDataArea()# 随机抽取一张测试img = x_test[np.random.randint(0, 9999)] # shape:[1,28,28]img = img.reshape(28, 28) # shape:[28,28]img = img * 0xff # 恢复灰度值大小pil_img = Image.fromarray(np.uint8(img))pil_img = pil_img.resize((224, 224)) # 图像放大显示# 将pil图像转换成qimage类型qimage = ImageQt.ImageQt(pil_img)# 将qimage类型图像显示在labelpix = QPixmap.fromImage(qimage)self.lbDataArea.setPixmap(pix)if __name__ == "__main__":app = QApplication(sys.argv)Gui = MainWindow()Gui.show()sys.exit(app.exec_())1.7 运行结果及分析对模型进行训练,可以看到准确率可以达到98.8%。
基于机器学习的手写体识别系统设计与实现
基于机器学习的手写体识别系统设计与实现手写体识别是一种将手写文字转换为可被计算机识别的文本形式的技术。
在现代社会,手写体识别在很多领域都有广泛的应用,比如自动邮件分拣、数字签名识别、智能设备输入等。
为了解决手写体识别的问题,机器学习技术被广泛应用于该领域。
本文将介绍基于机器学习的手写体识别系统的设计与实现。
首先,我们需要准备一个大规模的手写体数据集。
数据集应该包含不同人群、不同风格的手写体样本,以确保我们的系统对各种手写风格都具有良好的识别能力。
可以通过收集现有的手写体样本或者利用生成手写体的技术来构建数据集。
接下来,我们需要对手写体数据进行预处理。
预处理的目的是将手写体图像转换为计算机能够理解的形式。
常见的预处理步骤包括图像二值化、噪声去除、字符分割等。
图像二值化将手写体图像转换为黑白图像,方便后续处理。
噪声去除可以通过滤波等方法来实现,以去除手写体图像中的不必要的细节。
字符分割是将手写体图像中的字符分割开来,以便后续的识别。
接着,我们需要提取手写体特征。
特征提取是机器学习中的一个重要步骤,它将手写体图像转换为由数值表示的特征向量。
常用的特征提取方法有灰度共生矩阵、方向梯度直方图等。
灰度共生矩阵是一种用于描述图像纹理特征的方法,它统计了图像中不同距离处的灰度级别对的概率分布。
方向梯度直方图则是一种用于描述图像边缘特征和纹理特征的方法,它统计了图像中不同方向的梯度直方图。
然后,我们需要选择一个机器学习算法来训练手写体识别模型。
常用的机器学习算法包括支持向量机、决策树、随机森林等。
对于手写体识别问题,卷积神经网络是更为常用的选择。
卷积神经网络可以通过多层卷积和池化操作来提取图像中的特征,并使用全连接层来进行分类。
我们可以通过使用现有的开源深度学习框架,如TensorFlow、PyTorch等,来训练卷积神经网络模型。
在训练模型之前,我们需要将手写体数据集划分为训练集和测试集。
训练集用于训练模型的参数,测试集用于评估模型的性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自由手写体数字识别系统的设计与实现戴建辉信息科学与工程学院,电子信息工程系指导老师:吴谨摘要:本文论述并设计实现了一个脱机自由手写体数字识别系统。
文中首先对待识别数字的预处理进行了介绍,包括二值化、平滑滤波、规范化、细化等图像处理方法;其次,探讨了如何提取数字字符的结构特征和笔划特征,并详细地描述了知识库的构造方法;最后采用了以知识库为基础的模板匹配识别方法,并以MATLAB作为编程工具实现了具有友好的图形用户界面的自由手写体数字识别系统。
实验结果表明,本方法具有较高的识别率,并具有较好的抗噪性能。
关键词:手写体数字;预处理;模式识别;特征提取Abstrct: This paper describes and designs a free handwritten number recognition system. Firstly, the pretreatment of the character to be recognized is introduced, including binarization, smoothing, normalization and thinning. Next, how to extract the structural features of the numbers is discussed, and we describe the constructing method of repository. Finally, we use the method of template matching, based on repository, to recognize the digital number. Matlab is used as a program tool to realize this free handwritten digital recognition system with friendly graphical user interface. The experimental results show that the rate of the recognition system is high, and the proposed method is robust to noise.Keywords: handwritten number; pretreatment;pattern recognition; feature extraction1 引言OCR(Optical Character Recognition)即光学字符识别技术,是通过扫描仪把印刷体或手写体文稿扫描成图像,然后识别成相应的计算机可直接处理的字符。
OCR是模式识别的一个分支,按字体分类主要分为印刷体识别和手写体识别两大类。
对于印刷体识别又可以分成单一字体单一字号和多种字体多种字号几类。
而手写体识别又可分为受限手写体和不受限手写体两类;按识别方式可分为在线识别和脱机识别两类。
字符识别处理的信息可分为两大类:一类是文字信息,处理的主要是用各国家、各民族的文字(如:汉字,英文等)书写或印刷的文本信息,目前在印刷体和联机手写方面技术已趋向成熟,并推出了很多应用系统;另一类是数据信息,主要是由阿拉伯数字及少量特殊符号组成的各种编号和统计数据,如:邮政编码、统计报表、财务报表、银行票据等等,处理这类信息的核心技术是手写数字识别。
因此,手写数字的识别研究有着重大的现实意义,一旦研究成功并投入应用,将产生巨大的社会和经济效益。
在整个OCR领域中,最为困难的就是脱机自由手写字符的识别。
到目前为止,尽管人们在脱机手写英文、汉字识别的研究中已取得很多可喜成就,但距离实用还有一定距离。
而在手写数字识别这个方向上,经过多年研究,研究工作者已经开始把它向各种实际应用推广,为手写数据的高速自动输入提供了一种解决方案。
本文首先介绍了自由手写体数字识别的基本原理,包括数字图像预处理、特征提取和模式识别的基本原理和方法;其次介绍了;最后通过基于MATLAB的实验结果,对本系统的性能进行了分析。
2 手写体数字识别的基本原理本系统主要由手写体数字识别的训练过程和识别过程组成,训练过程和识别过程均包括预处理、特征提取和模式识别三部分。
系统构成如图2.1所示。
图2.1 系统流程图下面分别介绍各部分工作的基本原理。
2.1 预处理预处理主要由二值化,平滑去噪,规范化,细化等组成。
本文采用了基于阈值的二值化算法,通过最大类间方差法即OTSU方法,统计图像的灰度直方图选取全局阈值,然后进行二值化处理。
其次,在二值化后利用均值滤波的方法消除孤立点、线的噪声,这样图中就只剩下手写体数字。
在滤波中本文采用的是3*3大小的模板。
识别过程训练过程数据采集,预处理特征提取与选择分类识别数据采集,预处理分类识别改进数据采集,预处理改进分类识别待识对象训练样本人工干预特征提取与选择改进特征提取与选择正确率测试平滑去噪后,对图像进行规范化处理。
找出图像中数字的边界,然后提取出数字把它居中放置在正方形方框中,再对此正方形图像进行线性插值缩放,使它变为统一规格大小的图像,本文中归一化图像的大小是36*36。
在提取特征之前,要对手写体数字进行细化。
本文是采用的基于数学形态学的细化算法。
细化可用两步腐蚀来实现:第一步是正常的腐蚀,但它是有条件的,也就是说,那些被标为可除去的像素点并不立即消去;在第二步中,只将那些消除后并不破坏连通性的点消除,否则保留。
以上每一步都是一个3*3邻域运算。
细化是将一个曲线性数字细化为一条单像素宽的线,从而图形化地显示出其拓扑性质。
数字图像预处理前后效果比较如下图所示。
图2.2为数字“5”的原始图像,图2.3为对图2.2预处理后的结果图。
类似地,图2.4为数字“6”的原始图像,图2.5为对图2.4预处理后的结果图。
图2.2 原始图像图2.3 预处理后图像图2.4 原始图像图2.5 预处理后图像2.2 特征提取特征提取的目的是从原始数据中抽取出用于区分不同类型的本质特征。
无论是识别过程还是学习过程,都要对研究对象固有的、本质的重要特征或属性进行量测并将结果数值化,形成特征矢量。
通常能描述对象的元素很多,为了节约资源,节省计算机存储空间、处理时间、特征提取的费用,有时更是为了可行性,在保证满足分类识别正确率要求的条件下,按某种准则尽量选用对正确分类识别作用较大的特征,使得用较少的特征就能完成分类识别任务。
这项工作表现为减少特征矢量的维数或符号字符数。
在本系统中采用对待识别数字图像进行行列扫描与数字起点结合的方法提取特征。
2.2.1 结构特征的提取首先对经预处理后的图像进行分割,如图2.6所示。
图2.6 图像分割对图像分割后,结构特征提取的算法如下:(1)对细化后的数字图像取竖直的三条直线,分别取在5/12,1/2,7/12处,记下这三条竖直直线与数字笔段的交点数。
(2)再取水平三条直线,分别取在1/3,1/2,2/3处, 分别记下这三条水平直线与数字笔段的交点数。
(3)再取对角两条直线, 分别记下这两条对角直线与数字笔段的交点数。
2.2.2 笔划特征的提取经细化后的数字图像其特征较为稳定,且笔划简单,因此对其抽取的基本结构组件能反映数字的本质特征,从而可快速有效地识别数字符,并达到较好的分类效果。
数字端点如图2.7所示。
提取笔划特征的算法如下:(1)按从上到下,从左到右的顺序扫描预处理后图像并选择黑像素点P;(2)计算像素P的8-邻域之和N;(3)若N=1,则像素P为端点,端点计数器加一;(4)重复步骤(1)-(3),直到遍历整个图像。
图2.7 数字端点2.2.3 数字的特征向量说明依据上述特征提取方法,本系统中的特征矢量由9个分量组成,其排列如下所示:DATA=[ 竖直中线交点数,竖直5/12处,竖直7/12处,水平中线交点数,水平1/3处交点数,水平2/3处交点数,左对角线交点数,右对角线交点数,端点数 ];2.3 知识库的建立由于本文采用的是基于模式知识库的识别方法,所以对字符的结构特征的分析以及字符模型的构造是一个十分重要的环节,图2.8就是对识别数字的标准形态进行具体分析而构造的模板。
图2.8 规范手写体数字形态DATA01=[2,2,2,2,2,2,2,2,0];DATA11=[1,0,0,1,1,1,1,1,2];DATA21=[3,3,3,1,1,1,1,1,3];DATA31=[3,2,3,1,1,1,2,2,3];DATA41=[1,1,1,2,2,1,3,2,4];DATA51=[3,3,3,1,1,1,2,2,4];DATA61=[3,3,2,1,1,2,3,2,1];DATA71=[2,2,2,1,1,1,1,1,2];DATA81=[4,4,4,2,2,2,2,2,0];DATA91=[3,3,3,1,2,1,3,1,1]。
由于本系统是对自由手写体进行识别, 因而要考虑数字书写体的多变性。
通过对图2.9所示数字变体的分析来对知识库进行补充。
图2.9 手写体数字变体DATA02=[1,1,2,2,2,2,1,2,2];DATA22=[3,2,2,1,1,1,1,3,2];DATA32=[3,1,4,2,1,1,2,2,3];DATA42=[1,2,2,3,3,1,2,2,2];DATA52=[3,3,3,1,1,1,2,2,4];DATA62=[3,1,3,1,1,2,2,2,2];DATA82=[4,4,4,2,1,2,1,2,2];DATA92=[3,2,3,2,1,1,3,1,3]。
最后得到知识库由上述两套模板所组成。
2.4 本系统的模式识别方法在本次设计过程中,我们选择了模板匹配的识别方法。
通过计算欧氏距离来衡量匹配程度。
本系统中的特征矢量有9个分量,其计算距离公式如下:12291i iid x y=⎡⎤=-⎢⎥⎢⎥⎣⎦∑公式(2.1) 但在本次设计中我们计算距离时对上述公式进行了改进,对于可靠性较高的端点数即最后一维特征值加大了权重,改进后的距离计算公式如下:182229913i iid x y x y=⎡⎤=-+⨯-⎢⎥⎣⎦∑公式(2.2)在识别过程,分别计算待识别图像的特征值与知识库中两个模板的距离,与10个数字逐个比较,距离最小的对应的数字就是最后识别结果。
该算法具有特征提取和模板建立都比较直观,时间复杂度低,易于实现等优点。
其缺点是在建立知识库时需要进行大量的训练,当知识库中的模板增多时,特征矢量间的距离会减小。
3 MATLAB程序设计本次设计使用MATLAB语言实现该系统,其用户界面分别介绍如下。
(1)读入图像:读入图像的用户界面如图 3.1所示。