博客
关于我
【手写数字识别】基于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/

你可能感兴趣的文章
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
MySQL Troubleshoting:Waiting on query cache mutex
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>
MySQL Workbench 使用手册:从入门到精通
查看>>
MySQL Workbench 数据库建模详解:从设计到实践
查看>>
MySQL Workbench 数据建模全解析:从基础到实践
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>