博客
关于我
【手写数字识别】基于matlab知识库手写体数字识别【含Matlab源码 311期】
阅读量:159 次
发布时间:2019-02-27

本文共 3635 字,大约阅读时间需要 12 分钟。

一、简介

基于matlab的知识库的手写体数字识别。首先,读入手写数字图片进行图像归一化处理,统一尺寸,默认为24X24图像块,并通过ostu算法进行二值化;其次,对二值化图像进行图像细等形态学操作,并按照算法要求特征提取;最后,载入模版矩阵进行比对,选用欧氏距离测度,得到识别结果。

二、源代码

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;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]';

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423

转载地址:http://lwqf.baihongyu.com/

你可能感兴趣的文章
nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
查看>>
nestesd exception is java .lang.NoSuchMethodError:com.goolge.common.collect
查看>>
nestJS学习
查看>>
net core 环境部署的坑
查看>>
NET Framework安装失败的麻烦
查看>>
Net 应用程序如何在32位操作系统下申请超过2G的内存
查看>>
Net.Framework概述
查看>>
NET3.0+中使软件发出声音[整理篇]<转>
查看>>
net::err_aborted 错误码 404
查看>>
NetApp凭借领先的混合云数据与服务把握数字化转型机遇
查看>>
NetAssist网络调试工具使用指南 (附NetAssist工具包)
查看>>
Netbeans 8.1启动参数配置
查看>>
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
NetBeans之JSP开发环境的搭建...
查看>>
NetBeans之改变难看的JSP脚本标签的背景色...
查看>>
netbeans生成的maven工程没有web.xml文件 如何新建
查看>>
netcat的端口转发功能的实现
查看>>
NetCore 上传,断点续传,可支持流上传
查看>>
Netcraft报告: let's encrypt和Comodo发布成千上万的网络钓鱼证书
查看>>
Netem功能
查看>>