资源简介
多特征 MNIST库 手写数字识别实现(matlab),采用粗网格特征和切割线划分进行学习识别,首先提取MNIST数据库60000个训练样本分别提取出两个特征,然后对10000个测试样本进行测试,计算和两个特征的距离进行判别,matlab 实现
代码片段和文件信息
clear;
clc;
directory=uigetdir(‘‘‘亲,请选择测试图片路径‘);
ImageNum=10000;
numis=textread(‘test.txt‘‘%1d‘); %numis 是正确的ImageNum个样本值
fid=fopen(‘log.txt‘‘w‘);
%读出77和66的特征值
fea66=load(‘features6.txt‘);
fea77=load(‘features7.txt‘);
estat=zeros(110);
h_w=waitbar(0‘请稍后,正在处理中>>>>>>>>‘);
for i=1:ImageNum
featone=zeros(112); %统计特征
%读取图像并二值化
impath=fullfile(directory[‘TestImage_‘ num2str(i‘%05d‘) ‘.bmp‘]);
rawim=imread(impath);
xx=find(rawim<155);
rawim(xx)=0;
x=find(rawim>=155);
rawim(x)=255;
bwim=im2bw(rawim0.5);%二值化
%读出来的这个数真实值是多少?jud 保存之
jud=numis(i);
if jud==0 %如果是0,放在第十个
jud=10;
end
%%%%%%%%%%%%%%% 特 征 一 %%%%%%%%%%%%%%%%%
%提取特征---6+6个分割线上连续点个数
old=1; %表示上一个点值
new=1; %表示现在这个点的值
count=0; %记录发生了多少次变化
for c=1:6 %提取横向特征
xl=4*c;
for d=1:28 %遍历纵向的28个点
old=new;
new=bwim(dxl);
if(old~=new) %如果发生颜色变化则记录
count=count+1;
end
end
featone(c)=featone(c)+count/2; %第jud个数第c个特征
count=0;
end
for c=1:6 %提取纵向特征
yl=4*c;
for d=1:28
old=new;
new=bwim(yld);
if(old~=new)
count=count+1;
end
end
featone(c+6)=featone(c+6)+count/2;
count=0;
end
%%%%%%%%%%%%%%% 特 征 二 %%%%%%%%%%%%%%%%%
%读取每个块的像素个数
gridnum=zeros(149); %保存49个块的黑色像素个数
xbase=1;
ybase=1;
for yz=0:6
for xz=0:6 %这两个是7*7的大块
for ybase=1:4
for xbase=1:4 %这两个是在4*4的小块内
if(bwim(yz*4+ybasexz*4+xbase)==0) %如果是黑色像素
gridnum(yz*7+xz+1)=gridnum(yz*7+xz+1)+1;
end
end
end
end
end
%归一化特征二
sum=0;
for c=1:49
sum=sum+gridnum(c);
end
numfea=zeros(149);
for c=1:49
numfea(c)=gridnum(c)/sum;
end
%%%%%%%%%%%% 计算特征一的距离 %%%%%%%%%%%%%%%
dist66=zeros(110); %dist(c) 代表与标准第c个数字的距离
for c=1:10
for d=1:12
temp=featone(d)-fea66(cd); %该数字第d块减去数字c第d块特征值
dist66(c)=dist66(c)+temp^2;
end
end
%%%%%%%%%%%% 计算特征二的距离 %%%%%%%%%%%%%%%
dist77=zeros(110); %dist(c) 代表与标准第c个数字的距离
for c=1:10
for d=1:49
temp=numfea(d)-fea77(cd); %该数字第d块减去数字c第d块特征值
dist77(c)=dist77(c)+temp^2;
end
end
%%%%%%%%%% 融合两距离为一个距离 %%%%%%%%%%%%
dist=zeros(110);
k2=240;
for c=1:10
dist=k2*dist77+dist66;
end
%计算最小距离和对应的index
[aindex]=min(dist);
if index~=jud
if jud==10
temp=0;
else
temp=jud;
end
if index==10
tempi=0;
e
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 487 2011-11-13 16:28 reame.txt
文件 1320 2011-11-12 19:40 twofeatures - 归一化特征值\features6.txt
文件 5400 2011-11-13 21:11 twofeatures - 归一化特征值\features7.txt
文件 42000 2011-11-15 19:04 twofeatures - 归一化特征值\log.txt
文件 1072694 2011-11-15 19:05 twofeatures - 归一化特征值\ok.bmp
文件 3271 2011-11-13 17:14 twofeatures - 归一化特征值\recognize.asv
文件 3508 2011-11-15 19:03 twofeatures - 归一化特征值\recognize.m
文件 20000 2011-11-10 21:32 twofeatures - 归一化特征值\test.txt
文件 2578 2011-11-13 17:53 twofeatures - 归一化特征值\unti
文件 4348 2011-11-13 17:53 twofeatures - 归一化特征值\unti
文件 3964 2011-11-14 09:19 twofeatures - 归一化特征值\unti
文件 1451 2009-02-22 22:44 提取出 MNIST 内容\Matlab_Read_t10k_images_idx3.m
文件 1241 2009-02-22 22:42 提取出 MNIST 内容\Matlab_Read_t10k_labels_idx1.m
文件 1464 2009-02-22 22:44 提取出 MNIST 内容\Matlab_Read_train_images_idx3.m
文件 1250 2009-02-22 22:42 提取出 MNIST 内容\Matlab_Read_train_labels_idx1.m
目录 0 2011-11-15 19:05 twofeatures - 归一化特征值
目录 0 2011-11-11 09:20 提取出 MNIST 内容
----------- --------- ---------- ----- ----
1164976 17
相关资源
- 单特征 MNIST库 手写数字识别实现mat
- CapsuleNet 的MATLAB 实现 求解mnist手写体
- MATLAB神经网络手写数字识别GUI,论文
- MATLAB基于BP神经网络的手写数字识别代
- 手写体数字识别的训练数据库
- SVM的手写数字识别(Handwriting recogni
- 使用matlab将.idx3-ubyte和.idx1-ubyte格式文
- BP神经网络手写数字识别完整代码ma
- 基于MATLAB的手写数字识别系统设计.
- matlab手写数字识别(代码+毕业论文
- Matlab生成mnist_uint8.mat代码
- 牛津大学开发的matconvnet工具包
- CNN 深度学习的卷积神经网络的MATLAB代
- MNIST-handwritten-digits 手写数字识别数据
- handwritingPrecognitionPGUI 基于BP神经网络
- shouxieshuzishibie 这个基于matlab的手写数
- train-images-idx3-ubyte MNIST数据集中图像数
- 手写数字识别系统GUI.zip
- 基于深度学习网络deep learning network的
评论
共有 条评论