一、CNN简介

1 机器如何识图
先给大家出个脑筋急转弯:在白纸上画出一个大熊猫,一共需要几种颜色的画笔?——大家应该都知道,只需要一种黑色的画笔,只需要将大熊猫黑色的地方涂上黑色,一个大熊猫的图像就可以展现出来。

我们画大熊猫的方式,其实和妈妈们的十字绣很接近——在给定的格子里,绣上不同的颜色,最后就可以展现出一幅特定的“图片”。而机器识图的方式正好和绣十字绣的方式相反,现在有了一幅图片,机器通过识别图片中每个格子(像素点)上的颜色,将每个格子里的颜色都用数字类型存储,得到一张很大的数字矩阵,图片信息也就存储在这张数字矩阵中。

上图中每一个格子代表一个像素点,像素点里的数字代表颜色码,颜色码范围是[0,255],(各式各样的颜色都是由红、绿、蓝三色组成,每个颜色都是0~255之间数字)

我们在得到的一张大数字矩阵的基础上开展卷积神经网络识别工作:
机器识图的过程:机器识别图像并不是一下子将一个复杂的图片完整识别出来,而是将一个完整的图片分割成许多个小部分,把每个小部分里具有的特征提取出来(也就是识别每个小部分),再将这些小部分具有的特征汇总到一起,就可以完成机器识别图像的过程了

2 卷积神经网络原理介绍
用CNN卷积神经网络识别图片,一般需要的步骤有:
(1)卷积层初步提取特征
(2)池化层提取主要特征
(3)全连接层将各部分特征汇总
(4)产生分类器,进行预测识别

2.1 卷积层工作原理
卷积层的作用:就是提取图片每个小部分里具有的特征
假定我们有一个尺寸为66 的图像,每一个像素点里都存储着图像的信息。我们再定义一个卷积核(相当于权重),用来从图像中提取一定的特征。卷积核与数字矩阵对应位相乘再相加,得到卷积层输出结果。

(429 = 18
1+540+511+550+1211+750+351+240+2041)
卷积核的取值在没有以往学习的经验下,可由函数随机生成,再逐步训练调整
当所有的像素点都至少被覆盖一次后,就可以产生一个卷积层的输出(下图的步长为1)

机器一开始并不知道要识别的部分具有哪些特征,是通过与不同的卷积核相作用得到的输出值,相互比较来判断哪一个卷积核最能表现该图片的特征——比如我们要识别图像中的某种特征(比如曲线),也就是说,这个卷积核要对这种曲线有很高的输出值,对其他形状(比如三角形)则输出较低。卷积层输出值越高,就说明匹配程度越高,越能表现该图片的特征。

卷积层具体工作过程:
比如我们设计的一个卷积核如下左,想要识别出来的曲线如下右:

现在我们用上面的卷积核,来识别这个简化版的图片——一只漫画老鼠

当机器识别到老鼠的屁股的时候,卷积核与真实区域数字矩阵作用后,输出较大:6600

而用同一个卷积核,来识别老鼠的耳朵的时候,输出则很小:0

我们就可以认为:现有的这个卷积核保存着曲线的特征,匹配识别出来了老鼠的屁股是曲线的。我们则还需要其他特征的卷积核,来匹配识别出来老鼠的其他部分。卷积层的作用其实就是通过不断的改变卷积核,来确定能初步表征图片特征的有用的卷积核是哪些,再得到与相应的卷积核相乘后的输出矩阵

2.2 池化层工作原理
池化层的输入就是卷积层输出的原数据与相应的卷积核相乘后的输出矩阵
池化层的目的:
为了减少训练参数的数量,降低卷积层输出的特征向量的维度
减小过拟合现象,只保留最有用的图片信息,减少噪声的传递
最常见的两种池化层的形式:
最大池化:max-pooling——选取指定区域内最大的一个数来代表整片区域
均值池化:mean-pooling——选取指定区域内数值的平均值来代表整片区域
举例说明两种池化方式:(池化步长为2,选取过的区域,下一次就不再选取)

在44的数字矩阵里,以步长22选取区域,比如上左将区域[1,2,3,4]中最大的值4池化输出;上右将区域[1,2,3,4]中平均值5/2池化输出

2.3 全连接层工作原理
卷积层和池化层的工作就是提取特征,并减少原始图像带来的参数。然而,为了生成最终的输出,我们需要应用全连接层来生成一个等于我们需要的类的数量的分类器。
全连接层的工作原理和之前的神经网络学习很类似,我们需要把池化层输出的张量重新切割成一些向量,乘上权重矩阵,加上偏置值,然后对其使用ReLU激活函数,用梯度下降法优化参数既可。

二、部分源代码

