资源简介
利用matlab,对指纹图片进行预处理,包括缩放处理,归一化,区分出前景色和背景色,沿脊线方向增强指纹纹路,去除指纹中的空洞和毛刺,图像细化,可直接编译使用
代码片段和文件信息
f=imread(‘C:\Users\lin\Desktop\t.png‘);%读取图像到内存
f=imresize(f[363312]);%该函数用于对图像做缩放处理。
figure;imshow(f);
%用rgb2gray 将彩色图像转换为灰度图像。matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。
%所以要先将图像转为double格式的才能运算
gray=double(rgb2gray(f));
%转成uint8 imshow()显示图像时对double型是认为在0~1范围内即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。
%所以对double类型的图像显示的时候,要么归一化到0~1之间,要么将double类型的0~255数据转为uint8类型。
figure;imshow(uint8(gray));
%归一化,灰度值限制在某一范围
M=0;var=0;
%均值
m=size(gray1);n=size(gray2);
for x=1:m
for y=1:n
M=M+gray(xy);
end
end
M1=M/(m*n);%M1为均值 所有像素总共和除以多少个像素
%方差
for x=1:m
for y=1:n
var=var+(gray(xy)-M1).^2;
end;
end;
var1=var/(m*n);%计算方差最终的大小 var1
%归一化 ********************************
for x=1:m
for y=1:n
if gray(xy)>M1
gray(xy)=150+sqrt(2000*(gray(xy)-M1)/var1);
else
gray(xy)=150-sqrt(2000*(M1-gray(xy))/var1);
end
end
end
figure;imshow(uint8(gray));
%*************************************************************************************************************
%归一化处理完毕后会对图像进行分割处理,目的是区分出前景色和背景色。我采用的分割为根据多区域阈值分割。
%多区域分割的效果取决于区域的大小,而指纹的区域分为一脊一谷最好,所以我选择3x3的区域大小。我会根据对区域多次进行求均值和方差进行分割。
%分割 分成多个3*3的块大小
M=3;
H=floor(m/M);L=floor(n/M);
aveg1=zeros(HL);
var1=zeros(HL);
%计算每一块的平均值
for x=1:H
for y=1:L
aveg=0;var=0;
%每一块的均值
for i=1:M
for j=1:M
aveg=gray(i+(x-1)*Mj+(y-1)*M)+aveg;
end;
end;
aveg1(xy)=aveg/(M*M);
%每一块的方差值
for i=1:M
for j=1:M
var=(gray(i+(x-1)*Mj+(y-1)*M)-aveg1(xy)).^2+var;
end;
end;
var1(xy)=var/(M*M);
end;
end;
%所有块的平均值和方差
Gmean=0;Vmean=0;
for x=1:H
for y=1:L
Gmean=Gmean+aveg1(xy);
Vmean=Vmean+var1(xy);
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(xy)%如果当前快的均值小于全局均值 就认为是前景
gtemp=gtemp+1;
gtotle=gtotle+aveg1(xy);
end
if Vmean1 vtemp=vtemp+1;
vtotle=vtotle+var1(xy);
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 gtemp1=gtemp1+1;
gtotle1=gtotle1+aveg1(xy);
end
if 0 vtemp1=vtemp1+1;
vtotle1=vtotle1+var1(xy);
end
end
end
% 背景均值
G2=gtotle1/gtemp1;
% 背景方差
V2=vtotle1/vtemp1;
%我会根据对区域多次进行求均值和方差进行分割。采集到的指纹图背景的灰度值大于前景色,背景主要为低频,所以背景的方差小于前景的方差。
%我分别求得背景和前景的均值和方差然后会得到背景为白色 脊线为黑色。
%然后保存在矩阵e(二值图)中,我会根据e中位置等于1的点的八邻域点的和小于四得到背景色,达到背景和前景分离(e矩阵)。
%****************************************
%构建矩阵(H*L- 上一篇:在matlab中连续区间 交集 和 并集
- 下一篇:霍夫变换圆检测标准MATLAB
相关资源
- 四旋翼MATLAB仿真文件+实验报告
- 串行级联cpm系统MATLAB仿真
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
川公网安备 51152502000135号
评论
共有 条评论