求基于matlab指纹扫描图像处理的源代码

求基于matlab指纹扫描图像处理的源代码,第1张

clear all,close all,clc% 清理工作空间,关闭运行窗口,清理命令窗口

I=imread('Empreinte.bmp')% 读入图像

imshow(I) % 显示图像

set(gcf,'position',[1 1 600 600])% 得到图形窗口句柄,设置图形窗口位置

J=I(:,:,1)>160% 设定阈值为160,进行黑白化处理

imshow(J) % 显示处理后的图像

set(gcf,'position',[1 1 600 600]) % 得到图形窗口句柄,设置图形窗口位置

K=bwmorph(~J,'thin','inf') % 数学形态学运算,图像细化,~符号代表黑白反色

imshow(~K) % 显示处理后的图像,~符号代表散迟黑白反色

set(gcf,'position',[1 1 600 600])% 得到图形窗口句柄,设置图形窗口位置

function y=minutie(x)

i=ceil(size(x)/2)

if x(i,i)==0

y=0

else

y=sum(x(:)) - 1

end

fun=@minutie% 得到函数句柄

L = nlfilter(K,[3 3],fun) % 滤租毁波处理

LTerm=(L==1)% 选择端点

imshow(LTerm) % 显示白色点

LTermLab=bwlabel(LTerm) % 端点标识

propTerm=regionprops(LTermLab,'Centroid') % 端点区域分析,寻找端点区域中心

CentroidTerm=round(cat(1,propTerm(:).Centroid)) % 端点圆整为整数

imshow(~K) % 显示隆线细化图像

set(gcf,'position',[1 1 600 600]) % 得到当前图形窗口句柄,设置位置

hold on % 在前面的图形窗口继续绘制图像

plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 绘制隆线端点标识,红色圆圈

LBif=(L==3)% 选择分叉点

LBifLab=bwlabel(LBif) % 分叉点标识

propBif=regionprops(LBifLab,'Centroid','Image')% 区域分析,寻找区域中心

CentroidBif=round(cat(1,propBif(:).Centroid)) % 分叉点圆整为整数

plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 绘制隆线分叉点标识,绿色圆圈

D=6

Distance=DistEuclidian(CentroidBif,CentroidTerm)% 求端点和分叉冲型李点的距离

SpuriousMinutae=Distance<D % 满足距离小于D的点

[i,j]=find(SpuriousMinutae) % 查找对应像素点

CentroidBif(i,:)=[] % 去除该分叉点

CentroidTerm(j,:)=[]% 去除该端点

Distance=DistEuclidian(CentroidBif)% 求两个分叉点的距离

SpuriousMinutae=Distance<D % 满足距离小于D的点

[i,j]=find(SpuriousMinutae)% 查找对应像素点

CentroidBif(i,:)=[]% 去除该分叉点

Distance=DistEuclidian(CentroidTerm) % 求两个端点的距离

SpuriousMinutae=Distance<D % 满足距离小于D的点

[i,j]=find(SpuriousMinutae)% 查找对应像素点

CentroidTerm(i,:)=[] % 去除该端点

hold off % 结束在前面的图形窗口绘图

imshow(~K) % 显示细化图

hold on % 继续在前面的图形窗口绘图

plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 绘制隆线端点标识,红色圆圈

plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 绘制隆线分叉点标识,绿色圆圈

hold off % 结束在前面的图形窗口绘图

Kopen=imclose(K,strel('square',7)) % 闭合运算

KopenClean= imfill(Kopen,'holes') % 填充图像中的孔洞

KopenClean=bwareaopen(KopenClean,5)% 开运算

imshow(KopenClean) % 显示处理结果

KopenClean([1 end],:)=0% 赋值语句

KopenClean(:,[1 end])=0% 赋值语句

ROI=imerode(KopenClean,strel('disk',10)) % 腐蚀运算

imshow(ROI) % 显示处理结果

imshow(I) % 显示原始图像

hold on% 继续在前面的图形窗口绘图

imshow(ROI)% 显示感兴趣区域

alpha(0.5) % 设置透明度

hold on% 继续在前面的图形窗口绘图

plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 绘制端点标识,红色圆圈

plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 绘制分叉点标识,绿色圆圈

hold off % 结束在前面的图形窗口绘图

