基于知识库的手写体数字识别
更新时间:2024-05-11 21:32:01 阅读量: 综合文库 文档下载
HUNAN UNIVERSITY
课题
学学专学
生生业院
姓学班名
程 模式识别
目 基于知识库的手写体数字识别
名 号 级 称
2016 年6 月 25 日
基于知识库的手写体数字识别
1案例背景:
手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性。由于手写数字的随意性很大,如笔画粗细、字体大小、倾斜角度等因素都有可能直接影响到字符的识别准确率,所以手写体数字识别是一个很有挑战性的课题。在过去的数十年中,研究者们提出了许多识别方法,并取得了一定的成果。在大规模数据统计如例行年检、人口普查、财务、税务、邮件分拣等应用领域都有广阔的应用前景。 本案例实现了手写阿拉伯数字的识别过程,并对手写数字识别的基于统计的方法进行了简要介绍和分析。本文实现的手写字体识别程序具有手写数字图像读取、特征提取、数字模板特征库以及识别功能。
2理论基础:
2-1手写字体识别方法:
手写体数字识别是一个跨学科的复杂问题,综合了图像处理、模式识别、机器学习等多个领域的知识,其识别过程一般包含图像预处理、特征提取、分类器的设定及其后处理等组成。处理流程如图2-1所示。
图2-1手写体数子识别流程图
2-2 图像预处理
手写体数字识别的首要工作是图像预处理。在图像预处理过程中需要解决的主要问题有:定位、图像二值化、平滑化(去噪)H J、字符切分、规范化等。图像二值化是指将整个图像呈现出明显的黑白效果。待识别的手写体数字图像在扫描过程中,常会带来一些噪声,用不同的扫描分辨率得到的数字图像,其质量也各不相同,故而要先将这些干扰因素排除掉。另外,还需要正确分割整幅文档图像中的手写体数字,而分割后的数字大小、字体常各不相同,故还需进行归一化处理。
2-3 特征提取
特征提取的目的是从经过预处理后的数字图像中,提取出用以区分与其它数字类别的本质属性并数值化,形成特征矢量的过程。常见的手写体数字特征有:模板特征、统计特征、结构特征和变换特征。
2
2-4 分类器
不同的分类方式对应不同的分类器,可选的分类器有神经网络、支持向量机等。利用训练出的分类器,对特征提取后的手写体数字进行分类识别。分类器的识别原理是通过其拓扑结构和内置参数定义了特征空间上的一组曲面或超曲面,利用这组曲面或超曲面将特征空间划分为不同的区域,从而达到分类识别的目的。
2-5算法流程
首先,读入手写数字图片进行归一化处理,统一尺寸。默认为24×24图形块,并通过ostu算法进行二值化;其次,对二值化图像进行图像细化等形态学操作,并按照算法要求进行特征提取;最后,载入模板矩阵进行对比,选用欧式距离测度,得到识别结果。其算法流程如图1所示。 特征提取 根据手写数字图像本身的结构特征,通过计算端点、指定方向直线的交叉点个数来作为特征向量。其主要步骤如下: 1 . 垂直交点。对细化后的手写数字图像分别在其列宽的5/12、1/2、7/12处生成垂直的三条直线,提取这三条垂直直线与数字笔画的角点数并存储。 2 . 水平交点。对细化后的手写数字图像分别在其列宽的1/3、1/2、2/3处生成水平的三条直线,提取这三条垂直直线与数字笔画的角点数并存储。 3 . 对角交点。对细化后的手写数字图像分别提取两条对角直线,提取这两条对角直线与数字笔画的交点数并存储。 由于以上步骤均作用于细化后的数字图像,其笔画简单且特征稳定,因此对其提取的基本交点及结构端点能反映数字的本质特征,可快速、有效地识别数字字符,并达到较好的识别正确率。其中,提取笔画结构端点特征的算法如下。 1 . 目标定位。对细化后的手写数字图像按行从上到下、按列从左到右进行顺序扫描,定位选择黑像素点P作为手写笔画目标。 2 . 邻域统计。计算黑色像素P的8领域之和N,若N=1,则像素P为端点,端点计数器加1;否则舍弃该点。 3 . 遍历图像。遍历整个图像,重复进行目标定位、领域统计的操作流程,提取端点特征。依据上述对手写数字图像的交点、端点特征提取方法,本案例中的特征向量VEC由9个分类组成,其排列如下:VEC=[垂直5/12处交点数,垂直中线交点数,垂直7/12处交点数,
水平1/3处交点数,水平中线交点数,水平2/3处交点数,左对角线交点数,右对角线交点数,端点数]
3模式识别
本案例采用的是基于模式知识库的识别方法,所以系统调研的关键步骤就是对数字字符的结构特征的分析及其模型的构造。因此,本案例首先对0-9这10个数字进行结构分析并建模,然后提取相关特征,最后构造模板库。
在实验过程中,我们选择规范手写和自由手写两组样本对知识库进行参数调整,这些训练样本由200个规范手写样本和200个自由手写样本组成,通过计算样本对应分量的算术平均值获得知识库中特征向量的每个分量。 通过上述步骤得到的知识库由两套模板组成,在本次实验过程中,我们选择基于模板匹配的识别方法,通过技术欧式距离来衡量匹配程度。识别系统中的特征向
3
量包含9个分量,且计算距离公式是欧式距离。因此,在识别过程中分别计算待识别图像与知识库中各个模板特征向量之间的欧式距离,即与0-9这10个数字逐个比较,选择最小距离对应的数字作为最后的识别结果。
4程序实现
手写体数字识别有着广泛的应用前景,目前被广泛应用于财务报表、银行票据、户籍登记、税务信息、统计信息等方面,是模式识别和图像处理领域的一个研究热点。
4-1 图像预处理
该步骤主要是对输入的图像进行灰度化、归一化、滤波、二值化。鉴于数字的识别与色彩无关,并且考虑到噪声影响,这里采用中值滤波去噪,将图像进行预处理,最终可得到二值化图像。
图4-1待识别手写数字 图4-2二值化图像
图4-3归一化图像 图4-4中值滤波
4-2 特征提取
该步骤主要是对预处理得到的二值图像进行图像细化操作,并按照算法要求提取交点、端点特征,组成特征向量。本节根据上一节中的特征提取方法,对基于24x24点阵的细化图像进特征提取,提取的特征矢量维度为32。
对于矩特征,提取特征变量M,M为7个Hu平面不变矩的第一个,再除以1000,将特征变量的取值范围规范化,这是为了防止特征变量的取值较大时发生 浮点数溢出。M/1000是特征矢量的第1个矢量。
综合端点特征提取方法和分区域特征提取方法产生了6个特征矢量:点阵上半区域端点数、点阵下半区域端点数、点阵左半区域端点数、点阵右半区域端点数、三结点数和四结点数
4
图4-5图像特征预处理结果
4-3 模式识别
该步骤主要是对载入的模板矩阵及输入图像计算出特征向量选用欧式距离测度,进而得到识别结果。
载入模式库。我们选择规范手写和自由手写两组样本对知识库进行参数调整,这些训练样本由200个规范手写样本和200个自由手写样本组成,通过计算样本对应分量的算术平均值获得知识库中特征向量的每个分量。该知识库也称为判别标准向量矩阵,本文把该矩阵命名为Data.mat。
匹配识别。在本文所提出的方法中,选择基于模板匹配的识别方法,通过计算欧式距离来衡量匹配的程度。识别系统中的特征向量包含9个分量,且计算距离公式是欧式距离。
5 实验结果
6不足与展望
手写体数字的样本类别只有10类,与其他大字符集的识别相比要容易得多。本案例采用的模板匹配分类器节省时间,简单却也可以达到较高的识别效果。但是在系统的设计上由于实验条件限制,只采用了200组样本图像进行特征提取,得到模板库。特征训练不够导致识别率不高,可以考虑增加训练样本,采用神经网络等识别器进行处理,提高识别率。
5
参考文献
[1]钱谡. 基于图像处理的字符识别系统研究[M]. 河北农业大学,2007.
[2]范艳峰,肖乐,甄彤.自由手写体数字识别技术研究[J]. 计算机工程,2005. [3]阮秋琦. 数字图像处理[M]. 北京:电子工业出版社,2001.
[4]杨丹,赵海滨,龙哲. MATLAB图像处理实例详解. 北京:清华大学出版社,2012. [5] Sahel Ba-Karait NO,ShamsuddinS M.HandwriRendigits recognition using
particleswarmoptimization[C].Modeling&Simulation,2008.AICMS08.Second AsiaInternational Conference on.IEEE,2008:6 1 5.6 1 9.
6
源代码
本程序采用模块化编程的思想进行设计,不同的函数模块实现各自的一个功能,然后由功能模块对各函数模块进行整合与调用。最后,再在主函数模块中调用功能模块,实现程序的最终功能。 二值化模块:
function bw = Bw_Img(I) if ndims(I) == 3 I = rgb2gray(I); end
bw = im2bw(I, graythresh(I)); bw = ~bw;
归一化模块
function I1 = Normalize_Img(I) if ndims(I) == 3 I = rgb2gray(I);
end
I1 = imresize(I, [24 24], 'bicubic');
特征提取模块
function num= Main_Process(I, flag) if nargin < 2 flag = 1; end
I1 = Normalize_Img(I); bw1 = Bw_Img(I1); bw2 = Thin_Img(bw1); bw = bw2; sz = size(bw);
[r, c] = find(bw==1);
rect = [min(c) min(r) max(c)-min(c) max(r)-min(r)]; vs = rect(1)+rect(3)*[5/12 1/2 7/12]; hs = rect(2)+rect(4)*[1/3 1/2 2/3]; pt1 = [rect(1:2); rect(1:2)+rect(3:4)];
pt2 = [rect(1)+rect(3) rect(2); rect(1) rect(2)+rect(4)]; k1 = (pt1(1,2)-pt1(2,2)) / (pt1(1,1)-pt1(2,1)); x1 = 1:sz(2);
y1 = k1*(x1-pt1(1,1)) + pt1(1,2);
k2 = (pt2(1,2)-pt2(2,2)) / (pt2(1,1)-pt2(2,1)); x2 = 1:sz(2);
y2 = k2*(x2-pt2(1,1)) + pt2(1,2); if flag
figure('Name', '数字识别', 'NumberTitle', 'Off', 'Units', 'Normalized', 'Position', [0.2 0.45
7
0.5 0.3]);
subplot(2, 2, 1); imshow(I, []); title('原图像', 'FontWeight', 'Bold');src=I;
subplot(2, 2, 2); imshow(I1, []); title('归一化图像', 'FontWeight', 'Bold');guiYi=I1; hold on;
h = rectangle('Position', [rect(1:2)-1 rect(3:4)+2], 'EdgeColor', 'r', 'LineWidth', 2); legend(h, '数字区域标记', 'Location', 'BestOutside');
subplot(2, 2, 3); imshow(bw1, []); title('二值化图像', 'FontWeight', 'Bold');erZh=bw1; subplot(2, 2, 4); imshow(bw, [], 'Border', 'Loose'); title('细化图像', 'FontWeight', 'Bold');xiHua=bw; hold on; h = [];
for i = 1 : length(hs)
h = [h plot([1 sz(2)], [hs(i) hs(i)], 'r-')]; end
for i = 1 : length(vs)
h = [h plot([vs(i) vs(i)], [1 sz(1)], 'g-')]; end
h = [h plot(x1, y1, 'y-')]; h = [h plot(x2, y2, 'm-')];
legend([h(1) h(4) h(7) h(8)], {'水平线', '竖直线', '左对角线', '右对角线'}, 'Location', 'BestOutside'); hold off; end
v{1} = [1:sz(2); repmat(hs(1), 1, sz(2))]'; v{2} = [1:sz(2); repmat(hs(2), 1, sz(2))]'; v{3} = [1:sz(2); repmat(hs(3), 1, sz(2))]'; v{4} = [repmat(vs(1), 1, sz(1)); 1:sz(1)]'; v{5} = [repmat(vs(2), 1, sz(1)); 1:sz(1)]'; v{6} = [repmat(vs(3), 1, sz(1)); 1:sz(1)]'; v{7} = [x1; y1]'; v{8} = [x2; y2]'; for i = 1 : 8
num(i) = GetImgLinePts(bw, round(v{i})-1); end
num(9) = sum(sum(endpoints(bw)));
计算交点函数:
function num = GetImgLinePts(bw, v) num = 0;
for i = 1 : size(v, 1)
if v(i, 2)>1 && v(i, 2) num = num + 1; end 8 end 计算端点函数: function num = GetImgEndPts(bw) num = 0; for i = 1 : size(bw, 1) for j = 1 : size(bw, 2) if i>2 && i && sum(sum(bw(i-1:i+1, j-1:j+1)))==1 num = num + 1; end end end 匹配识别模块: function result = MaskRecon(Data, v) for i = 1 : size(Data, 1) dis(i) = norm(v-Data(i, :)); end [mindis, ind] = min(dis); if ind < 11 result = ind-1; else result = ind-11; end 主函数模块 function res = ShowNum( img ) load Data.mat v=Main_Process(img,0); res=MaskRecon(Datas,v); msgbox(sprintf('识别结果:%d',res),'提示信息','modal'); end 9
正在阅读:
基于知识库的手写体数字识别05-11
论我国中小企业融资管理中存在的问题及对策03-07
2009年高考四川数学试题及答案(理数)03-14
2017-2023年中国轮廓仪行业市场专项调研及投资前景可行性预测报05-21
(最新版)板式换热器毕业课程设计02-03
新课改新教材下的数学教学-最新教育资料03-03
《网络信息安全技术》复习提纲 - 图文04-15
网络的拓扑结构08-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 手写体
- 知识库
- 识别
- 基于
- 数字
- 广告学专业课程体系的创新与重构
- 课程设计--65td垃圾堆肥厂工程
- 某项目装饰改造施工组织设计
- 高三学习心得
- 浙江省慈溪市金山中学2014学年“体育节、艺术节、读书节、科技节
- 建筑设计中节能设计理念的重要性及应用研究
- 朱子治家格言译文
- 竞赛java编程题50题(有答案)
- 基于plc的变频恒压供水系统-毕业设计标准版
- 利用电子白板 搭建师生互动平台
- 跨越百年的美丽说课稿
- 2016年下半年上海高级机修钳工理论模拟试题
- 质量手册
- 因素分析法选址-大娘水饺因素分析法
- 百色市产业定位与产业发展研究报告
- 电子元器件的来料检验标准指导书(新版)
- 高级财务会计期末复习业务题
- 五菱汽车驱动桥设计说明书 - 图文
- 临床检验三基试卷B
- 2019语文A版语文六上《冀中的地道战》word导学案