【身份证识别】基于BP神经网络实现身份证识别附matlab代码

news2024/11/13 8:00:55

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

算法流程1、输入身份证明图片;2、根据几项信息确定职位身份验证码职位设置并切割;3、利用连接域计算法切字符;4、利用模板匹配算法进入行识别

数学形态学分为值形态学和形态学形态学,灰度灰度形态学二值二值形态形态学扩展扩展扩展而而而来来来来来。。。。数学数学数学数学数学数学数学数学数学数学数学数学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学形态学结合又形成了开运算和闭运算。开运算就是先腐朽再腐朽,闭运算就是先腐朽再腐朽。

1 二值形态学粗略的说,腐朽可以使目标区域范围“变小”,其实质制造成图像的边界收窄,可以用来消去小而无意的目标标子:呔子。

by a,a,需要是是是是需要原点原点原点原点原点原点原点原点原点原点原点当B的原点平移到图像A的像元(x,y)时,如果B在(x,y)处,完全被包含在图像A重迭的区域也域,(就是B中为1的元素位置上对应的A图形值全部也为1)则将输出图形对应的图形元(x,y)赋值为1,否则赋值为0。我们看一个表演图。 B依顺顺序在A上移动(和卷积核在图像上移动一样,然后在B的外壳域上进行形状学运算),当其外壳A的区域为[1,1;1,1]或[1 ,0;1,1]时,(也就是B中'1'是覆盖区域的子集)对输出图像的位置才会为1。

2 膨胀粗略地说,“变”,“,”,将将接触接触背景点合并目标物中中中中去除包含在目标区域中的小颗粒噪音。

该式子表示用结构B膨胀A,将结构元素B的原点平移到图形像元(x,y)位置。如果B在图形像元(x,y)处与A的交集就不是空( B中为1的元素位置上对应A的图形直至有一个为1),则输出图形对应的图形元(x,y)赋值为1,否则赋值为0。演示图为: 3 小结也就还是,都还是膨胀膨胀膨胀元素元素元素元素元素把那样那样那样那样那样那样元素上。只是不过腐朽是B被完整包裹在其所覆盖的区域,膨胀时B与其他所覆盖的区域有交集即可。

4灰度形态学在讲述灰度值形态学之前,我们进行一个约定,即将结束结构元素B覆盖住的图像A的区域记为P(取部分之意)。

5 灰度形态学的腐蚀那么灰度形状学中的腐殖质就是类似卷积的一种操作,用P减去结构元素B形状的小石头形状,取其中最小的赋值到对应点的位置即可。我们来看一个实例,进行深度对灰度形态学的解释。假设我们有如下的图像A和结构元素B:

进行灰度形态学腐蚀的过程如下: 我们输出个元素的输出结果的的的展示展示展示展示的展示展示的展示的是是原点原点原点原点对应对应对应对应对应对应的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的就是被减数矩阵,然后在其差矩阵中求min(最小值)来作为原点对应位置的值。 灰度形态学的膨胀根据描述,我们的描述描述描述描述描述,灰度,灰度形态学的的中中中的的膨胀膨胀就就就就就是是是是类似类似类似类似卷积卷积卷积卷积一操作操作操作操作操作元素B的原点所对应的位置。 这里也对输出图像第一个元素价值的来历做一个说明。 对上面矩阵的和要求最大的值就是6,所以把6赋值给结构元素原点所对应的位置。

6 小结这里概念,这里概念概念概念这里一各自原图像图像图像图像图像,因为因为原图像原原原原原原相比较于相比较于相比较于相比较于相比较于相比较于相比较于腐蚀的的的的的结果结果结果要使得使得各像之前更度值膨胀的结果会使各元比之之前的变化更大,所以适用于去除低谷噪音。

⛄ 部分代码

function [ id_codes,ibw,id_bw,code_stats,thresh,iteration ] = id_rec_process( img_gray,model,thresh,training_data_size,iteration )

narginchk(1,5) %验证当前执行的函数调用中的输入参数数目。如果调用中指定的输入数目小于1或大于5,narginchk 将引发错误。如果输入数目在1与5之间(包括二者),则 narginchk 不会执行任何操作。

