一、课题目标
本文主要介绍了一种采用基于matlab数字图像处理的图像识别技术,对身份证原始图像中的序列号标示进行图像识别的方法。该系统通过图像预处理、图像定位、图像校正并最终输出结果。在系统调试阶段,根据遇到的错误即时对原系统进行调整,并最终获得较为稳定高效的身份证序列号快速识别系统。
二、算法流程
学习MATLAB程序设计,利用MATLAB函数功能,设计和实现一种身份证号识别系统。身份证号识别系统的基本工作原理为:将不同途径获取的身份证图像输入到计算机中进行预处理,再对身份证序列号进行搜索、检测、定位,并分割出包含身份证序列号的矩形区域,实现对序列号的快速识别。
三、设计的实现
1.载入原始图像
系统调试过程中原始图像的获取从百度图片中获得,在后续系统测试过程中为了验证系统的稳定性和统一性加入直接扫描获得的图片作为原始图像。
>> I=imread('1.jpg');
figure(1),imshow(I);
title('原始图像');%将身份证的原图显示出来,并加标题为“原始图像”。
结果如下:

图1 身份证原始图像
2. 将彩图转换为灰度图并绘制直方图
在数字图像处理中,灰度直方图是最简单且最有用的工具,直方图表达的信息是每种亮度的像素点的个数。直方图是图像的一个重要特征,因为直方图能够用少量的数据表达图像的灰度统计特征。一个灰度级别在范围[0,L-1]的数字图像的直方图是一个离散的函数:

(其中,n是图像的像素总数;nk是图像中第k个灰度级的像素总数;rk是第k个灰度级,k=0,1,2,…,L-1)
具体程序如下:
>> I1=rgb2gray(I);%将RGB图转换为灰度图
figure(4),subplot(1,2,1),imshow(I1);
title('灰度图');%绘制灰度图
figure(4),subplot(1,2,2),imhist(I1);
title('灰度图直方图');%绘制灰度图的直方图
结果如下:

图2 灰度图直方图
3. 原始图像几何变换
由于身份证序列号固定位于图像右下角,为了更好的对图样进行操作及有效处理,先对原始图像中序列号进行粗定位,对原始图像进行剪切及放大操作。(在系统完成后测试代码时发现,对不同采样图像原始大小不同,以下代码调试所用原图大小为[475,225],故对其他采样图像可以压缩至同等大小,故本系统中剪切图像选择区域即具有普适性,压缩程序在系统调试中加以说明,在此略过。)
3.1 图像剪切
在matlab中,用函数imcrop实现对图像剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。
具体程序如下:
>>I2=imcrop(I,[ 180,300,480,180]);%在一定区域范围内对图像进行剪切
figure(2);imshow(I2);
title('剪切后的图像');%显示图像并命名为“剪切后的图像”
结果如下:

图3 对原始图像进行剪切后的图像
3.2 图像的放大
对原图像进行放大操作,以便于后期处理及有效识别。Matlab中,用函数imresize来实现对图像的缩放。可以使用最近邻值、双线性插值和双三次插值方法。其中直接赋值为和它最相近的像素灰度值,称为最近邻插值法,该方法的主要特点是简单、计算量很小,但放大效果较差,可能会产生马赛克现象。通过数学插值算法来计算相应的像素点的灰度值,这类方法处理效果好,但运算量会有所增加。本文选用的是双线性插值法进行放大操作。
具体程序如下:
>> I3=imresize(I2,2,'bilinea');%对剪切后图像进行双线性插值法进行放大2倍处理
>> figure(3);imshow(I3);
>> title('双线性插值图像');
结果如下:

