第2章 模板匹配算法(mat格式手写数字识别)

手写数字识别数据集minist

手写数字识别是一个典型的多分类问题,输入一个样本,输出识别结果。样本的类别数为10类,分别代表0~10这十个数字,其中,分类器的输入是一张包含单个数字的图片,输出为一个十维的向量,有且只有一维为1,其余为0。表示输入样本将会被唯一分类到一个类别当中,即被唯一地识别为某一个数字。

模式识别课程链接:https://www.icourse163.org/course/BIT-1206703821

数据集下载地址:链接:https://pan.baidu.com/s/1b-8tzCp2neh3NsY81mcfdg  提取码:kaz0

程序源码

% mat2vector.m
% 输入:图片数据(矩阵),样本个数
% 函数作用:将图片组转化为行向量的组合,每个行向量作为一张图片的特征
% 输出:样本数*图片像素数量大小的矩阵
function [data_]= mat2vector(data,num)
    [row,col,~] = size(data);
    data_ = zeros(num,row*col);
    for page = 1:num
        for rows = 1:row
            for cols = 1:col
                data_(page,((rows-1)*col+cols)) = im2double(data(rows,cols,page));
            end
        end
    end
end

% Template_hand.m
% 手写数字模板匹配
clc
clear al
% 读取模板
image = cell(1,10); % 生成十个cell保存模板
for i = 0:9
    filename = sprintf(‘./手写数字/%d/5.bmp‘,i); % 读取模板
    image{1,i+1} = mat2vector(imresize(imread(filename),[28,28]),1); % 统一大小为28*28,并调用函数mat2vector将其转换为行向量
end
% 待匹配样本
correct_num = 0;
for index = 0:9 % 每个数字测试一次
    distance = zeros(1,10); % 保存计算得到的距离值
    fname = sprintf(‘./手写数字/%d/4.bmp‘,index);
    sample = mat2vector(imresize(imread(fname),[28,28]),1); % 图片转换为行向量
    for j  = 1:10 % 共十个模板,计算与每个模板的距离
        distance(j) = pdist2(sample,image{1,j},‘euclidean‘);
        % 计算欧式距离,这里可以更改‘euclidean’为其他距离,用于描述相似度
    end
    [m,p] = min(distance); % 计算距离最小值,并给出索引
    if p-1 == index
        correct_num = correct_num+1;
    end
    fprintf(‘数字%d到模板的最小距离为:%d,匹配到的类别为:%d\n‘,[index,m,p-1]);
    % 索引从1开始,模板从0开始,因此减一输出
end
fprintf(‘共测试10个样本,正确匹配个数为%d个\n‘,[correct_num]);

程序结果

原文地址:https://www.cnblogs.com/wzw0625/p/12510179.html

时间: 2024-08-30 04:34:44

第2章 模板匹配算法(mat格式手写数字识别)的相关文章

利用手写数字识别项目详细描述BP深度神经网络的权重学习

本篇文章是针对学习<深度学习入门>(由日本学者斋藤康毅所著陆羽杰所译)中关于神经网络的学习一章来总结归纳一些收获. 本书提出神经网络的学习分四步:1.mini-batch 2.计算梯度 3.更新参数 4.重复前面步骤 1.从识别手写数字项目学习神经网络 所谓“从数据中学习”是指 可以由数据#自动决定权重#.当解决较为简单的问题,使用简单的神经网络时,网络里的权重可以人为的手动设置,去提取输入信息中特定的特征.但是在实际的神经网络中,参数往往是成千上万,甚至可能上亿的权重,这个时候人为手动设置是

使用Caffe进行手写数字识别执行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下其执行流程并精简了实现代码,使用Caffe对MNIST数据集进行train的文章可以参考  http://blog.csdn.net/fengbingchun/article/details/68065338 : 1.   先注册所有层,执行layer_factory.hpp中类LayerRegis

C#中调用Matlab人工神经网络算法实现手写数字识别