if nargin==1 %参数数目等于1

    model=[];

elseif  nargin<=2 || thresh==0

    thresh=.68*graythresh(img_gray); %使用 Otsu 方法计算全局图像阈值

elseif nargin<=3

    training_data_size=[47 31];

elseif nargin<=4 || isempty(training_data_size)

    iteration=1;

end

% fprintf('Iteration %d, threshold value: %f\n',iteration,thresh)

bw=~imbinarize(img_gray,thresh); %基于阈值将图像转换为二值图像 再取反

ibw=bwareaopen(bw,10);%bwareaopen(BW,P) 从二值图像BW中删除少于P个像素的所有连通分量;

bw=imclearborder(ibw); 

% imclearborder(I)抑制图像中比周围环境轻且连接到图像边框的结构。使用此功能可清除图像边框。简单说,这个函数的作用就是:把与图像边界相连接的像素全部清除。

bwc=imdilate(bw,strel('disk',6)); %strel('disk',r,n) 创建一个圆盘形结构元素,其中r指定半径,n指定用于逼近盘形的线条结构元素的数量。n缺省时值是4。注:形态学操作在N>0情况下要快于N=0的情形。

% imdilate(I,SE) 使用结构元素SE膨胀灰度、二值或压缩二值图像 I。

code_stats=regionprops(bwc,'Area'); %regionprops(BW,properties) 返回二值图像BW中每个8连通分量(对象)的属性集的测量值。'Area':计算出在图像各个区域中像素总个数。区域中的实际像素数。

%代码结构体,1×1 struct 包含一个字段Area 例如:值6248

step_ratio=1.1; %阶比

if isempty(code_stats) && thresh*step_ratio<1

    [id_codes,ibw,id_bw,code_stats,thresh,iteration]=id_rec_process(img_gray,model,thresh*step_ratio,training_data_size,iteration+1);%再次调用执行。

    return

end

id_codes=blanks(18); %创建空白字符数组

if isempty(code_stats)

    id_bw=bw;

    return

end

[~,midx]=max([code_stats.Area]); %在matlab中~表示占位 忽略输出参数,只需要第二个参数

mask=bwlabel(bwc)==midx; %bwlabel 对二维二值图像中的连通分量进行标注;L = bwlabel(BW) 返回标签矩阵L,其中包含在BW中找到的8连通对象的标签。

%先计算bwlabel(bwc)==midx,如果bwlabel(bwc)恒等于midx成立则返回1,如不成立则返回0

id_bw=imreconstruct(mask,bw); %形态学重建

code_stats=regionprops(id_bw,'Image','Extent'); %测量图像区域的属性,代码属性;

% 'Image'与区域的边界框大小相同的图像,以二值 (logical)数组形式返回。on像素对应于该区域,所有其他像素为off。与某区域具有相同大小的逻辑矩阵,可以直接将每个子区域提取出来。

% 'Extent'区域中的像素数与边界框中总像素数的比率,以标量形式返回。计算方法为Area除以边界框的面积。即同时在区域和其最小边界矩形中的像素比例。

%18×1 struct包含2个字段Image和Extent 每一块区域的二值数组图和每一块的像素数占该块总数的比

if length(code_stats)~=18 && thresh*step_ratio<1

    [id_codes,ibw,id_bw,code_stats,thresh,iteration]=id_rec_process(img_gray,model,thresh*step_ratio,training_data_size,iteration+1);

    return

end

if length(code_stats)==18

    inputs=zeros(training_data_size(1)*training_data_size(2),18);

    for i=1:size(inputs,2)

        img=imresize(code_stats(i).Image,training_data_size);

        inputs(:,i)=img(:);

    end

    

    % predict 预测

    if ~isempty(model)

        try

            output=model(inputs); %输入模型,结果输出

            [~,midx]=max(output);

            count=size(output,2);

            for i=1:count

                switch midx(i)

                    case 1

                        id_codes(i)='X';

                    otherwise

                        id_codes(i)=num2str(11-midx(i));

                end

            end

        catch e %捕获 .NET 异常的错误信息

            disp(e)

            for i=1:length(e.stack)

                disp(e.stack(i))

            end

        end

    end

