Study-基于知识库的手写体数字识别

简介: Study-基于知识库的手写体数字识别

案例背景


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



理论基础


1. 算法流程


  首先,读入手写数字图片进行图像归一化处理,统一尺寸,默认为24x24 图像块,并通过ostu算法进行二值化;其次,对二值化图像进行图像细化等形态学操作,并按照算法要求进行特征提取;最后,载入模板矩阵进行比对,选用欧式距离测度,得到识别结果。其算法流程图如下所示:

image.png


2. 特征提取


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


2.1.垂直交点:对细化后的手写数字图像分别在其列宽的处生成垂直的三条直线,提取这三条垂直直线与数字笔划的交点数并存储。


2.2.水平交点:处生成水平的三条直线,提取这对细化后的手写数字图像分别在其列宽的三条水平直线与数字笔划的交点数并存储。


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


  由于以上步骤均作用于经细化后的数字图像,其笔划简单且特征稳定,因此对其提取的基本交点及结构端点能反映数字的本质特征,可快速、有效地识别数字字符,并达到较好的识别正确率。


  其中,提取笔划结构端点特征的算法如下。


1.目标定位:对细化后的手写数字图像按行从上到下、按列从左到右进行顺序扫描,定位选择黑像 素点P作为手写笔划目标。


2.邻域统计:计算黑色像素P的8邻域之和N,若N=1,则像素P为端点,端点计数器加1:否 则舍弃该点。


3.遍历图像:遍历整个图像,重复进行目标定位、邻域统计的操作流程,提取端点特征。




程序实现


  本案例采用的是基于模式知识库的识别方法,所以系统调研的关键步骤就是对数字字 符的结构特征的分析及其模型的构造。因此,本案例首先对0~9这10个数字字符进行结 构分析并建模,然后提取相关特征,最后构造模板库。


  该步骤主要是对输入的图像进行灰度化、归一化、滤波、二值化。鉴于数字的识别与 色彩无关,并且考虑到噪声的影响(这里采用中值滤波进行去噪),将图像进行预处理,. 最终可得到二值化图像。具体代码如下所示:(github.com/kivenyangmi…)


clc; clear all; close all;
load Data.mat;
[FileName,PathName,FilterIndex] = uigetfile({'*.jpg;*.tif;*.png;*.gif', ...
    '所有图像文件';...
    '*.*','所有文件' },'载入数字图像',...
    '.\\images\\手写数字\\t0.jpg');
if isequal(FileName, 0) || isequal(PathName, 0)
    return;
end
fileName = 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);
%     legend(h, '数字区域标记', 'Location', 'BestOutside');
    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;
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)));
result = MaskRecon(Datas, num);
msgbox(sprintf('识别结果:%d', result), '提示信息', 'modal');


image.png


相关文章
|
8月前
|
机器学习/深度学习 算法 TensorFlow
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
132 0
|
8月前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
5月前
|
机器学习/深度学习 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现
本文提供了2024泰迪杯B题“基于多模态特征融合的图像文本检索”的Python代码实现,包括问题分析、多模态特征提取、特征融合模型和算法的构建,以及如何使用召回率作为评价标准进行模型性能评估的详细说明。
73 2
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现
|
5月前
|
机器学习/深度学习 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码baseline
本文通过可视化分析,总结了2024年考研国家分数线的变化趋势,指出管理类MBA降低5分,哲学、历史学、理学、医学等10个专业分数线上涨,而经济学等专业出现下降,反映出不同专业分数线受考生数量、竞争情况和政策调整等因素的影响。
87 2
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码baseline
|
5月前
|
数据采集 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码
本文介绍了2024年泰迪杯B题的解决方案,该题目要求构建基于多模态特征融合的图像文本检索模型和算法,通过深入分析和预处理数据集,构建了OFA、BertCLIP和ChineseCLIP三种多模态特征融合模型,并通过投票融合机制优化检索效果,实验结果表明所提模型在图像与文本检索任务中显著提高了检索准确性和效率。
140 3
|
6月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:图像风格迁移与生成
【7月更文挑战第13天】 使用Python实现深度学习模型:图像风格迁移与生成
70 2
|
8月前
|
机器学习/深度学习 算法框架/工具 计算机视觉
使用Python实现图像分类与识别模型
使用Python实现图像分类与识别模型
92 2
使用Python实现图像分类与识别模型
|
7月前
|
机器学习/深度学习 存储 监控
基于YOLOv8深度学习的葡萄簇目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的葡萄簇目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
|
7月前
|
机器学习/深度学习 监控 算法
基于YOLOv8深度学习的100种蝴蝶智能识别系统【python源码+Pyqt5界面+数据集+训练代码】目标识别、深度学习实战
基于YOLOv8深度学习的100种蝴蝶智能识别系统【python源码+Pyqt5界面+数据集+训练代码】目标识别、深度学习实战
|
数据采集 机器学习/深度学习 自然语言处理
nlp入门之基于贝叶斯算法的拼写错误检测器
基于贝叶斯思想简单的实现了一个拼写错误检测器