图4 双线性插值图像
4.边缘检测
图像的边缘是指其周围像素灰度急剧变化的那些像素的集合,她是图像最基本的特征。边缘存在于目标、背景和区域之间,所以它是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要特征。
边缘检测的基本思路是先检测图像中的边缘点,在按照某种策略将边缘点连接成轮廓,从而构成分割区域。由于边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开,因此边缘检测对于数字图像处理十分重要。
一阶微分边缘算子也称梯度边缘算子,他是利用图像在边缘处的阶跃性,即图像梯度在边缘取得极大值的特性进行边缘检测的,本文采用sobel算子进行边缘检测。
具体程序如下:
>> I4=edge(I3,'sobel');%用sobel算子进行边缘检测
figure(5),imshow(I4);
title('sobel算子边缘检测图像');
结果如下:

图5 sobel算子边缘检测图像
5. 图像腐蚀
腐蚀运算是形态学处理的基础,腐蚀表示用某种(即某种形状的基元或者结构元素)对一个图像进行探测,以便找出在图像内部可以放下该基元的区域。腐蚀过程相当于“收缩”或“细化”二值图像中的对象,采用matlab中的imerode函数来实现腐蚀操作。
具体程序如下:
se=[1;1;1];%选取结构元素矩阵
I5=imerode(I4,se);%对图像实施腐蚀操作,即膨胀的反操作
figure(6),imshow(I5);%显示图6
title('腐蚀操作');%将图像命名为“腐蚀操作”
结果如下:

图6 进行腐蚀操作后的图像
6.平滑图像
任何一副原始图像在获取和传输等过程中,会受到各种噪声的干扰,使图像质量下降,图像模糊,特征淹没,对图像分析不利。为了抑制噪声改善图像质量所进行的处理称图像平滑或去噪。图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。图像平滑可以在空间域和频率域中进行。本文采用imclose函数对图像进行平滑处理,imclose是对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
具体程序如下:
>> se=strel('rectangle',[25,25]);%构造结构元素以正方形构造一个se
I6=imclose(I5,se);% 图像平滑、填充图像
figure(7),imshow(I6);
title('平滑图像');
结果如下所示:

图7 平滑图像
7. 删除二值图像的小面积对象
采用matlab中bwareaopen函数删除二值图像BW中面积小于某值的对象,此数值经过调试后在本系统中定位1000。
具体程序如下:
>> I7=bwareaopen(I6,1000);% 去除灰度值小于1000的部分
figure(8),imshow(I7);
title('删除小面积对象'); %显示滤波后图像并命名为“删除小面积对象”
结果如下:

图8 删除小面积对象
8. 身份证号定位
采用以下程序对身份证号进行定位并显示最终图像,相关程序说明见备注。
具体程序如下:
>> [y,x,z]=size(I7);%返回I7各维的尺寸,存储在x,y,z中
I8=double(I7);%将I7转换成双精度
tic %tic表示计时的开始,toc表示计时的结束
Color_y=zeros(y,1);%产生一个y*1的零阵
for i=1:y
for j=1:x
if(I8(i,j,1)==1)
%如果I8 (i,j,1)即I8的图像中坐标为(i,j)的点值为1,即该点为背景颜色,则Color_y i,1)的值加1
Color_y(i,1)= Color_y(i,1)+1;%背景颜色像素点统计
end
end
end
[temp MaxY]=max(Color_y);%Y方向序列号区域确定
%temp为向量Color_y的元素中的最大值,MaxY为该值的索引
PY1=MaxY;
while ((Color_y(PY1,1)>=5)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while ((Color_y(PY2,1)>=5)&&(PY2<y))
PY2=PY2+1;
end
IY=I3(PY1:PY2,:,:);
%行方向号码区域确定
Color_x =zeros(1,x);%进一步确定x方向的序列号区域
for j=1:x
for i=PY1:PY2
if(I8(i,j,1)==1)
Color_x(1,j)= Color_x(1,j)+1;
end
end
end
PX1=1;
while ((Color_x(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while ((Color_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1-1;%对序列号区域的校正
PX2=PX2+1;
dw=I3(PY1:PY2-8,PX1:PX2,:);
t=toc;
figure(9),imshow(IY),title('此身份证号为');%显示最终结果
最终身份证号如下所示:

图9 最终身份证号