end

end

⛄ 运行结果

​⛄ 参考文献

[1]贾震斌, 田立炎. 基于BP神经网络的身份证号码识别算法[J]. 苏州市职业大学学报, 2006, 17(3):3.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录刷题|LeetCode 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

目录 300.最长递增子序列 思路 1、dp[i]的定义 2、递推公式 3、dp数组初始化 4、确定遍历顺序 5、推导dp数组 最长递增子序列 674. 最长连续递增序列 思路 最长连续递增序列 动态规划 贪心算法 718. 最长重复子数组 思路 1、确定dp数组的含义 2、确定递推公式 3、dp数组初始化…

docker 命令

目录 Docker 环境信息命令 docker info docker version 系统日志信息常用命令 docker events docker logs docker history 容器的生命周期管理命令 docker create docker run 常用选项 系统 网络 健康检查 命名空间选项 cgroup资源限制选项 CPU CPUset devi…

李宏毅《DLHLP》学习笔记7 - Voice Conversion 1

视频链接&#xff1a;https://www.youtube.com/watch?vJj6blc8UijY&listPLJV_el3uVTsO07RpBYFsXg-bN5Lu0nhdG&index9&ab_channelHung-yiLee 课件链接&#xff1a;https://speech.ee.ntu.edu.tw/~tlkagk/courses/DLHLP20/Voice%20Conversion%20(v3).pdf 1. 语音转…

永磁同步电机恒压频比(V/F)开环控制系统Matlab/Simulink仿真分析及代码生成到工程实现(二)

文章目录前言一、SVPWM二、永磁同步电机恒压频比开环控制系统Matlab/Simulink仿真分析2.1.仿真电路分析2.1.1.恒压频比控制算法2.1.2.输出处理2.1.3.主电路2.2.仿真结果分析三、永磁同步电机恒压频比开环控制系统代码生成及工程实现3.1.恒压频比开环控制算法代码生成3.2.仿真验…

计算机毕业论文Java项目源码下载基于SSM的旅游资讯网站含前台与后台

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《ssm地方旅游资讯网站》该项目采用技术&#xff1a;jsp 、springmvc、spring、mybatis 、css、js、jQuery、bootstrap、easyui等相关技术&#x…

在云服务器上部署jupyter服务器环境(with conda-forge)

tags: Python Conda Tips Server 写在前面 最近想折腾点服务器的新花样(总是空着太可惜了), 想到前阶段配置的jupyter, 发现这不就能部署在服务端吗?还不走流量的那种(指安装包时候), 话不多说, 开整! 下面的用户名以及组都是test, 用于测试. 大家需要改成自己的用户名. 安装…

【Nginx】负载均衡、动静分离理论篇

一、负载均衡 1. 应用场景&#xff1a; 2. 负载均衡是什么&#xff1f; 在当业务系统服务器无法支撑当前的业务量时&#xff0c;用户可以选择更高性能的服务器。 但更为合理的做法是通过在既有业务服务器基础上&#xff0c;增量的方式增加相同功能的服务器&#xff0c;将处理…

Linux操作系统(基础操作)

文章目录一、文件操作命令1. 目录和文件操作2. 查看文件内容3. 重定向4. 管道二、信息系统相关命令1. 查看系统进程 -- ps2. 查看系统监听端口 -- netstat3. 查看日志信息命令 -- head / tail三、用户权限和管理1. linux中的权限2.修改用户权限chmod3.增加用户、查看登录用户4.…

CAS-比较并交换

CAS-比较并交换 原子类 何为原子类 没有CAS之前 多线程环境不使用原子类保证线程安全i&#xff08;基本数据类型&#xff09; 常用synchronized锁&#xff0c;但是它比较重 &#xff0c;牵扯到了用户态和内核态的切换,效率不高。 public class T3 {volatile int number 0…

JMeter 进行函数助手MD5加密

JMeter 函数助手 MD5 加密 JMeter函数助手中&#xff0c;提供了MD5加密的方法&#xff0c;如图所示&#xff0c;我们将内容 “123456”进行加密&#xff0c;可以看到加密成功了。 下面我们来看看项目接口的请求参数。 这是一个认证接口&#xff0c;我们可以看到请求的参数中包…