[m,n]=size(I(:,:,1)) % 求图像尺寸

indTerm=sub2ind([m,n]% 从下标得到单精度索引

CentroidTerm(:,1),CentroidTerm(:,2)) % 端点

Z=zeros(m,n) % 全零矩阵

Z(indTerm)=1

ZTerm=Z.*ROI'

[CentroidTermX,CentroidTermY]=find(ZTerm)

indBif=sub2ind([m,n],CentroidBif(:,1),CentroidBif(:,2)) % 从下标得到单精度索引

Z=zeros(m,n)

Z(indBif)=1

ZBif=Z.*ROI'

[CentroidBifX,CentroidBifY]=find(ZBif)

imshow(I) % 显示原始图像

hold on% 继续绘图

plot(CentroidTermX,CentroidTermY,'ro','linewidth',2) % 红色圆圈

plot(CentroidBifX,CentroidBifY,'go','linewidth',2) % 绿色圆圈

Table=[3*pi/4 2*pi/3 pi/2 pi/3 pi/4 % 角度查找表

5*pi/6 0 0 0 pi/6

pi 0 0 0 0

-5*pi/6 0 0 0 -pi/6

-3*pi/4 -2*pi/3 -pi/2 -pi/3 -pi/4]

for ind=1:length(CentroidTermX)

Klocal=K(CentroidTermY(ind)-2:CentroidTermY(ind)+2, ...

CentroidTermX(ind)-2:CentroidTermX(ind)+2)

Klocal(2:end-1,2:end-1)=0

[i,j]=find(Klocal)

OrientationTerm(ind,1)=Table(i,j)

end

dxTerm=sin(OrientationTerm)*5

dyTerm=cos(OrientationTerm)*5

figure% 新建窗口

imshow(K) % 显示黑白图

set(gcf,'position',[1 1 600 600]) % 设置图像窗口属性

hold on % 继续绘图

plot(CentroidTermX,CentroidTermY,'ro','linewidth',2) % 红色圆圈

plot([CentroidTermX CentroidTermX+dyTerm]',...% 红色短线

[CentroidTermY CentroidTermY-dxTerm]','r','linewidth',2)

for ind=1:length(CentroidBifX)

Klocal=K(CentroidBifY(ind)-2:CentroidBifY(ind)+2, ...

CentroidBifX(ind)-2:CentroidBifX(ind)+2)

Klocal(2:end-1,2:end-1)=0

[i,j]=find(Klocal)

if length(i)~=3

CentroidBifY(ind)=NaN

CentroidBifX(ind)=NaN

OrientationBif(ind)=NaN

else

for k=1:3

OrientationBif(ind,k)=Table(i(k),j(k))

dxBif(ind,k)=sin(OrientationBif(ind,k))*5

dyBif(ind,k)=cos(OrientationBif(ind,k))*5

end

end

end

plot(CentroidBifX,CentroidBifY,'go','linewidth',2) % 绿色圆圈

OrientationLinesX=[CentroidBifX ...

CentroidBifX+dyBif(:,1)CentroidBifX ...

CentroidBifX+dyBif(:,2)CentroidBifX CentroidBifX+dyBif(:,3)]'

OrientationLinesY=[CentroidBifY

CentroidBifY-dxBif(:,1)CentroidBifY ...

CentroidBifY-dxBif(:,2)CentroidBifY CentroidBifY-dxBif(:,3)]'

plot(OrientationLinesX,OrientationLinesY,'g','linewidth',2) % 绿色短线

MinutiaTerm=[CentroidTermX,CentroidTermY,OrientationTerm]

MinutiaBif=[CentroidBifX,CentroidBifY,OrientationBif]

saveMinutia('John Doe',MinutiaTerm,MinutiaBif) % saveMinutia函数见附件程序

不难呀,matlab的现成代码一搜一大堆,在file exchange或者github上面clone下来就行。

建议注册个账号download过来

得一个一个点开文件然信差后按文件名copy过来,加载挺慢的,就不给,根据overview概览这个代码是侍租原团队的关于指纹识别的硕士论文一部分。

但是事情到这里还没有结束呀,代码有了,滑谈皮但是模型和用法是不知道的,如果能找到那篇硕士论文就更好了,实在不行,就摸索着用吧。()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8198273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存