当前位置:网络安全 > Matlab实现身份证号码快速识别

Matlab实现身份证号码快速识别

  • 发布:2023-09-29 11:55

使用Matlab实现身份证号码快速识别

摘要:讨论身份证号码的快速识别。首先从身份证图像中获取0到9的10个数字的样本图像,并从中提取其空间分布特征和结构特征;然后从待识别的身份证图像中提取每个号码的空间分布特征和结构特征;最后利用最大相似系数和结构特征一致性判据对各个号码进行识别,并利用Matlab编程实现身份证号码的快速识别。

关键词:身份证号码;鉴别; MATLAB;分布特征;结构特点;相似系数


  1. 简介

身份证作为居民身份的象征,已经成为生活中不可或缺的证件。为了保护公民的合法权益和社会安全,越来越多的行业开始要求实名制和身份证登记管理,如公安、海关、银行、通讯、网吧酒店、洗浴行业等。 ,所以利用计算机自动识别和录入就显得尤为必要。自动识别身份证代替人工录入可以大大提高工作效率,因此具有广阔的应用前景。

本文以二代居民身份证为研究对象,从身份证号码图像

中提取数字0~9的空间分布特征和结构特征,采用最大相似系数和结构特征一致准则,利用Matlab软件编程实现身份证号码的快速识别。

基本原理

身份证号码识别技术的基本原理如图1所示。




图1 ID号识别技术基本原理图


第二代居民身份证的尺寸是固定的,宽8.6厘米,高5.4厘米。因此,扫描身份证得到的图像可以缩放到相同的尺寸。本文使用的图像宽度为366像素,高度为366像素。为233像素,这样在从身份证图像中提取号码数字图像时可以快速定位。

由于第二代居民身份证的数字字体比较特殊,需要从身份证图像中获取数字0到9的图像作为样本进行特征提取。图 2 显示了示例数字图像。

该样本数字图像是真彩色图像,需要进行预处理。第一




图2 第二代居民身份证号码数码图像样本

首先将真彩色数字图像转换为二值图像:设P为真彩色数字图像的任意点,P的三个颜色分量值分别为r、g、b。如果 0.299*r+

0.587*g+0.114*b<0.5,则二值图像对应的点为白色,否则为黑色。然后对二值图像进行数字分割,将图像中的10个数字完整地、单独地分割出来。最后,对每个分割后的数字图像进行归一化:如果单个数字图像的整行或整列全为0,则删除该行或列。每个样本预处理后的数字图像如图3所示。





图3 预处理后的样本数字图像

注:为了达到更好的视觉效果,每个样本数字图像周围都添加了一个黑色矩形框。

完成预处理后,下一步就是提取每个数字的特征。本文将每个数字的空间分布和形状结构特征作为分类和识别的特征。

  1. 空间分布特征


首先将预处理后的样本数字图像视为质量图形,其中白点质量为1,黑点质量为0。该图的质心坐标可以大致反映对应数字的空间分布。用x1和x2分别表示质心的横坐标和纵坐标。那么x1等于样本数字图像中白点的横坐标之和除以白点的数量。数字; x2 等于样本数字图像中白点的纵坐标之和除以白点的数量。

然后将样本数字图像分为上下两部分,用x3和x4分别表示样本数字图像上半部分质心的横坐标和纵坐标;使用x5和x6分别表示样本数字图像的下半部分。零件质心的横坐标和纵坐标。

最后将样本数字图像分为左右两部分,使用x7和x8

分别表示样本数字图像左半部分质心的横坐标和纵坐标;使用

x9和x10分别表示样本数字图像

右半部分质心的横坐标和纵坐标


坐标。

每个区域质心的横坐标是该区域内白点横坐标之和除以该区域内白点数量;每个区域的质心纵坐标是该区域中白点的纵坐标之和除以该区域中白点的数量。

这10个质心坐标组成的向量:

x= (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) T

是样本数字图像对应的数字的空间分布特征。将每个数字的空间分布特征向量一一计算出来,存入数组中。

  1. 结构特点


利用数字的空间分布特征,数字“1”、“2”、“4”、

“5”和“7”被正确识别,但数字“0”、“3”、“6”、“8”、

“9”有时无法正确识别。对这些可能造成误判的数字进行分析后,不难发现它们的形状和结构特征很明显。数字“0”和

“6”和“9”各有一个孔;数字“3”不包含孔;数字“8”有两个孔。由于身份证号码字体的特殊性,数字“1”、“2”、

