【手写数字识别】基于模板匹配算法实现单个或连续手写数字识别系统附GUI

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

人类文明的发展离不开信息的传递.文字一直是人们传递信息的一个重要媒介,承载着记录人类文明的重要使命.随着科技的发展,积累的文字信息日益增多,有效的存储和利用这些文字信息成为一个亟待解决的问题.光学字符识别的出现为这一问题提供了解决方法.手写体数字识别是光学字符识别的重要分支,因其在金融,邮政,医疗,交通,教育等领域中广泛的应用而日益被重视.目前,已有多种手写体数字识别算法,但都很难满足手写体数字识别应用时对识别率近乎百分之百的要求,所以,几乎没有能够实际应用的识别算法. 

⛄ 部分代码

I1=rgb2gray(I);   %转化为灰度图像

I2=edge(I1,'canny',graythresh(I)*0.7);   %边缘检测

I2=imdilate(I2,ones(3,3));

I2=imfill(I2, 'holes');

I2=imerode(I2,ones(3,3));

[x,y]=find(I2==1);    %找到数字的部分

X=round(mean(x));    %取对象的横向平均位置

I3=I2(X,:);    %取出这一部分(相当于在原图像中选了一条横线)

wz=find(I3==1);  %找到对象的部分

j=0;   %计数设置为0

% figure

while ~isempty(wz)

    j=j+1;  %计数+1

    seed=[X,wz(1)];   %更新种子点

    new=false(size(I2));  %生成逻辑零数组保存之后的二值图像

    new(seed(1),seed(2))=true;   %种子点置一

    while true   %开始生长

        for i=1:size(seed,1)    %对每一种子点进行遍历

            new(seed(i,1)-1:seed(i,1)+1,seed(i,2)-1:seed(i,2)+1)=I2(seed(i,1)-1:seed(i,1)+1,seed(i,2)-1:seed(i,2)+1);    %取出周围3*3范围的数字

        end

        [x1,y1]=find(new==1);   %找到新的种子点

        seed1=[x1,y1];   %更新下一次遍历的种子点

        if(length(seed)==length(seed1))   %若本次和下次的种子数一致,则说明生长完成

            break;    %退出

        end

        seed=seed1;   %更新种子点

    end

    pd=find(new(X,:)==1);  %找到本次生长的对象

    wz=wz(length(pd)+1:end);    %将该对象从合集中去除

    [x,y]=find(new==1);   %得到本次对象的位置

    out=I1(min(x)-10:max(x)+10,min(y)-10:max(y)+10);   %将其从原始灰度图像中取出来,注意!这里可能会因为原始灰度图像过小而导致报错

    %figure,imshow(out)

    I_out(j)=mat2cell(out,size(out,1),size(out,2));   %将其放到cell数组中

end

if length(I_out) == 1   %若输入的为单数字图像

    I_out=mat2cell(I1,size(I1,1),size(I1,2));    %直接返回原始数字图像,因为这样精度更好一些

end

end

⛄ 运行结果

⛄ 参考文献

[1]蒋琳琼, 周兴发. 基于相关算法手写数字识别系统的研究与实现[J]. 技术与市场, 2013(4):3.

[2]张婷, 王卓英. 手写体数字计算机识别系统的应用研究[J]. 微型电脑应用, 2016, 32(1):3.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值