是悲伤的,所有的日子,无论是轻松的抑或是沉重的,都将成为我此生重要的财富,将作为一份最珍贵的回忆永远留在我的心中。
赵丽辉 2014年5月17日
31
附见1 指纹图像预处理函数代码
function [G,g1,g2,g3,g4]= zhiwenyuchuli(I1) I1=imread(I1); I=rgb2gray(I1); M=0; var=0;
[m n ]=size(I); for x=1:m for y=1:n
M=M+double(I(x,y)); end end
M1=M/(m*n); for x=1:m for y=1:n
var=var+(double(I(x,y))-M1).^2; end end
var1=var/(m*n); for x=1:m for y=1:n if I(x,y)>=M1
I(x,y)=150+sqrt(2000*(double(I(x,y))-double(M1))/double(var1)); else
I(x,y)=150-sqrt(2000*(double(M1)-double(I(x,y)))/double(var1)); end end end g1=I;
%***************************************************************************** 分割
M =3; %3*3 H = m/M; L= n/M; aveg1=zeros(H,L); var1=zeros(H,L); % 计算每一块的平均值 for x=1:H for y=1:L aveg=0;var=0;
32
for i=1:M
for j=1:M
aveg=I(i+(x-1)*M,j+(y-1)*M)+aveg; end end
aveg1(x,y)=aveg/(M*M); % 计算每一块的方差值 for i=1:M for j=1:M
var=(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y)).^2+var; end end
var1(x,y)=var/(M*M); end end
Gmean=0;Vmean=0; for x=1:H for y=1:L
Gmean=Gmean+aveg1(x,y); Vmean=Vmean+var1(x,y); end end
Gmean1=Gmean/(H*L);%所有块的平均值 Vmean1=Vmean/(H*L);%所有块的方差 gtemp=0;gtotle=0;vtotle=0;vtemp=0; for x=1:H for y=1:L
if Gmean1>aveg1(x,y) gtemp=gtemp+1;
gtotle=gtotle+aveg1(x,y); end
if Vmean1 vtotle=vtotle+var1(x,y); end end end G1=gtotle/gtemp;V1=vtotle/vtemp; gtemp1=0;gtotle1=0;vtotle1=0;vtemp1=0; for x=1:H for y=1:L if G1 gtotle1=gtotle1+aveg1(x,y); 33 end if 0 vtotle1=vtotle1+var1(x,y); end end end G2=gtotle1/gtemp1;V2=vtotle1/vtemp1; e=zeros(H,L); for x=1:H for y=1:L if aveg1(x,y)>G2 && var1(x,y) if aveg1(x,y)< G1-100 && var1(x,y)< V2 e(x,y)=1; end end end 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 g2=I; %******************************************************************** 34 ********* 二值化 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); 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 35