手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写阿拉伯数字识别是图像内容识别中较为简单的一个应用领域,原因有被识别的模式数较少(只有0到9,10个阿拉伯数字).阿拉伯数字笔画少并且简单等.手写阿拉伯数字的识别采用的方法相对于人脸识别.汉字识别等应用领域来说可以采用更为灵活的方法,例如基于规则的方法.基于有限状态自动机的方法.基于统计的方法和基于神

C++使用matlab卷积神经网络库MatConvNet来进行手写数字识别

环境:WIN10(64 bit)+VS2010(64 bit)+Matlab2015b(64 bit) 关于MatConvNet的介绍参考:http://www.vlfeat.org/matconvnet/ Github下载地址为:https://github.com/vlfeat/matconvnet/ 我们的目的是将MatConvNet自带的手写数字识别DEMO移植到一个简单的WIN32 DEMO中使用,主要过程有以下几个步骤: (1)配置MatConvNet,然后将手写数字识别DEMO编译

手把手教你搭建caffe及手写数字识别(全程命令提示、纯小白教程)

手把手教你搭建caffe及手写数字识别 作者:七月在线课程助教团队,骁哲.小蔡.李伟.July时间:二零一六年十一月九日交流:深度学习实战交流Q群 472899334,有问题可以加此群共同交流.另探究实验背后原理,请参看此课程:11月深度学习班. 一.前言 在前面的教程中,我们搭建了tensorflow.torch,教程发布后,大家的问题少了非常多.但另一大框架caffe的问题则也不少,加之caffe也是11月深度学习班要讲的三大框架之一,因此,我们再把caffe的搭建完整走一遍,手把手且全程命

Python 手写数字识别-knn算法应用

在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点: 优点:精度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 适用数据范围:数值型和标称型(具有有穷多个不同值,值之间无序)    knn算法代码: #-*- coding: utf-8 -*- from numpy import * import operatorimport

在Kaggle手写数字数据集上使用Spark MLlib的朴素贝叶斯模型进行手写数字识别

昨天我在Kaggle上下载了一份用于手写数字识别的数据集,想通过最近学习到的一些方法来训练一个模型进行手写数字识别.这些数据集是从28×28像素大小的手写数字灰度图像中得来,其中训练数据第一个元素是具体的手写数字,剩下的784个元素是手写数字灰度图像每个像素的灰度值,范围为[0,255],测试数据则没有训练数据中的第一个元素,只包含784个灰度值.现在我打算使用Spark MLlib中提供的朴素贝叶斯算法来训练模型. 首先来设定Spark上下文的一些参数: val conf = new Spar

手写数字识别【QT+OpenCV】

[说明] 手写数字识别的实现方式很多. 本文尽量将其简化,以让大家能够快速了解怎样实现一个动起来的系统. [截图] [思路] 1.特征提取 将图像划分为5*5大小的区域,然后计算该区域内黑色(或白色)的像素点所占比例. 将需要测试的图像.用来分类的图像都进行特征提取. 2.计算当前的测试图像与用来分类的图像之间的欧氏距离. 3.找出欧式距离最小的值即为与当前测试图像最匹配的图像,即将该图像所代表的数字作为当前测试图像的结果. 4.为了处理上的方便,做了简化处理如下: 4.1仅仅选用10幅用来分类

机器学习(二)-kNN手写数字识别

一.kNN算法 1.kNN算法是机器学习的入门算法,其中不涉及训练,主要思想是计算待测点和参照点的距离,选取距离较近的参照点的类别作为待测点的的类别. 2,距离可以是欧式距离,夹角余弦距离等等. 3,k值不能选择太大或太小,k值含义,是最后选取距离最近的前k个参照点的类标,统计次数最多的记为待测点类标. 4,欧式距离公式: 二.关于kNN实现手写数字识别 1,手写数字训练集测试集的数据格式,本篇文章说明的是<机器学习实战>书提供的文件,将所有数字已经转化成32*32灰度矩阵. 三.代码结构构成