%印刷体识别
clc;clear;close all;
addpath('util/');
addpath('data/');
inputpath='data/';
fdir=dir(strcat(inputpath,'*.jpg'));
p=size(fdir);
method=2;%定位方法
levelth=0.3;%水平分割缩放阈值
for i=2:p(1)
im=imread(fdir(i).name);
imtp=imresize(im,0.25);
%图像灰度化
if(length(size(im))>1)im=double(rgb2gray(im));
elseim=double(im);
endim=imresize(im,0.25);th=graythresh(im);pt=size(im);%提取上下位面  if(method==1)im=GuassSmoothfilter(im)*255;%平滑cent=2;[Labels,BW]=KmeansSg(im,cent);%kmeans聚类[pMax,pMin]=Findline(BW);%Hough变换downlevel=pMax.y-(pMax.y-pMin.y)*0.30;uplevel=pMin.y+(pMax.y-pMin.y)*0.55;else[pMax,pMin,pxMax,pxMin]=levelSg(im,levelth);%水平集分割downlevel=pMax-(pMax-pMin)*0.29;uplevel=pMin+(pMax-pMin)*0.55;endimcrop=im(uplevel:downlevel,:);%定位银行卡号po=size(imcrop);imtpcrop=zeros(po(1),po(2),3);imtpcrop(1:po(1),:,1)=imtp(uplevel:downlevel,:,1);imtpcrop(1:po(1),:,2)=imtp(uplevel:downlevel,:,2);imtpcrop(1:po(1),:,3)=imtp(uplevel:downlevel,:,3);figure;imshow(imcrop,[]);title('灰度切割')figure;imshow(imtpcrop,[]);title('彩色切割')srcyuv=rgb2yuv(imtpcrop);%rgb转换为YUV通道figure;imshow(srcyuv(:,:,2),[]);title('yuv通道')edg=edge(srcyuv(:,:,3),'sobel');%canny边缘检测figure;B=im2bw(uint8(imcrop),0.2);imshow(B,[]);title('二值化')%[L,num] = bwlabel(~B,4);%获取联通区域imwrite(uint8((~B)*255),'x.jpg');figure;imshow(edg,[]);title('边缘')B=uint8((~B)*255);cropAll(B)%最终裁剪recognize%卡号识别end

三、运行结果





四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【卡号识别】基于matlab CNN银行卡数字识别【含Matlab源码 030期】相关推荐

  1. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  2. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计【含GUI源码 752期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计[含GUI源码 752期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  3. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计(带面板)【含GUI源码 1017期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计(带面板)[含GUI源码 1017期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 ...

  4. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  5. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  6. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  7. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  8. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  9. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  10. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

最新文章

  1. Windows Phone 应用程序生命周期
  2. python turtle画彩虹-Python基础实例——绘制彩虹(turtle库的应用)
  3. 频谱仪使用方法图解_钳形电流表使用方法图解
  4. lms自适应滤波器实现噪声干扰的语音恢复_ZLG深度解析语音识别技术
  5. 87说明书 ikbc_女性玩家的首选!——IKBC白无垢. 樱机械键盘赏评
  6. 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
  7. 腾讯:中小企业数字化转型路径报告|附PDF下载
  8. PCD Lesson3:PCD文件的读取
  9. linux基本命令示例_Linux mv命令用法和示例
  10. 基本磁盘转换动态磁盘,再转换为基本磁盘,分区数据丢失
  11. 图的深度优先遍历及广度优先遍历
  12. 常用数据接口汇总,百度、谷歌、头条、微博指数,高校名单,疫情数据...
  13. Adobe Photoshop如何导入动作?ps 2020动作导入方法详解,PS动作安装教程
  14. 唯冠向苹果索赔100亿
  15. 二、ADS实现阻抗匹配的三种案例(二)
  16. 爬虫实战-爬取wallhaven图片(小白入门)
  17. 一天一图学Python可视化(1):线性回归图
  18. L1-038 新世界 Python
  19. 提升OneDrive空间
  20. TCP/IP 四层模型 图文详解

热门文章

  1. Servlet(10)—请求转发和请求重定向
  2. Songs ever sing
  3. Neo4j安装及使用
  4. 黑马程序员传智播客 正则表达式学习笔记 匹配单个字符多个字符
  5. 190923每日一句
  6. Atitit mybatis的扩展使用sql udf,js java等语言 目录 1.1. 默认,mybatis使用xml,sql等语言来书写业务流程 1 2. 使用java扩展函数 1 2.1.
  7. Atitit 项目管理之道 attilax著
  8. Atitit easyui翻页组件与vue的集成解决方案attilax总结
  9. atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本
  10. paip.银行卡号的效检