“4”、“5”和“7”均不含孔。

Matlab 中的 bweuler 函数返回二值图像的欧拉数。欧拉数是图像的拓扑度量。它是指图像中物体总数与这些物体中的孔洞数量之差。可以使用 4 连通或 8 连通邻域。各数的欧拉数见表1。

表1各数的欧拉数




本文使用8个连通邻域,以每个样本数字图像的欧拉数作为其结构特征,并将其存储在数组E(10)中。

  1. 分类识别标准


样本数字图像的空间分布特征和结构特征分别存储在数组digital(10, 10)和E(10)中。对于待识别的ID号目标(共18个),按照前面类似的处理过程,提取每个号码的空间分布特征和结构特征,并存储在数组obj(18, 10)和objE中

(18) 英寸。

设x= (x, x,, .., x) T为目标位数的空间分布特征,

清晰

%读取样本数字图像并二值化 RGB=im2double(imread('Digital.jpg')); [高度,宽度,n]=尺寸(RGB); BW=零(高,宽);

对于 i=1:高度 对于 j=1:宽度 r=RGB(i,j,1);

g=RGB(i,j,2);

b=RGB(i,j,3);如果(0.299*r+0.587*g+0.114*b<0.5)

BW(i,j)=1;

其他

BW(i,j)=0;

端端端

% 预处理并统计每个样本数的分布特征

宽度=宽度/10; N=零(10,5);数字=零(10,10); E=零(1,10);

对于 k=0:9

A=BW(:,1+k*宽度:宽度+k*宽度);

对于待识别的目标数字,计算该数字的空间分布特征与10个样本数字的空间分布特征之间的相似系数。分类识别标准为:在结构特征一致的情况下,相似系数最大,对应的样本数即为目标数的识别结果。

程序实现

使用Matlab6.5(R 13版本)作为开发工具,在Windows下

XP平台实现身份证号码快速识别。

图4是程序使用的身份证图像。程序的输出结果为:

350426198107282635。对多张身份证图像进行了测试,均获得了正确的结果。




图4待识别身份证图像

身份证号码识别程序代码如下:


1 2 10


y= (y1, y2, ... , y10) T 为样本个数的空间分布特征。两者之间的相似系数定义为:


B=[];

对于 i=1:宽度 a=A(:,i);

如果 sum(a)~=0 B=[B a];

结束结束

样本=[];对于 j=1:高度 b=B(j,:);

如果 sum(b)~=0 样本=[样本;b];

结束

结束

E(k+1)=bweuler(样本,8);

%计算每个样本的欧拉数[m,n]=size(Sample);对于 i=1:m

对于 j=1:n

如果样本(i,j)==1 N(k+1,1)=N(k+1,1)+1; % 总白点

数字(k+1,1)=数字(k+1,1)+i; %横坐标和数字(k+1,2)=数字(k+1,2)+j; %纵坐标,如果 i

N(k+1,2)=N(k+1,2)+1;

上半部分

%白点

数字(k+1,3)=数字(k+1,3)+i;

% 横坐标上半部分和

数字(k+1,4)=数字(k+1,4)+j;

% 上半部分的垂直坐标和

结束

如果 i>m/2 N(k+1,3)=N(k+1,3)+1;

下半部分

%白点

数字(k+1,5)=数字(k+1,5)+i;

%下半部横坐标和

数字(k+1,6)=数字(k+1,6)+j;

%下半部分的垂直坐标和

结束

如果j

% 左半部分有白点

数字(k+1,7)=数字(k+1,7)+i;

%横坐标的左半部分和

数字(k+1,8)=数字(k+1,8)+j;

%左半边的垂直坐标和

结束

如果 j>n/2 N(k+1,5)=N(k+1,5)+1;

右半部分

%白点

数字(k+1,9)=数字(k+1,9)+i;

%右半边横坐标和

数字(k+1,10)=数字(k+1,10)+j;

%右半部分的垂直坐标和

端端端端

数字(k+1,1)=数字(k+1,1)/N(k+1,1);

% 总体质心横坐标

数字(k+1,2)=数字(k+1,2)/N(k+1,1);

% 总体质心纵坐标

数字(k+1,3)=数字(k+1,3)/N(k+1,2);

%上半部质心横坐标

数字(k+1,4)=数字(k+1,4)/N(k+1,2);

%上半部质心垂直坐标

