指纹识别研究
for x=2:H-1 for y=2:L-1 if e(x,y)==1
if e(x-1,y) + e(x-1,y+1) +e(x,y+1) + e(x+1,y+1) + e(x+1,y) + e(x+1,y-1) + e(x,y-1) + e(x-1,y-1) <=4 e(x,y)=0; end end end end
Icc = ones(m,n); for x=1:H for y=1:L if e(x,y)==1 for i=1:M for j=1:M
I(i+(x-1)*M,j+(y-1)*M)=G1; Icc(i+(x-1)*M,j+(y-1)*M)=0; end end end end end
figure, imshow(uint8(I));title('分割');
得到的图像如图4:
图4经过分割处理后的图像
6
指纹识别研究
2.3图像二值化
一般的指纹图像都有比较清晰的方向场,方向场估计得准确性直接决定了图像增强算法的效果。
为估计方向场,我们把指纹脊线的走向分为如下8个方向,如下图:
图5 在一个像素处的8个指纹脊线方向
我们先对分割后的图像进行了平均滤波,然后对图像的每一个像素,为确定在该像素出的脊线方向,在以该像素为中心的9*9窗口内,分别计算8个方向上的经过处理后的灰度值,即将图5中标了i(i=0,1,…7分别代表8个方向)的位置的像素灰度值去他们中最大summax和最小值summin,若满足(summax+summin+ 4*I(x,y))> (3*summ/8),则该像素点的脊
线方向为summin,否则为summax.
确定完方向后就根据该向场对图像进行二值化。
Matlab程序如下:
%二值化ˉ
temp=(1/9)*[1 1 1;1 1 1;1 1 1];%模板系数 均值滤波 Im=double(I); In=zeros(m,n); for a=2:m-1; for b=2:n-1;
In(a,b)=Im(a-1,b-1)*temp(1,1)+Im(a-1,b)*temp(1,2)+Im(a-1,b+1)*temp(1,3)+Im(a,b-1)*temp(2,1)+Im(a,b)*temp(2,2)+Im(a,b+1)*temp(2,3)+Im(a+1,b-1)*temp(3,1)+Im(a+1,b)*temp(3,2)+Im(a+1,b+1)*temp(3,3); end end I=In;
Im=zeros(m,n); for x=5:m-5; for y=5:n-5;
sum1=I(x,y-4)+I(x,y-2)+I(x,y+2)+I(x,y+4);
sum2=I(x-2,y+4)+I(x-1,y+2)+I(x+1,y-2)+I(x+2,y-4); sum3=I(x-2,y+2)+I(x-4,y+4)+I(x+2,y-2)+I(x+4,y-4); sum4=I(x-2,y+1)+I(x-4,y+2)+I(x+2,y-1)+I(x+4,y-2);
7
指纹识别研究
sum5=I(x-2,y)+I(x-4,y)+I(x+2,y)+I(x+4,y);
sum6=I(x-4,y-2)+I(x-2,y-1)+I(x+2,y+1)+I(x+4,y+2); sum7=I(x-4,y-4)+I(x-2,y-2)+I(x+2,y+2)+I(x+4,y+4); sum8=I(x-2,y-4)+I(x-1,y-2)+I(x+1,y+2)+I(x+2,y+4); sumi=[sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8]; summax=max(sumi); summin=min(sumi); summ=sum(sumi); b=summ/8;
if (summax+summin+ 4*I(x,y))> (3*summ/8) sumf = summin; else
sumf = summax; end
if sumf > b Im(x,y)=128; else
Im(x,y)=255; end end end
for i=1:m for j =1:n
Icc(i,j)=Icc(i,j)*Im(i,j); end end for i=1:m for j =1:n
if (Icc(i,j)==128) Icc(i,j)=0; else
Icc(i,j)=1; end; end end
figure,imshow(double(Icc));title('二值化');
得到的二值化图像如图6:
8
指纹识别研究
图6二值化后的图像
2.4图像增强
在当前的指纹采集条件下,不可避免的会受到环境,皮肤上的油脂、水分、污渍的影响,使采集到的指纹图像出现纹线粘连、纹线断裂等缺陷,对后续的指纹特征提取带来很大困难。所以我们必须对指纹图像进行图像增强处理,例如分离粘连的纹线,连接断裂的纹线,平滑纹线的边缘等,以保证指纹特征提取的可靠性。
实验中进行了初步去除空洞和毛刺的处理,程序如下:
u=Icc;
[m,n]=size(u) %去除空洞和毛刺 for x=2:m-1 for y=2:n-1 if u(x,y)==0
if u(x,y-1)+u(x-1,y)+u(x,y+1)+u(x+1,y)>=3 u(x,y)=1; end
else u(x,y)=u(x,y); end end end
figure,imshow(u) %title('去除毛刺') for a=2:m-1 for b=2:n-1 if u(a,b)==1 if
abs(u(a,b+1)-u(a-1,b+1))+abs(u(a-1,b+1)-u(a-1,b))+abs(u(a-1,b)-u(a-1,b-1))+abs(u(a-1,b-1)-u(a,b-1))+abs(u(a,b-1)-u(a+1,b-1))+abs(u(a+1,b-1
9
指纹识别研究
)-u(a+1,b))+abs(u(a+1,b)-u(a+1,b+1))+abs(u(a+1,b+1)-u(a,b+1))~=1%寻找端点 if
(u(a,b+1)+u(a-1,b+1)+u(a-1,b))*(u(a,b-1)+u(a+1,b-1)+u(a+1,b))+(u(a-1,b)+u(a-1,b-1)+u(a,b-1))*(u(a+1,b)+u(a+1,b+1)+u(a,b+1))==0 %去除空洞和毛刺
u(a,b)=0; end end end end end
figure,imshow(u) %title('去除空洞')
得到的去除毛刺后的图像和再去除空洞后的图像分别如图7和图8:
图7去除毛刺后的图像
图8去除空洞后的图像
2.5图像细化
二值化后的纹线仍然具有一定的宽度,因为指纹识别只与纹线的走向有关,所以需要对二值图像进行细化,以减少冗余信息,突出纹线的有效特征,便于后续的特征提取。
程序如下:
v=~u;
se=strel('square',3); fo=imopen(v,se);
v=imclose(fo,se); %对图像进行开操作和闭操作 w=bwmorph(v,'thin',Inf);%对图像进行细化
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Matlab指纹识别(2)在线全文阅读。
相关推荐: