-
2021-01-17 08:18:54
指纹掩膜图像的存取方法及装置的制造方法
【技术领域】
[0001]本发明属于指纹识别技术领域,尤其涉及指纹掩膜图像的存取方法及装置。
【背景技术】
[0002]近年来,指纹识别技术已成功应用于社会生活的各个领域,例如,智能手机、门禁系统、电子商务、考勤系统、支付装置及身份鉴定等技术领域。在指纹识别系统的工作过程中,需要从指纹图像中分割出指纹掩膜图像并存储,以便在后续通过读取指纹掩膜图像来执行指纹图像的图像增强、方向场计算、二值化和特征提取等一系列操作,以得到更为精确的指纹识别结果。
[0003]目前常用的指纹掩膜图像的存取方法包括:直接将指纹掩膜图像作为一个二进制数组保存到文件中并直接读取,以及对指纹掩膜图像进行采样后将采样结果保存到文件中并通过插值方式读取,前者由于完全保留了指纹掩膜图像的精度,使得保存文件过大,对存储资源的耗费增加,而后者降低了指纹掩膜图像的精度,从而也对指纹识别的算法精度产生了影响。
【发明内容】
[0004]有鉴于此,本发明实施例提供了指纹掩膜图像的存取方法及装置,以解决现有的指纹掩膜图像存取方法无法实现空间占用与存储精度二者平衡的问题。
[0005]第一方面,提供了一种指纹掩膜图像的存取方法,包括:
[0006]获取指纹掩膜图像中掩膜区域的边界信息;
[0007]将所述边界信息保存到文件中;
[0008]当需要调用所述指纹掩膜图像时,读取所述文件中的所述边界信息;
[0009]根据所述边界信息复原所述指纹掩膜图像。
[0010]第二方面,提供了一种指纹掩膜图像的存取装置,包括:
[0011]获取单元,用于获取指纹掩膜图像中掩膜区域的边界信息;
[0012]保存单元,用于将所述边界信息保存到文件中;
[0013]读取单元,用于当需要调用所述指纹掩膜图像时,读取所述文件中的所述边界信息;
[0014]复原单元,用于根据所述边界信息复原所述指纹掩膜图像。
[0015]本发明实施例提供的指纹掩膜图像的存取方案,一方面对存储空间的占用极小,很好地节约了存储资源,另一方面仍然可以以原始精度复原出指纹掩膜图像,从而保证了整个指纹识别系统的识别精度,很好地解决了指纹掩膜图像存取过程中空间占用与存储精度二者之间的平衡。
【附图说明】
[0016]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0017]图1是本发明实施例提供的指纹掩膜图像的存取方法的实现流程图;
[0018]图2是本发明实施例提供的指纹图像示例图;
[0019]图3是本发明实施例提供的指纹掩膜图像示例图;
[0020]图4是本发明实施例提供的指纹掩膜图像的掩膜边界示例图;
[0021]图5是本发明实施例提供的指纹掩膜图像的存取方法SlOl的具体实现流程图;
[0022]图6是本发明实施例提供的指纹掩膜图像的存取方法S104的具体实现流程图;
[0023]图7是本发明实施例提供的指纹掩膜图像的存取装置的结构框图。
【具体实施方式】
[0024]为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透切理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
[0025]图1示出了本发明实施例提供的指纹掩膜图像的存取方法的实现流程,详述如下:
[0026]在SlOl中,获取指纹掩膜图像中掩膜区域的边界信息。
[0027]在本实施例中,首先通过指纹传感器采集到如图2所示的指纹图像,并进一步对该指纹图像进行分割,得到如图3所示的该指纹图像的指纹掩模图像。所述指纹掩膜图像为二值图像,比如,若指纹掩膜图像中包含指纹信息的区域的像素值为0,则不包含指纹信息的区域的像素值为1,反之,若指纹掩膜图像中包含指纹信息的区域的像素值为1,则不包含指纹信息的区域的像素值为O。而掩膜区域的边界信息,能够表达的是指纹掩膜图像中只包含了掩膜区域边界的二值图像,比如,掩膜区域边界的像素值为0,则其它区域的像素值为1,反之,掩膜区域边界的像素值为1,则其它区域的像素值为0,因此,根据掩膜区域的边界信息,可以绘制出如图4所示的关于掩膜区域边界的二值图像。
[0028]在本发明实施例中,所述掩膜区域的边界信息,包括但不限于掩膜区域边界的起始坐标、边界上任意一点的坐标、边界的方向链码和边界图像等信息。
[0029]作为本发明的一个实施例,SlOl中掩膜区域的边界信息的获取过程可以通过如图5所示的方式实现:
[0030]在S501中,定位所述掩膜区域的所述起始坐标。
[0031]在本实施例中,可以将第一个访问的掩膜区域的像素点坐标确定为该掩膜区域的起始坐标。进一步地,该第一个访问的掩膜区域的像素点可以通过遍历指纹掩膜图像的方式搜索到,遍历的路径包括但不限于:从指纹掩膜图像的左上角由左向右由上向下遍历,从指纹掩膜图像的右上角由右向左由上向下遍历,从指纹掩膜图像的左下角由左向右由下向上遍历,或者从指纹掩膜图像的右下角由右向左由下向上遍历,直到第一次访问到像素值由O至I或者由I至O的突变点,并将该点确定为掩膜区域的起始坐标。
[0032]在S502中,从所述起始坐标开始,对所述掩膜区域进行链码跟踪,直至再次定位到所述掩膜区域的所述起始坐标。
[0033]在S503中,获取所述链码跟踪过程中产生的所述掩膜区域的方向链码。
[0034]在获取到掩膜区域的起始坐标之后,从该起始坐标开始,采用链码跟踪算法对掩膜区域进行链码跟踪,直至再次遇到该起始坐标为止,整个链码跟踪过程会根据跟踪的路径获取一系列掩膜区域的方向链码,获取的方向链码和起始坐标一同构成了掩膜区域最基本的边界信息。
[0035]作为本发明的一个实施例,所述链码跟踪包括4连通的链码跟踪或8连通的链码跟踪。
[0036]作为本发明的另一实施例,所述链码跟踪包括顺时针的链码跟踪或逆时针的链码跟踪。
[0037]在S102中,将所述边界信息保存到文件中。
[0038]在获取到掩膜区域的边界信息之后,对于指纹掩膜图像,在本实施例中只将该边界信息保存到预先指定的文件中,以供后续指纹识别系统调用,相比于现有技术中直接将指纹掩膜图像进行保存的方案,本发明实施例的保存过程对存储空间的占用极小,很好地节约了存储资源。
[0039]在S103中,当需要调用所述指纹掩膜图像时,读取所述文件中的所述边界信息。
[0040]在S104中,根据所述边界信息复原所述指纹掩膜图像。
[0041]当需要调用指纹掩膜图像时,例如,当需要将用户输入的指纹与系统中保存的指纹模板进行匹配时,则从预先指定的文件中读取出预先保存的指纹掩膜图像中掩膜区域的边界信息,再根据该边界信息来复原出指纹比对所需的指纹掩膜图像。
[0042]如图6所示,根据边界信息复原指纹掩膜图像的过程如下所示:
[0043]在S601中,根据所述边界信息复原所述掩膜区域的边界。
[0044]具体地,根据边界信息中的起始坐标,首先定位出掩膜区域的边界的起始点,再根据边界信息中的方向链码,通过反链码跟踪来复原出如图4所示的掩膜区域的边界。
[0045]在S602中,对所述掩膜区域的边界采用区域填充算法进行区域填充,复原所述指纹掩膜图像。
[0046]在复原出掩膜区域的边界之后,通过区域填充算法,对如图4所示的掩膜区域的边界进行区域填充,从而复原出如图3所示的指纹掩膜图像,其中,区域填充算法包括但不限于基于区域生长的算法,或者基于形态学操作的算法,等等。
[0047]从上述指纹掩膜图像的读取方案中可以看出,虽然在存储指纹掩膜图像中,存储的数据量相比指纹掩膜图像本身缩减了很多,但是,通过边界复原和区域填充,仍然可以以原始精度复原出指纹掩膜图像,从而保证了整个指纹识别系统的识别精度。
[0048]应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和
更多相关内容 -
利用掩膜图像提取图像目标区域
2016-12-19 09:31:41利用掩膜图像来获取图像的任意区域,该程序可以直接运行。 -
imageintensify.rar_MATLAB掩膜_图像锐化_掩膜_掩膜图像_锐化掩膜法
2022-07-14 06:52:42基于Matlab的结合Laplacian Pyramid 和反锐化掩膜的改进法的图像增强算法 -
浅谈图像处理中掩膜(mask)的意义
2020-09-17 21:35:27今天小编就为大家分享一篇浅谈图像处理中掩膜(mask)的意义,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
matlab图像处理掩膜代码-multi_thread_capture:多线程捕获
2021-06-07 20:16:27matlab图像处理掩膜代码 cmake qt capture images 进度 目前正在做融合,处理高动态 框架 dependence cmake qt5 vimba(in dir) yaml-cpp opencv 步骤 拍摄图片(横竖条纹) 标定位置求解投影仪相机位置关系(matlab) ... -
VoTT视频标注json数据集转mask二值掩膜图像
2020-10-09 12:58:45实现了由VoTT视频标注生成的json文件的数据集转二值掩膜图像。提取json文件中的标注点的坐标和图片名称,并在原图上绘制出标注点,再将图像转换为二值掩膜图像。 -
【OpenCV-Python】:批量生成掩膜图像
2021-06-13 09:23:37) mask[a:a + 40, a:a + 40] = 0 # 掩膜区域大小为40×40,令该区域像素值为0(黑色) mask_img = cv2.bitwise_and(img, mask) # cv2.bitwise_and是对二进制数据进行“与”操作, # 掩膜图像白色区域是对需要处理...话不多说,直接看代码!
import cv2 import os import numpy as np def read_path(file_pathname): for filename in os.listdir(file_pathname): # 遍历文件夹内的所有图片 print(filename) # 打印图片名称 a = 44 # 设置掩膜区域的初始边线位置 img = cv2.imread(file_pathname+'/'+filename) # 读取图片 mask = np.ones((128, 128, 3), dtype=np.uint8) * 255 # 255:生成全白数值矩阵(如果要生成黑色区域块, # 需要生成0矩阵。) mask[a:a + 40, a:a + 40] = 0 # 掩膜区域大小为40×40,令该区域像素值为0(黑色) mask_img = cv2.bitwise_and(img, mask) # cv2.bitwise_and是对二进制数据进行“与”操作, # 掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除 cv2.imwrite("I:\\LOL\\mask"+"/"+filename, mask_img) # 保存图像到指定位置 read_path("I:\\LOL\\train_normal")
结果展示:
-
食管内镜图像预处理-生成掩膜图像mask
2020-11-04 11:41:13食管内镜图像预处理-生成掩膜图像 消化内镜图像分析需要首先获取 ROI 感兴趣区,这样在后续的处理中能有效避免 ROI 区域外的像素的影响,降低运算的复杂度。 前言 选取食管内镜图像最能反映光照情况的红色通道灰度...食管内镜图像预处理-生成掩膜图像
消化内镜图像分析需要首先获取 ROI 感兴趣区,这样在后续的处理中能有效避免 ROI 区域外的像素的影响,降低运算的复杂度。
前言
选取食管内镜图像最能反映光照情况的红色通道灰度图进行处理,包括两步:
1、阈值二值化处理和形态学运算。
2、最大区域的空洞填充,小连通区域去除。
通过利用食管内镜图像的红色通道做了mask 掩膜图,得到满意的结果。
处理代码如下:
# 提取食管内镜图像的掩膜 import cv2 import numpy as np # 红色通道二值化 def get_mask(img_red, T): # 以像素值20为阈值二值化图像 ret, img_threshold = cv2.threshold(img_red, T, 255, cv2.THRESH_BINARY) # 创建半径为3的圆形结构元素做kernel kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 9)) # 对ROI区进行开运算,去除图像中的文字区域 img_erode = cv2.erode(img_threshold, kernel, iterations=1) img = cv2.dilate(img_erode, kernel, iterations=1) return img path = r'D:\research\data\WLI\568.jpg' img_ori = cv2.imread(path) # 分离通道 b, g, r = cv2.split(img_ori) # 获得红色通道的掩膜图 img_red_mask = get_mask(r, 20) # 找出二值化图的边界 _, contours, hierarchy = cv2.findContours(img_red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 找到最大区域并填充 area = [] for i in range(len(contours)): area.append(cv2.contourArea(contours[i])) if area[i] < 1e5: # 去除小区域 cv2.drawContours(img_red_mask, [contours[i]], 0, 0, -1) max_idx = np.argmax(area) cv2.fillConvexPoly(img_red_mask, contours[max_idx], 255) # 显示掩膜图像 cv2.imshow('redm', img_red_mask) cv2.waitKey(0) cv2.destroyAllWindows() # 保存掩膜图 cv2.imwrite('./mask/1_mask.png', img_red_mask)
2.读入数据
结果1:
原始图像:
处理后:
结果2:原始图像:
处理后:
总结
显示结果2,主要是因为图像下缘有非目标区域的条状,所以程序中的以下语句就是为了解决此类图像。
if area[i] < 1e5: # 去除小区域 cv2.drawContours(img_red_mask, [contours[i]], 0, 0, -1)
-
使用加权掩膜进行图像平均:使用加权掩膜过滤器进行图像平均-matlab开发
2021-06-01 10:30:37使用加权掩膜过滤器进行图像平均而不使用内置功能 -
matlab为图像添加圆形掩膜、制作圆形掩膜矩阵
2022-03-27 00:00:24假设矩阵大小为m*n,取矩阵最中间一点为圆心,半径r=m/2。先用函数meshgrid生成矩阵对应的每一个坐标,然后用circle=x .^ 2 + y .^ 2生成代表半径的平方的矩阵,最后用find函数找到符合... %图像矩阵的行数 n = im_s假设矩阵大小为m*n,取矩阵最中间一点为圆心,半径r=m/2。先用函数meshgrid生成矩阵对应的每一个坐标,然后用circle=x .^ 2 + y .^ 2生成代表半径的平方的矩阵,最后用find函数找到符合要求的元素,赋值为1,不符合要求的赋值为0 。具体程序如下:
function [masked_im,circ_mask] = circle_mask(im) circ_mask=im; im_size = size(im); m = im_size(1); % 图像矩阵的行数 n = im_size(2); % 图像矩阵的列数 r = floor(m/2); % 生成圆的半径 m1 = -m/2:m/2-1; % 把圆心变到矩阵的中间 n1 = -n/2:n/2-1; [x,y]=meshgrid(m1,n1); circle=x.^2+y.^2; % 计算出每一点到圆心的距离的平方 circ_mask(find(circle>r*r))=0; % 找到圆外的元素,并赋值为0 masked_im = circ_mask; % 这就是被遮掩后的图像 circ_mask(find(circle<=r*r))=1; % 找到圆内的元素,并赋值为1 ,这是图像掩膜 end
下面在主函数中调用该函数:
inputfilename = "E:\shipwreck.jpg"; im = imread(inputfilename); im = rgb2gray(im); % 转化为灰度图 figure(10) subplot(1,2,1) imshow(im) [im,im_mask] = circle_mask(im); subplot(1,2,2) imshow(im)
-
图像掩膜讲解
2020-03-24 21:02:00掩膜:通过使用黑白二值图像 X 原图像,使二值图像黑色部分对应的原图像中的部分变成黑色,从而提取出原图像感兴趣部分。 使用掩膜可以提取原图像中的特定图像,数字图像处理中,掩模为二维矩阵数组,有时也用多值图像... -
OpenCV图像处理学习二,图像掩膜处理
2022-08-07 10:52:27图像掩膜处理 -
眼底图像预处理-掩膜图像
2021-01-17 08:18:53眼底图像分析需要首先获取ROI 感兴趣区,这样在后续的处理...我们用彩色眼底图像的红色通道做了mask 掩膜图,得到满意的结果。代码如下:#从目录下读取彩色眼底图,img_ori = cv2.imread('./dataset/1.jpg')#调整... -
OpenCV学习记录(三):简单的使用图像掩膜提取图像中感兴趣对象
2022-05-12 23:57:22按照颜色阈值的方式来查找图像中的蓝色物体,提取出对象的掩膜并进行覆盖 -
图像与掩膜叠加,掩膜变透明
2021-06-10 00:10:49需要将掩膜叠加在原图上,并调整掩膜至半透明状态。试了很久,终于找到了最简单最有效的办法。简单做个记录,如果有什么问题请各位大牛指正。 主要使用了cv2.addWeighted函数。 融合的两个图像大小需要相同。参考cv2... -
rasterio实用教程(3)——图像掩膜提取
2021-02-09 22:44:48掩膜提取是指基于矢量面范围内的栅格像素值,并输出为新图像的操作。 因为涉及矢量面数据获取,所以需要引入fiona包,未安装的读者请自行安装。 实战 import fiona import rasterio import rasterio.mask mask = 'D... -
跟我一起学opencv 第二课之图像的掩膜操作
2021-01-14 14:15:491.掩膜(mask)概念用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。光学图像处理中,掩模可以足胶片,滤光片等。掩模是由0... -
图像处理中的mask(掩膜)
2020-11-22 21:06:50文章目录: 一、什么是掩膜 二、掩膜的用法 三、掩膜运算的一个小实例 四、小结 在图像处理中,经常会碰到掩膜(Mask)这个词。那么这个词到底是什么意思呢?...图像掩膜与其类似,用选定的图像、... -
图像中掩膜作用
2020-05-13 12:49:06数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形... -
利用函数roipoly交互式选取前景区域,生成掩膜图像;利用乘法运算进行抠图; 选取一幅背景图像,并将抠图...
2021-10-05 20:48:34利用函数roipoly交互式选取前景区域,生成掩膜图像;利用乘法运算进行抠图; 选取一幅背景图像,并将抠图结果与其进行融合 代码 I=imread('srcImage.jpg'); %前景图 J=imread('background.jpg');%背景图 subplot... -
深度学习掩膜_深度学习算法图像分割算法
2020-11-21 13:59:07一、什么是图像分割?...2.实例分割与语义分割不同,实例分割只对特定物体进行类别分配,这一点与目标检测有点相似,但目标检测输出的是边界框和类别,而实例分割输出的是掩膜(mask)和类别。三、传统基于CNN... -
Mask 掩膜图像 copyTo() 函数
2020-04-16 22:06:11//将掩膜图像 中 r1区域灰度值设定为255 白图,生成掩膜图像 2. mask(r1).setTo(255);//将掩膜图像 中 r1区域灰度值设定为255 白图,其他区域为黑图 3. image.copyTo(img2, mask);//将掩膜图像与image 图像进行 ... -
图像中的掩膜(Mask)是什么
2018-01-22 18:11:46在图像处理中,经常会碰到掩膜(Mask)这个词。那么这个词到底是什么意思呢?下面来简单解释一下。 1.什么是掩膜 首先我们从物理的角度来看看mask到底是什么过程。 在半导体制造中,许多芯片工艺步骤采用光刻技术... -
图像处理——掩膜
2018-08-28 11:13:141、掩膜的定义 掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值、数据范围、有限或无限值、感兴趣...2、图像掩膜例子 图1 ... -
CT图像获取人体部分掩膜MASK(去除机床)
2021-07-01 11:22:10统计CT图像的均值标准差时,希望只针对人体部分进行统计,故需要从CT图像中获取人体部分的掩膜MASK,而人体又经常与机床部分相连,所以也需要去掉机床部分 -
图像处理中的 “掩膜” Mask
2020-03-21 09:23:30图像处理中掩膜的作用 在阅读计算机视觉领域的论文的过程中发现了一个新的词叫作 binary Mask,仔细一查发现,这个东西叫做掩膜,图像分割中较为常用。 【掩膜】 掩膜,通俗地讲就是一个遮挡板,喷漆,或者雕刻或者... -
opencv颜色空间转换、阈值构建掩膜、原图像和掩模进行位运算
2022-01-15 19:28:44构建掩膜后的图像是黑白的 对原图像和掩模进行位运算后,图像就只有你想要的颜色阈值,其他颜色都变为黑色 import cv2 import numpy as np cap = cv2.VideoCapture(0) while (1): # 获取每一帧 ret, frame = cap... -
10 -- OpenCV学习—掩膜
2022-04-06 12:19:32掩膜是由0和1组成一个二进制图像,利用该掩膜图像要处理的图像进行掩膜,其中1值的区域被处理,0值区域被屏蔽,不会处理。 掩膜的主要用途是: 提取感兴趣区域:用预先制作的感兴趣区掩模与待处理图像进行”与... -
OpenCV:鼠标事件 选取矩形掩膜图像
2019-02-15 22:29:25在图像中选取矩形区域作为ROI,作为掩膜图像。 涉及鼠标操作。 【注】:鼠标操作本质是坐标点的位置。 示例 #include <opencv2/opencv.hpp> #include <iostream> #pragma comment...