1 课题背景
指纹是指人类手指上的条状纹路,它们的形成依赖于胚胎发育时的环境。'没有 2 个完全相同的指纹'这一观点已经得到公认。指纹识别已经有了很长一段历史。
据考古学家证实:公元前 6000 年以前,指纹作为身份鉴别的工具已经在古叙利亚和中国开始应用。到了 20 世纪 80 年代,光学扫描这 2 项技术的革新,使得它们作为指纹取像的工具成为现实,从而使指纹识别可以在其他领域中得以应用。
现在,随着取像设备的引入及其飞速发展,生物指纹识别技术的逐渐成熟,可靠的比对算法的发现都为指纹识别技术提供了更广阔的舞台。
本项目实现了一种指纹识别系统,通过过滤过程来确定用户指纹是否与注册的指纹匹配。通过过滤技术对捕获的指纹进行处理,以从捕获的图像中去除噪声。去除噪声后的最终结果与注册的指纹进行特征匹配,以确定它们是否相同。
2 效果展示
3 具体实现
3.1 图像对比过滤
图像融合是一种图像增强方法,这里先融合两个图像便于特征点对比。利用的是 opencv 封装的函数 cv2.addWeighted()。
相关代码
def apply_Contrast(img):
alpha = 0.5 # assigned weight to the first image
beta = 0.5 # assigned weight to the second image
img_second = np.zeros(img.shape, dtype=img.dtype) # second image, copy of first one
contrast = cv2.addWeighted(img, alpha, img_second, 0, beta) # applying contrast
return contrast
3.2 图像二值化
简介
图像二值化(Image Binarization)就是将图像上的像素点的灰度值设置为 0 或 255,也就是将整个图像呈现出明显的黑白效果的过程。二值图像每个像素只有两种取值:要么纯黑,要么纯白。
二值图像数据足够简单,许多视觉算法都依赖二值图像。通过二值图像,能更好地分析物体的形状和轮廓。 在计算机视觉里,一般用矩阵来表示图像。也就是说,无论你的图片看上去多么好吃,对计算机来说都不过是个矩阵而已。在这个矩阵里,每一个像素就是矩阵中的一个元素。在三通道的彩色图像中,这个元素是由三个数字组成的元组。而对于单通道的灰度图像来说,这个元素就是一个数字。这个数字代表了图像在这个点的亮度,数字越大像素点也就越亮,在常见的八位单通道色彩空间中,0 代表全黑,255 代表全白。
相关代码
def apply_Binarization(img):
# if pixel value is greater then the threshold value it is assigned a singular color of either black or white
_, mask = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV)
return mask
3.3 图像侵蚀细化
图像侵蚀 (腐蚀)
腐蚀(Erosion)- shrink image regions,侵蚀是数学形态学领域的两个基本算子之一,另一个是膨胀。它通常应用于二值图像,但是有些版本可用于灰度图像。算子对二值图像的基本作用是侵蚀前景像素(通常为白色像素)区域的边界。因此,前景像素的区域尺寸缩小,并且这些区域内的孔洞变大。

