首页 > 编程知识 正文

cnn手写数字识别matlab,基于matlab的手写体数字识别

时间:2023-05-04 21:35:13 阅读:25588 作者:906

一、代码获取方式获取代码方式1:

完整的代码上传了我的资源。 【手写数字识别】基于matlab知识库手写数字识别的【包含matlab源代码的311期】

获取代码方式2:

订阅紫极神光博客3358www.Sina.com/,可在支付证书付费专栏上获得此代码。

备注:订阅紫极神光博客私信博主,即可免费获得付费专栏部代码(1自订阅之日起3天有效)。

二、手写数字识别技术综述有效期

手写数字识别是图像识别学科的一个领域是图像处理和模式识别研究领域的重要应用之一通用性强手写数字由于笔画的粗细、字体的大小、倾斜的角度等随意性较大,因此有可能直接影响文字的识别精度,是一个困难的课题。 在过去的几十年里,研究者们提出了很多识别方法,取得了一定的成果。 手写数字识别实用性强,在定期检查、人口普查、财务、税务、邮件分拣等大数据统计应用领域有着广阔的应用前景。

该案例阐述了图像中手写阿拉伯数字的识别过程,对基于手写数字识别统计的方法进行了简要介绍和分析,并通过开发小型手写数字识别系统进行了实验。 手写数字识别系统需要实现手写数字图像的读取功能、特征提取功能、数字模板特征库的创建功能以及识别功能。

http://www.Sina.com/http://www.Sina.com /

首先,读取手写数字图像进行图像归一化处理,统一尺寸,默认为24x24图像块,用ostu算法进行二值化; 其次,对二值化图像进行图像细化等形态学操作,根据算法要求进行特征提取; 最后,加载模板矩阵进行比对,采用欧式距离测度,得到识别结果。 该算法的流程图如图所示。1 案例背景

根据手写数字图像自身的结构特征,通过计算端点、指定方向直线的交叉点数作为特征向量。 其主要步骤如下。2 理论基础

对于细分后的手写数字图像,分别生成与其列宽的(5/12 )1/2)7/12处垂直的3条直线,提取这3条垂直直线与数字笔划的交点点数进行存储。2.1算法流程

对于细分后的手写数字图像,分别生成与其列宽的编号水平的3条直线,提取这1/3 1/2 2/3的3条水平直线与数字笔划的交点点数进行存储。2.2 特征提取

对细分后的手写数字图像分别取两条对角直线,提取这两条对角直线和数字笔划的交点并存储。

以上步骤均作用于细分数字图像,笔画简单、特征稳定,提取的基本交点和结构端点反映数字的本质特征,能快速有效地识别数字,达到较高的识别正确率。

这里,提取笔画结构端点特征的算法如下。

目标定位

逐行从上至下、逐列从左至右依次扫描细分后的手写数字图像,定位选择黑像素点p作为手写笔画的对象。

邻域统计

计算黑像素p的8附近的和n,如果N=1,则以像素p为端点,在端点计数器中加1; 否则,放弃那一点。

遍历图像

扫描整个图像,重复目标定位、邻域统计操作流程,提取端点特征。 根据上述手写数字图像交点、端点特征提取方法,本情况下的特征向量VEC由9个分量构成,其排列如下:

VEC=[垂直5/12处交点数、垂直中心线交点数、垂直7/12处交点数、水平1/3处交点数、水平中心线交点数、水平2/3处交点数、左对角线交点数、右对角线交点数、端点点数]

(1)垂直交点

由于本案例采用基于模式知识库的识别方法,系统调查的重要步骤是数字结构特征的分析及其模型的结构。 因此,在本案例中,首先对0~9的10个字符的数字进行结构分析,建模后提取相关特征,最后构建模板库。 实验选择规范手写和自由手写两组样本作为由200个规范手写样本和200个自由手写样本组成的训练样本,通过计算样本对应成分的算术平均值得到知识库中特征向量的各个成分。

上述步骤得到的知识库由两个模板组成,本次实验选择了基于模板匹配的识别方法,通过计算欧式距离测量匹配程度。 识别系统内的特征向量包含9个分量,计算距离公式为欧式距离。

因此,在识别中与识别对象图像和知识库中各模板特征向量之间的欧式距离,即0 ̄9的10个数字逐个进行比较,选择与最小距离对应的数字作为最后的识别结果。

三、部分源代码clc; 清除全部; 关闭全部; load Data.mat; [FileName,PathName,filterindex]=uigetfile({'*.jpg; *.tif; *.png; *.gif ', '所有图像文件'; ' *.* ','所有文件' },'加载数字映像', '.\images

手写数字\t0.jpg');if isequal(FileName, 0) || isequal(PathName, 0) return;endfileName = fullfile(PathName, FileName);I = imread(fileName);flag = 1;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 0.5 0.3]); subplot(2, 2, 1); imshow(I, []); title('原图像', 'FontWeight', 'Bold'); subplot(2, 2, 2); imshow(I1, []); title('归一化图像', 'FontWeight', 'Bold'); hold on; h = rectangle('Position', [rect(1:2)-1 rect(3:4)+2], 'EdgeColor', 'r', 'LineWidth', 2); xlabel('数字区域标记'); subplot(2, 2, 3); imshow(bw1, []); title('二值化图像', 'FontWeight', 'Bold'); subplot(2, 2, 4); imshow(bw, [], 'Border', 'Loose'); title('细化图像', 'FontWeight', 'Bold'); 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;endfunction num = Main_Process(I, flag)if nargin < 2 flag = 1;endI1 = 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 0.5 0.3]); subplot(2, 2, 1); imshow(I, []); title('原图像', 'FontWeight', 'Bold'); subplot(2, 2, 2); imshow(I1, []); title('归一化图像', 'FontWeight', 'Bold'); hold on; h = rectangle('Position', [rect(1:2)-1 rect(3:4)+2], 'EdgeColor', 'r', 'LineWidth', 2); legend(h, '数字区域标记', 'Location', 'BestOutside'); 'FontWeight', 'Bold'); 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;endv{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]'; 四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] qjdhk.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]疯狂的小馒头,wsdzt,dddxf.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]yydnht.精通MATLAB图像处理[M].清华大学出版社,2015.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。