clear all;
clc;
image0=imread('20991.bmp'); %导入指纹图片
image0size=size(image0);
if numel(image0size)>2
huidu=rgb2gray(image0); %若为彩色图像,则转化为灰度图
else
huidu=image0;
end
huidu=huidu(31:350,20:339); %取区域部分
huidutu=imadjust(huidu); %增强对比度
[L,W]=size(huidutu); %图片大小
Dhuidutu=double(huidutu); %转成双精度
s=[-1 -2 -1;0 0 0;1 2 1]; %Sobel算子口
Gx=filter2(s,huidutu); %得梯度向量的Gx分量
Gy=filter2(s',huidutu); %得梯度向量的Gy分量
Gsx=[zeros(L,3) Gx zeros(L,3)]; %扩充矩阵
Gsx=[zeros(3,W+6);Gsx ;zeros(3,W+6)];
Gsy=[zeros(L,3) Gy zeros(L,3)]; %扩充矩阵
Gsy=[zeros(3,W+6);Gsy; zeros(3,W+6)];
Gsx2=[zeros(L,W)];
Gsy2=[zeros(L,W)];
for j=4:L+3 %以7X7的窗口进行分块并求取方向图
for k=4:W+3
for x=j-3:j+3
for y=k-3:k+3
Gsx2(j-3,k-3)=Gsx2(j-3,k-3)+2*Gsx(x,y)*Gsy(x,y);
Gsy2(j-3,k-3)=Gsy2(j-3,k-3)+(Gsx(x,y))^2-(Gsy(x,y))^2;
end
end
end
end
v=0.5*atan(Gsy2./Gsx2); %得到的方向图