要求是进行归一化,计算方向场,频率场,滤波增强处理,现在我把方向图做出来了,但是有一点问题。有的图片可以运行,不出错,但是另一张图片就会出错,产生3个归一化的图像
clear;close all;
fp=imread('image1.tif'); %读入指纹图象
imshow(fp);title('原始指纹图象') %显示指纹图象
%以下是对原始指纹图象进行归一化,归一化后的灰度均值M0设为100,方差Var0为100
M0=100;
Var0=100;
[len,wid]=size(fp);
fpn=zeros(len,wid); %为归一化后的图象设置存储空间
M=mean2(fp); %求原始指纹图象灰度均值
Var=std2(fp)^2; %求原始指纹图象灰度方差
%归一化
fp=double(fp); %将uint8型转换成double,便于sqrt的计算
for i=1:len
for j=1:wid
if fp(i,j)>M
fpn(i,j)=M0+sqrt( Var0*(fp(i,j)-M)^2/Var );
else
fpn(i,j)=M0-sqrt( Var0*(fp(i,j)-M)^2/Var );
end
end
end
fpn=uint8(fpn);
figure,imshow(fpn);title('归一化后的指纹图象'); %显示归一化后的指纹图象
在绘制方向图的时候,有一段代码看不懂,不太能理解这个意思
switch y1
case 1
angle_xy(4,[2:7])=0; %方向1,即方向为0度时,令第8行第2-15列的元素为0(黑色)
case 2
idx=sub2ind(size(angle_xy),[ 3 4 4 5 5 6 ],[2:7]);
angle_xy(idx)=0;
case 3
idx=sub2ind(size(angle_xy),[2:7],[2:7]);
angle_xy(idx)=0;
case 4
idx=sub2ind(size(angle_xy),[2:7],[ 3 4 4 5 5 6 ]);
angle_xy(idx)=0;
case 5
angle_xy([2:7],4)=0;
case 6
idx=sub2ind(size(angle_xy),[7:-1:2],[ 3 4 4 5 5 6 ]);
angle_xy(idx)=0;
case 7
idx=sub2ind(size(angle_xy),[7:-1:2],[7:-1:2]);
angle_xy(idx)=0;
case 8
idx=sub2ind(size(angle_xy),[ 6 5 5 4 4 3 ],[2:7]);
angle_xy(idx)=0;
end
block_dmap([1+(i-1)*8:8+(i-1)*8],[1+(j-1)*8:8+(j-1)*8])=angle_xy;