资源简介
多特征 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
相关资源
- BP神经网络解决手写数字识别问题 m
- BP神经网络实现手写数字识别matlab实现
- MINIST 手写数字识别 MATLAB仿真
- 基于运动想象脑电信号的多特征融合
- SVM算法对MNIST数据集分类
- KNN算法对MNIST数据集分类
- 多层ELM进行MNIST手写字符分类MATLAB代码
- 基于BP神经网络的手写数字识别matla
- 神经网络的手写数字识别USPS数据集
- matlab实现手写数字识别
- Matlab手写数字识别
- mnist数据集自带解析函数
- matlab手动实现BP网络,不调用工具箱(
- 深度学习的实验数据文件mnist_uint8
- matlab svm MNIST 手写数字识别
- mnist_all.mat
- 手写数字识别Matlab代码
- KNN算法训练MNIST和CIFAR数据集
- mnist手写字的knn naive bayessvm实现
- 宽度学习 Broad Learning System MATLAB 代码
- 基于matlab的dbn在mnist 手写数字上的实
- 手写数字识别_CNN_MATLAB
- BP神经网络 手写体
- mnist手写数字集MATLAB版
- mat格式的MNIST数据
- Matlab基于贝叶斯,朴素贝叶斯,最小
- SVM实现MNIST数据集分类
- mnist_uint8.mat用于MATLAB实现CNN网络的手
- 类似mnist的手写英文体训练数据
- 利用dbn+nn实现手写数字识别
评论
共有 条评论