在指纹识别的过程中,指纹图片通常都是现场采集的,受环境的影响会有产生很多的噪声点,如果直接使用,会对指纹的识别产生很大的影响,而指纹识别的应用场景又都是一些比较严肃不容有错的场合,所以去除噪声又不损坏原始图像的结构就显得更为重要。
本期我们介绍使用图像的开、闭运算进行指纹图片的噪声消除。
完成本期内容,你可以:
-
了解图像开、闭运算的原理和应用
-
掌握使用图像开、闭运算的使用
若要运行案例代码,你需要有:
-
操作系统:Ubuntu 16 以上 或者 Windows10
-
工具软件:VScode 或者其他源码编辑器
-
硬件环境:无特殊要求
-
核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16
点击下载源码
开、闭运算
开运算就是将图像先进行腐蚀操作,在进行膨胀操作。开运算可以用来抹除图像外部的细节(或者噪声)。
闭运算是将图像先进行膨胀操作,在进行腐蚀操作。闭运算可以抹除图像内部的细节(或者噪声)。
形态学方法
OpenCV将形态学方法封装成了cv2.morphologyEx()
方法。
函数原型:dst = cv2.morphologyEx(src, op, kernel, anchor, iterations, borderType, borderValue)
dst为输出图像。
参数描述如下:
- src:被处理的图像
- kernel:操作中使用的核
- anchor:可选参数,核锚点的位置
- iterations:可选参数,迭代次数,默认值为1
- borderType:可选参数,边界样式,建议采用默认值
- borderValue:可选参数,边界值,建议采用默认值
- op:操作类型
参数值 | 含义 |
---|---|
cv2.MORPH_ERODE | 腐蚀操作 |
cv2.MORPH_DILATE | 膨胀操作 |
cv2.MORPH_OPEN | 开运算,先腐蚀后膨胀 |
cv2.MORPH_CLOSE | 闭运算,先膨胀后腐蚀 |
cv2.MORPH_GRADIENT | 梯度运算,膨胀图减腐蚀图,可以得到简易的轮廓 |
cv2.MORPH_TOPHAT | 顶帽运算,原始图像减开运算图像 |
cv2.MORPH_BLACKHAT | 黑帽运算,闭运算图像减原始图像 |
具体步骤
1. 创建项目结构
创建项目名为对指纹图像进行噪声消除
,项目根目录下新建code
文件夹储存代码,新建dataset
文件夹储存数据,项目结构如下:
对指纹图像进行噪声消除 # 项目名称
├── code # 储存代码文件
├── dataset # 储存数据文件
注:如项目结构已存在,无需再创建。
2. 使用膨胀操作对图像进行修复
- 在
code
文件夹下创建fingerprint.py
文件; - 导入所需的库,OpenCV、numpy;
- 读取
dataset
文件夹下的fingerprint.png
图片,并进行展示; - 创建一个
7*7
的都为1 的数组作为滤波核; - 对图像进行开运算处理,并展示结果;
代码实现
# 导入OpenCV、numpy
import cv2
import numpy as np
# 读取图像
img = cv2.imread("../dataset/fingerprint.png")
cv2.imshow("img1",img)
# 创建一个值都为1的7*7的数组
k = np.ones((7,7),np.uint8)
# 使用开运算
o = cv2.morphologyEx(img,cv2.MORPH_OPEN,k)
cv2.imshow("result1",o)
cv2.waitKey()
cv2.destroyAllWindows()
经过开运算之后,指纹图像中的噪声已经全部去除,对指纹的轮廓结构也并未产生影响,经过处理以后的图像就是一张只包含指纹信息的图像,在进行指纹识别会有更高的精确度。
点击下载源码