基于matlab的指纹图像处理、脊线增强、脊线分割、脊线细化、细节点检测和细节点验证(毕设完整代码+报告)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
需求分析
对于指纹的特征提取包含几个步骤脊线增强、脊线分割、脊线细化、细节点检测和细节点验证本次大作业需要针对已经增强的指纹图片进行后续几个步骤通过多种形态学算法进行分割、细化、细化后处理找到其中的端点和分叉点而指纹周边的伪细节点需要被去除。
本次作业有两张图片需要进行处理如图 2 所示分别称为图片 1 和图片 2。
图 1 指纹特征提取步骤
图片 1 (b)图片 2 图 2 两张待处理指纹
二、算法设计
2.1 脊线分割
脊线分割的目的是使增强后的指纹图像脊线更加清晰、饱满、平滑。首先使用函数 𝑖𝑚𝑏𝑖𝑛𝑎𝑟𝑖𝑧𝑒对图像进行二值化处理。选择参数 0.5图片 1 能得到较好的二值化效果而图 片 2 会出现指纹背景与脊线同色的情况影响之后的细化操作因此需要先通过灰度值范围 将底色去除再进行二值化会呈现较好的效果。
之后的形态学处理使用𝑖𝑚𝑜𝑝𝑒𝑛(𝐼, 𝑠𝑒)函数做开运算其中运算结构𝑠𝑒为边长为 2 个像素 的正方形开运算能够对指纹轮廓进行一定程度的平滑连接一些在二值化之后出现的脊线 断裂1对于图像中的孤岛使用函数𝑏𝑤𝑎𝑟𝑒𝑎𝑜𝑝𝑒𝑛去除一定像素大小以内的连通域可以 对原始图片和反色图片各做一次分别去除脊线空洞和白背景上的孤岛。
2.2 脊线细化
使用函数𝑏𝑤𝑚𝑜𝑟𝑝ℎ(𝐼, ′ 𝑡ℎ𝑖𝑛 ′ , 𝑁)对指纹进行细化其中𝑁为细化操作的次数可以设为 𝑖𝑛𝑓即细化至图像不变化为止。
脊线细化后可能出现脊线断裂、桥接、短线或毛刺等问题如图 3 所示。由于在 2.1 中 去除了背景中孤岛细化后未产生短线。对于不希望的桥接可以通过𝑏𝑤ℎ𝑖𝑡𝑚𝑖𝑠𝑠(𝐼,𝐵1,𝐵2) 函数对指纹图片进行“击中与否”变换其中 B1 是感兴趣的结构体B2 是其互补结构 在本例中即桥接部分主要形状𝐻𝑖𝑡 𝑜𝑟 𝑚𝑖𝑠𝑠返回的是图中相同结构体的中心点之后再手 动改变周围像素值实现去除桥接的目的。脊线的断裂可以通过𝑖𝑚𝑒𝑟𝑜𝑑𝑒做腐蚀2实现腐蚀 后的图像脊线会加粗再细化即可。
对于脊线上的毛刺需要进行剪枝借鉴老师的示例程序编写剪枝算法𝑝𝑟𝑢𝑛𝑖𝑛𝑔可以 设定剪枝长度剪枝次数𝑛首先定义一些毛刺结构使用𝑏𝑤ℎ𝑖𝑡𝑚𝑖𝑠𝑠寻找具有相同结构的 毛刺找到毛刺位置后对获得的ℎ𝑖𝑡 𝑜𝑟 𝑚𝑖𝑠𝑠图片做膨胀从而在原图上去除这些毛刺也能 使脊线更加平滑。
桥接 (b)断裂 (c)毛刺图 3 细化后图片待处理问题
2.3 细节点检测
指纹细节包括端点和分叉点对于两种类型细节点的寻找可以通过下述算法统一实现。 对于像素点𝑃其类型由交叉数𝑐𝑛(𝑝)决定。
其中𝑓(𝑝𝑖)表示𝑝𝑖处的像素值如图 4 所示遍历图像对每个脊线像素的 8 邻域像素做计 算端点和交叉点的对于特征图如图 4(b)(d)端点的cn(𝑝) = 1交叉点cn(𝑝) = 3其他的 cn(𝑝)值忽视。
程序中找到的端点用绿色框标记交叉点用红色方框标记。
开运算针对图片中的白色底色进行操作因此可以连接灰度值为 0 的黑色脊线部分
与脚注 1 同理对白色背景做腐蚀可以连接断裂脊线
邻域 (b)端点 (c)其他 (d)交叉点图 4 像素 8 邻域特征与细节点类型
2.4 伪细节点去除
本次作业中定义指纹边缘端点为找到的伪细节点因此去除边缘点需要确定边缘。使用𝑛𝑙𝑓𝑖𝑙𝑡𝑒𝑟计算全图 3*3 的局部方差3非指纹区域值为 0通过此法可以大致画出边缘形状如图 5在此范围内的细节端点统一被去除。
图 5 找到的指纹边缘
三、实验结果
图片 1 输出
该算法效率较低可以使用小作业中实现的积分图方法计算局部方差速度较快
值化 (b)形态学处理
细化 (d)细化处理
细节点检测 (f)去除伪细节点
图片 2 输出
值化 (b)形态学处理
细化 (d)细化后处理
细节点检测 (f)去除伪细节点
完整代码+报告