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

你可能感兴趣的文章
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>