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

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

#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/

    你可能感兴趣的文章
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>