博客
关于我
【卡号识别】基于matlab CNN银行卡数字识别【含Matlab源码 004期】
阅读量:713 次
发布时间:2019-03-21

本文共 2950 字,大约阅读时间需要 9 分钟。

#CNN 基本原理与应用


一、CNN 简介

卷积神经网络(CNN,Convolutional Neural Network)是一种深度学习模型,广泛应用于图像处理和自然语言处理等领域。其核心设计理念是通过局部感知和参数共享机制,提取图像中的空间特征,从而减少了训练时间和模型复杂度。

1.1 CNN 的应用领域

CNN在以下几个方面有显著应用:

  • 图像处理:图像识别、物体检测、图像生成等。
  • 视频处理:视频分类、内容摘要等。
  • 自然语言处理(NLP):对话生成、机器翻译等。
  • 其他领域:机器人控制、 Recommender 系统等。

1.2 CNN 的网络结构

CNN的网络结构主要包括输入层、卷积层、激活层、池化层、全连接层以及可能存在的批量归一化层(Batch Normalization Layer)。

与传统神经网络的异同点

  • 网络功能
    • CNN强调局部感知和参数共享,传统NN则是全连接结构。
  • 激活函数
    • CNN通常使用ReLU激活函数,传统NN常用Sigmoid或Tanh。
  • 池化作用
    • CNN通过池化层降低维度,提取图像的高频信息。
  • 应用场景
    • CNN在图像分类、物体识别等任务中表现优异。
  • 1.3 CNN 的主要层次

  • 输入层
    • 接收外部输入数据,通常需要进行预处理(如均值化、归一化等)。
  • 卷积层(CONV Layer):
    • 通过固定大小的卷积核(filter),一种局部感知机制,实现图像的局部特征提取。
    • 核心属性:参数共享、滑动窗口、重叠处理。
  • 激活层(ReLU Layer)
    • 对卷积输出进行非线性映射,激活ReLU函数。
  • 池化层(Pooling Layer)
    • 减小特征图的空间尺寸,压缩数据量通常采用Max Pooling或Average Pooling。
  • 全连接层(FC Layer)
    • 作为CNN的输出阶段,整合前面提取的局部特征,完成分类或其他任务。
  • 二、数据预处理

    对于CNN的训练效果,数据预处理起着至关重要的作用。

  • 预处理方法

    • 均值化:将数据集中心化到零区间。
    • 归一化:在均值化基础上除以数据的方差。
    • PCA降维:提取低维表示。
    • 白化:在PCA基础上对特征进行归一化。
  • 实现代码示例

  • x = x - np.mean(x, 0);  % 去均值cov = np.dot(x.T, x) / x.shape[0];  % 计算协方差u, s, v = np.linalg.svd(cov);  % SVD 分解xrot = np.dot(x, u);  % 转置后的矩阵分解x = np.dot(x, u[:, :2]);  %PCA 降维x = xrot / np.sqrt(s + 1e-5);  % 白化

    三、CNN 的优缺点

    3.1 优势

  • 高效特征提取
    • 局部感知机制和参数共享大幅减少了计算复杂度。
  • 深度表达能力
    • CNN能够捕捉图像的深层次特征,模型表达能力强。
  • 自动特征学习
    • 无需手动选择特征,通过卷积核自动提取。
  • 3.2 缺点

  • 训练难度
    • 需要大量数据和长时间计算,通常采用GPU加速。
  • 缺乏解释性
    • 每一层的输出难以解释其物理意义。

  • 四、实际应用代码

    以下为一个简单的CNN模型识别应用实例代码(基于MATLAB):

    % 定位银行卡号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    im=imread(fdir(i).name); % 读取图片    imtp=imresize(im,0.25); % 缩放图片    % 灰度化    if (length(size(im))>1)        im=double(rgb2gray(im));    else        im=double(im);    end    im=imresize(im,0.25); % � 终灰度化并缩放    th=graythresh(im); % 灰度阈值    pt=size(im);        % 提取上下位面    if (method==1)        im=GuassSmoothfilter(im)*255; % 平滑        [Labels,BW]=KmeansSg(im,2); % K均值聚类        [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;    end        imcrop=im(uplevel:downlevel,:); % 裁剪定位区域    po=size(imcrop);    imtpcrop=zeros(po(1),po(2),3);    imtpcrop(1:po(1),:1)=imtp(uplevel:downlevel,:); % 红通道    imtpcrop(1:po(1),:2)=imtp(uplevel:downlevel,:); % 绿通道    imtpcrop(1:po(1),:3)=imtp(uplevel:downlevel,:); % 蓝通道    figure; imshow(imcrop,[]); title('灰度切割');    figure; imshow(imtpcrop,[]); title('彩色切割');    srcyuv=rgb2yuv(imtpcrop); % 转换为YUV通道    figure; imshow(srcyuv(:,:,2),[]); title('YUV-Y通道');    edg=edge(srcyuv(:,:,3),'sobel'); % Canny 边缘检测    figure; imshow(edg,[]); title('边缘检测');    B=im2bw(uint8(imcrop),0.2); % 二值化    figure; imshow(B,[]); title('二值图');    % 提取联通区域    [L,num]=bwlabel(~B,4);    imwrite(uint8((~B)*255),'x.jpg');    recognize; % 卡号识别end

    五、备注

    • 版本:2014a
    • 完整代码代写:联系QQ 912100926

    转载地址:http://kejrz.baihongyu.com/

    你可能感兴趣的文章
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    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同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    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监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>