MySQL-MVCC多版本控制及事务的隔离性

MySQL事务的启动方式 隐式&#xff1a;执行SQL语句自动提交&#xff08;前提MySQL使用SET AUTOCOMMIT1开启自动提交&#xff09;显式&#xff1a;begin/start transaction; update user set username timi where id 1; commit; begin/start transaction命令并不是一个事务的起…

UE获取当前鼠标点击位置坐标

文章目录 1. 实现目标2. 实现过程2.1 蓝图代码2.2 实现思路3. 参考资料1. 实现目标 获取当前鼠标点击位置的UE世界坐标(x,y,z),效果如下图所示(为便于演示,下图显示了碰撞点位)。 2. 实现过程 2.1 蓝图代码 (1)核心函数的蓝图代码如下: (2)当鼠标左键按下时,…

【✨十五天搞定电工基础】一阶电路的暂态分析

本章要求1. 了解电阻元件、电感元件与电容元件的特征; 2. 理解电路的暂态和稳态、零输入响应、零状态响应、全响应的概念&#xff0c;以及时间常数的物 理意义; 3. 掌握换路定则及初始值的求法; 4. 掌握一阶线性电路分析的三要素法。 目录 一、一阶电路和换路定律 1…

第十四章 图的存储及图的DFS(超级详细!!逐行解析!!)

第十四章 图的存储及图的DFS一、图1、什么是图&#xff1f;2、图的存储&#xff08;1&#xff09;邻接矩阵&#xff08;2&#xff09;邻接表二、图的深度优先搜索1、思路2、模板&#xff08;1&#xff09;问题&#xff1a;如何求左右子树呢?什么时候记录呢&#xff1f;如何构造…

数字孪生场景、代码即开即用 | 图观™引擎 超详细功能范例演示

数字孪生已经从一项前沿技术&#xff0c;演变成为各行各业数字化转型的必选项。 过去想要构建数字孪生应用&#xff0c;要面对视觉设计、三维底座构建、代码开发、数据对接、部署联调等一系列复杂工作。不仅要了解复杂的数学基础知识、底层三维开发技术&#xff0c;还要熟知各…

Spring Cloud微服务迁移到Kubernetes容器化

文章目录相关文章k8s容器部署流程熟悉Spring Cloud微服务项目源代码编译构建构建项目镜像并推送到镜像仓库制作镜像将镜像推送到harbor仓库K8s服务编排部署基础环境在K8s中部署Nacos集群&#xff08;注册和配置中心&#xff09;在k8s中部署Seata分布式事务在linux部署mysql,red…

李炎恢ECMAScript6 / ES6+(二)

16.Set 数据集合 学习要点&#xff1a; 1.Set 数据集合 本节课我们来开始学习 ES6 新增的 Set 数据集合的用法&#xff1b; 一&#xff0e;Set 数据集合 1.ES6 之前只有数组一种数据结构&#xff0c;而现在提供了 Set 和 Map 两种集合&#xff1b; 严格来说&#xff0c;对象…

PC辉光效果一切正常,安卓辉光却没效果、显示异常(爆闪、黑屏等)

一&#xff1a;安卓端辉光不显示问题 问题描述&#xff1a;项目中使用unity的PostProcessing package实现辉光的功能&#xff0c;在pc上辉光效果一切正常&#xff0c;但是打出apk在真机测试时&#xff0c;辉光基本没效果。 解决思路&#xff1a;PostProcessing Bloom效果需要有…

【ArcGIS微课1000例】0056:将单波段栅格背景设置为无数据NoData的方法

本文讲解将单波段栅格背景设置为空值的方法,以DEM数据为例。 文章目录 一、DEM设置无数据二、注意事项单波段数据,一般只有DEM,遥感单波段影像,二值化图像等。 使用珊格计算器通过SetNull 函数(设定空值函数)可以将特定值计算为空值(NoData),SetNull的语法格式为: Se…

[附源码]Python计算机毕业设计Django教育企业网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…