博客
关于我
【卡号识别】基于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 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>
    MySQL 数据库的高可用性分析
    查看>>
    MySQL 数据库设计总结
    查看>>
    Mysql 数据库重置ID排序
    查看>>
    Mysql 数据类型一日期
    查看>>
    MySQL 数据类型和属性
    查看>>
    mysql 敲错命令 想取消怎么办?
    查看>>
    Mysql 整形列的字节与存储范围
    查看>>
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>