资源简介
利用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
- 在matlab中连续区间 交集 和 并集
- 基于matlab实现gold码
- 作业车间调度matlab源码及解析
- 邮政编码识别
- 基于Matlab的导线网坐标计算
- 基于MATLAB工具的遗传算法求解有约束
- 电力系统牛拉法潮流计算MATLAB程序
- 基于块匹配的视频序列的运动补偿
- 曲波变换重构
- 免疫算法matlab-物流中心选址的应用
- 烟花算法进行函数优化通用matlab代码
- 基于MATLAB的鸢尾花数据集分类
- MATLAB串口通信软件
- 非对称限幅正交频分复用matlab实现
- 智能车matlab仿真代码更新版
- 光伏阵列matlab仿真
- 超效率dea,BCCCCR三个模型matlab代码
- 磁链观测器模型
- FastICA2.5
- 图像傅里叶变换和幅度、相位谱重组
- 基于MATLAB 的三项桥式全控整流电路仿
- MUSIC算法AOA估计
- 情感语音识别代码matlab
- matlab程序补偿色散
- 小世界网络属性
- SOM-TSP[Matlab].rar
- matlab的逆变电路仿真
- 两机五节点系统的潮流计算
- matlab与ABB机器人建立socket通讯
评论
共有 条评论