博客
关于我
【卡号识别】基于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/

    你可能感兴趣的文章
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>
    MySQL 证明为什么用limit时,offset很大会影响性能
    查看>>
    Mysql 语句操作索引SQL语句
    查看>>
    MySQL 误操作后数据恢复(update,delete忘加where条件)
    查看>>
    MySQL 调优/优化的 101 个建议!
    查看>>
    mysql 转义字符用法_MySql 转义字符的使用说明
    查看>>
    mysql 输入密码秒退
    查看>>
    mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
    查看>>
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    查看>>
    mysql 里对root及普通用户赋权及更改密码的一些命令
    查看>>
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>