数字(k+1,5)=数字(k+1,5)/N(k+1,3);

%下半部质心横坐标

数字(k+1,6)=数字(k+1,6)/N(k+1,3);

%下半部质心垂直坐标

数字(k+1,7)=数字(k+1,7)/N(k+1,4);

%左半部质心横坐标

数字(k+1,8)=数字(k+1,8)/N(k+1,4);

%左半部质心纵坐标

数字(k+1,9)=数字(k+1,9)/N(k+1,5);

%右半部质心横坐标

数字(k+1,10)=数字(k+1,10)/N(k+1,5);

%右半部质心垂直坐标

结束

% 获取身份证号并二值化 I=im2double(imread('IDCard01.jpg'));图,imshow(I); x1=127;x2=127+11; y1=190;y2=210; IDRGB=I(y1:y2,x1:x2,:,:,:);

对于 i=1:17

x1=127+11*i; x2=127+11*(i+1); C=I(y1:y2,x1:x2,:,:,:); IDRGB=[IDRGB C];

end [ID高度,ID宽度,k]=尺寸(IDRGB); IDBW=zeros(ID高度,ID宽度);对于 i=1:ID 高度

对于 j=1:IDwidth r=IDRGB(i,j,1);

g=IDRGB(i,j,2);

b=IDRGB(i,j,3);如果(0.299*r+0.587*g+0.114*b<0.5)

IDBW(i,j)=1;

其他

IDBW(i,j)=0;

结束结束



结束

% 预处理并统计目标数字对象的分布特征

ID宽度=ID宽度/18; obj=零(18,10); objN=零(18,5); objE=零(1,18);

k=1:18

IDA=IDBW(:,1+(k-1)*ID宽度:k*ID宽度); IDB=[];

对于 i=1:IDwidth IDa=IDA(:,i);

if sum(IDa)~=0 IDB=[IDB IDa];

结束结束对象=[];

对于 j=1:IDheight IDb=IDB(j,:);

if sum(IDb)~=0 对象=[对象;IDb];

结束结束

objE(k)=bweuler(对象,8); %欧拉数

[m,n]=大小(对象);对于 i=1:m

对于 j=1:n

if 对象(i,j)==1 objN(k,1)=objN(k,1)+1;

obj(k,1)=obj(k,1)+i;

obj(k,2)=obj(k,2)+j;如果我

objN(k,2)=objN(k,2)+1;

obj(k,3)=obj(k,3)+i;

obj(k,4)=obj(k,4)+j;结束

如果 i>m/2 objN(k,3)=objN(k,3)+1;

obj(k,5)=obj(k,5)+i;

obj(k,6)=obj(k,6)+j;结束

如果j

obj(k,7)=obj(k,7)+i;

obj(k,8)=obj(k,8)+j;结束

如果 j>n/2 objN(k,5)=objN(k,5)+1;

obj(k,9)=obj(k,9)+i;

obj(k,10)=obj(k,10)+j;结束

结束

结束


结束

obj(k,1)=obj(k,1)/objN(k,1);

obj(k,2)=obj(k,2)/objN(k,1);

obj(k,3)=obj(k,3)/objN(k,2);

obj(k,4)=obj(k,4)/objN(k,2);

obj(k,5)=obj(k,5)/objN(k,3);

obj(k,6)=obj(k,6)/objN(k,3);

obj(k,7)=obj(k,7)/objN(k,4);

obj(k,8)=obj(k,8)/objN(k,4);

obj(k,9)=obj(k,9)/objN(k,5);

obj(k,10)=obj(k,10)/objN(k,5);结束

%分类标识String='0123456789'; ID卡号='';

对于 k=1:18 R=0.0; j=0;

x=obj(k,:);对于 i=0:9

y=数字(i+1,:); r=sum(x.*y)/sqrt(sum(x.*x)*sum(y.*y));

%相似系数

if r>R&objE(k)==E(i+1)%分类识别标准

R=r;

j=i;结束结束

IDCardNO=strcat(IDCardNO,字符串(j+1));结束

显示(ID卡号); %显示识别结果


? ,测试了多张身份证图片(将程序中的IDCard01.jpg替换为待测试身份证图片的文件名),均能快速准确识别。


参考文献

  1. 编辑器。 MATLAB7.0 用户指南。电子工业出版社,2014.
  2. 梅长林,周家良主编。实用统计方法。科学出版社,2016。

相关文章