基于奥比中光深度相机进行虹膜识别处理

news2024/11/24 15:22:15

MATLAB仿真实现效果展示

图1 奥比中光红外深度相机拍摄效果

MATLAB仿真红外效果的图片,使用奥比中光的Astra_Pro深度相机和Astra+进行拍摄,效果很好。

++声明:本文的虹膜识别系统模型参考了西澳大利亚大学,计算机科学与软件工程学院,马特实验室,利博尔·马塞克与彼得·科维西教授的《基于虹膜的生物特征识别系统》++

首先,先简单介绍以下各个文件夹的功能,文件夹“CASIA1”包括原始眼睛图像(将拍摄好的虹膜图像保存到这个文件夹中);文件夹“fnc”包含GUI的后端函数;文件夹“template-database”存储从眼睛图像中提取的注册模板(虹膜参数);文件“IrisRecognitionGUI.mlapp”是系统GUI配置生成的app。

下图是MATLAB的图形用户操作界面:

 ‘Enrollment’的功能是将账户虹膜的模板注册到数据库中,‘Verify’的功能是验证数据库中不同虹膜的模型,‘View Account information’的功能是查看虹膜文件的信息。

接下来,我会简单介绍虹膜识别系统的操作流程,具体操作步骤如下:

1.单击app中的‘image select …’选择一张虹膜图像打开。

2.填写信息,并点击‘Enroll’进行信息注册。

3.显示如下图所示的消息,代表注册虹膜信息成功。

4.要想验证图像,同样的按照操作1的方式进行操作。

5.选择虹膜信息并打开后,单击‘Verify’对虹膜信息进行验证。

6.选择单击‘View account…’可以查看该模板的信息。

MATLAB仿真实现介绍

接下来,会详细介绍该系统的具体实现流程,包括但不限于:①用到的算法介绍 ②GUI制作详细说明 ③代码功能的实现,等等。

霍夫变换算法

霍夫变换是一种计算机视觉算法,可以用来确认目标图像中存在的简单几何对象的参数,如直线和圆。

可以从眼睛结构示意图中发现虹膜其实是一个圆形,所有使用圆形霍夫变换可以用来推导出瞳孔和虹膜区域的半径和中心坐标。并且本文采用一种基于圆形霍夫变换的自动分割算法,将iris虹膜分割出来,方便进行比对。

首先,通过计算眼睛图像中亮度值的一阶导数来生成边缘图,然后对其进行阈值化。从边缘图中,在霍夫空间中对通过每个边缘点的圆的参数进行统计。这些参数是圆心坐标,以及半径,它们能根据圆的方程来定义任何大小的圆,表示为:

霍夫空间中的最大值点将对应于由边缘点最优定义的圆的半径和中心坐标,并利用抛物线霍夫变换来检测眼睑,用抛物线弧线逼近上下眼睑,表示为:

其中a_j控制曲率,h_j,k_j是抛物线的峰值,θ_j是相对于x轴的旋转角度。

Daugman的积分-微分算子

Daugman利用积分-微分算子定位圆形虹膜和瞳孔区域,以及上下眼睑的弧线。积分-微分算子的定义如下:

其中I(x,y)是眼睛图像,r是要搜索的半径,G_σ (r)是高斯平滑函数,s是由r,x_0,y_0给出的圆形轮廓。通过改变圆形轮廓的半径和中心x,y的位置,搜素像素值变化的圆形路径。为了实现精确的虹膜定位,该算子被迭代地应用,平滑的数量逐渐减少。

并且眼睑以类似的方式进行定位,轮廓整合的路径从圆形变成弧形。

主动轮廓模型

利用主动轮廓模型对目标图像中的瞳孔进行定位。主动轮廓通过对内部变形或在目标图像上移动,直到达到平衡状态,来响应预先设定的内部或外部力。

轮廓包含一些顶点,它们的位置会被两个相反的力改变,一个是内力,它依赖于期望的特征,另一个是外力,它依赖于目标图像。每个顶点在时间t和t+1之间移动,表达式如下:

其中F_i是内力,G_i是外力,v_i是顶点i的位置。为了给瞳孔进行定位,内力被校准,以便轮廓形成一个全局扩展的离散图。外部力通常是利用边缘信息找到的。

MATLAB仿真代码分析

Createiristemplate 核心功能函数文件详解,详细代码请见附录ii,详解如下:

函数createIristemplate用于使用霍夫变换和预定义的参数集创建Iris模板图像。它将图像eyeimage_filename作为输入,该图像被假定为虹膜的灰度图像

首先为霍夫变换设置了一些默认参数,例如径向和角度分辨率(radial_res和angular_res)以及特征编码参数(nscales、minWaveLength、mult和sigmaOnf),使用imread函数读取输入图像eyeimage_filename。

将输出模板图像和掩码图像(掩码)保存到用户使用fileattrib函数指定的文件中。输出模板图像保存为包含输入图像名称和.mat文件扩展名的文件名,掩码图像保存为包括输入图像名称以及-houghpara.mat(即后缀.mat和-houghpara)的文件名。

最后将输出模板图像和掩码图像(模板和掩码)作为函数输出返回。

if stat == 1

    % if this file has been processed before

    % then load the circle parameters and

    % noise information for that file.

    load(savefile);

   

else

   

    % if this file has not been processed before

    % then perform automatic segmentation and

    % save the results to a file

   

    [circleiris circlepupil imagewithnoise] = segmentiris(eyeimage);

    save(savefile,'circleiris','circlepupil','imagewithnoise');

   

end



% WRITE NOISE IMAGE

%



imagewithnoise2 = uint8(imagewithnoise);

imagewithcircles = uint8(eyeimage);



%get pixel coords for circle around iris

[x,y] = circlecoords([circleiris(2),circleiris(1)],circleiris(3),size(eyeimage));

ind2 = sub2ind(size(eyeimage),double(y),double(x));



%get pixel coords for circle around pupil

[xp,yp] = circlecoords([circlepupil(2),circlepupil(1)],circlepupil(3),size(eyeimage));

ind1 = sub2ind(size(eyeimage),double(yp),double(xp));

以上代码主要是使用霍夫变换分割虹膜和瞳孔的图像,然后将结果保存到文件中。

首先调用主函数createIristemplate,然后调用一系列辅助函数createCircleMask和createPupilMask。

createCircleMask负责创建虹膜周围圆圈的二进制掩码图像。它首先使用imread函数读取输入图像eyeimage,并将图像保存到具有指定后缀的文件(例如circle.mat)中。

然后,它对图像应用霍夫变换以检测圆,并将生成的掩模图像(circlemask)保存到文件中。掩模图像是通过对图像进行阈值处理来创建圆形像素的二进制掩模来创建的,每个圆形由一组连接的像素表示。

createPupilMask负责创建瞳孔的二进制掩码图像。它的工作原理与createCircleMask类似,但有一些不同。它使用不同的霍夫变换来检测瞳孔周围的圆,还检测瞳孔中的椭圆和其他非圆形特征。它将生成的遮罩图像(pupilmask)保存到一个文件中。

代码初始化两个新变量imagewithnoise2和imagewithcircles,这两个变量都是8位无符号整数。变量imagewithnoise2是通过使用uint8函数将imagewithnoise函数的输出从16位浮点图像转换为8位无符号整数图像而创建的。通过使用uint8函数将眼睛图像函数的输出(虹膜的灰度图像)转换为8位无符号整数图像,创建带圆圈的可变图像。

然后,该代码定义了两个新函数getCircleCoordinates和sub2in,并使用它们从输入图像眼睛图像中提取虹膜周围的圆和瞳孔周围的圆的坐标。

getCircleCoordinates函数接受三个参数:第一个和第三个圆的中心坐标,以及第二个圆的半径。sub2in函数是将输入图像的2D坐标映射到1D索引的辅助函数,该1D索引可用于提取各个像素的坐标。

然后,代码定义了另外两个变量x和y,用于提取虹膜周围圆的中心和半径的坐标。瞳孔周围圆的中心和半径的坐标是使用相同的sub2in函数提取的。x和y变量分别指定圆的圆心和半径的x和y坐标。

最后,代码定义了另外两个变量xp和yp,用于提取瞳孔周围圆的中心和半径的坐标。瞳孔周围圆的中心和半径的坐标是使用相同的sub2in函数提取的。xp和yp变量分别被指定圆的中心和半径的xp和yp坐标。

% Write noise regions

imagewithnoise2(ind2) = 255;

imagewithnoise2(ind1) = 255;

% Write circles overlayed

imagewithcircles(ind2) = 255;

imagewithcircles(ind1) = 255;

w = cd;

cd(DIAGPATH);

imwrite(imagewithnoise2,[eyeimage_filename,'-noise.jpg'],'jpg');

imwrite(imagewithcircles,[eyeimage_filename,'-segmented.jpg'],'jpg');

cd(w);



% perform normalisation



[polar_array noise_array] = normaliseiris(imagewithnoise, circleiris(2),...

    circleiris(1), circleiris(3), circlepupil(2), circlepupil(1), circlepupil(3),eyeimage_filename, radial_res, angular_res);

% WRITE NORMALISED PATTERN, AND NOISE PATTERN

w = cd;

cd(DIAGPATH);

imwrite(polar_array,[eyeimage_filename,'-polar.jpg'],'jpg');

imwrite(noise_array,[eyeimage_filename,'-polarnoise.jpg'],'jpg');

cd(w);



% perform feature encoding

[template mask] = encode(polar_array, noise_array, nscales, minWaveLength, mult, sigmaOnf);

以上代码负责对图像进行标准化,创建噪声模式,并对标准化和降噪图像执行特征编码。

首先调用normaliseiris函数,然后调用createIristemplate来分割虹膜和瞳孔。createIristemplate的输出保存到具有指定后缀的文件中(例iris.mat)接下来,代码定义了一些变量:

polar_array:这是一个像素值的二维数组,表示输入图像的极坐标表示。它是通过对输入图像应用极坐标变换来创建的。

noise_array:这是表示降噪图像的像素值的二维数组。它是通过将降噪算法应用于输入图像而创建的。

template:这是表示标准化图像的像素值的二维数组。它是通过将特征编码算法应用于极坐标和降噪图像而创建的。

mask:这是一个像素值的一维数组,表示归一化图像中圆形像素的二进制掩码。它是通过对极性图像和降噪图像进行阈值处理来创建圆形像素的二进制掩码的。

然后对polar_array和noise_array变量调用normaliseiris函数,并将生成的数组保存到具有指定后缀的文件中(例如polar.mat和polarnoise.mat)。

接下来,再次调用createIristemplate函数来分割瞳孔,并为瞳孔创建单独的降噪图像。此函数的输出保存到具有指定后缀的文件中(例如,pidul.mat)。

最后,对模板和noise_array变量调用encodepattern函数,以创建极坐标和降噪图像的特征向量表示。然后,该矢量表示被保存到具有指定后缀的文件中(例如,编码.mat)。

MATLAB虹膜识别系统GUI设计

MATLAB虹膜识别系统GUI设计可以通过使用MATLAB的Graph函数创建,并使用Subplot函数添加多个图形窗口来实现

 如上表格所示,通过奥比中光的Astra_pro和Astra+相机拍摄的红外图像,完全可以胜任虹膜识别任务,并且有很好的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark 优化

1.RDD分区数 Task是作用在每个分区上的,每个分区至少需要一个Task去处理 改变分区数可间接改变任务的并行度,类似手动指定Reduce数量 第一个RDD的分区数由切片的数量决定 默认情况下子RDD的分区数等于父RDD的分区数 Shuflle类算子可手动指定RDD分区数 设…

chatgpt赋能python:Python屏幕截图并保存:简单易用的库

Python屏幕截图并保存:简单易用的库 屏幕截图是程序员们在软件开发中常用到的一个小技巧,对于调试、记录Bug、编写文档等方面有极大的帮助。而其中,Python成为了众多程序员的利器之一。 在Python中,大量的库提供了屏幕截图的方法…

PX4-机架选取(基于QG地面站)

因为我的无人机是F450,所以我选用F450的机架 点击应用后,要稍等一会 应用完成后在概述会标识

经纬度坐标为中心点生成米距离长度半径的圆形面,含java js源码+在线绘制,代码简单零依赖

文章目录 java版源码js版源码在线绘制预览效果关于计算的精确度 前些时间在更新我的坐标边界查询工具的时候,需要用到经纬度坐标点的距离计算,和以坐标点为中心生成一个指定距离为半径的圆,搜了一下没有找到现成简单又合适的代码,…

基于OpenCV 和 Dlib 进行头部姿态估计

写在前面 工作中遇到,简单整理博文内容涉及基于 OpenCV 和 Dlib头部姿态评估的简单Demo理解不足小伙伴帮忙指正 庐山烟雨浙江潮,未到千般恨不消。到得还来别无事,庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼 https://github.com/LIRUILONGS…

2023智源大会议程公开 | 大模型新基建与智力运营论坛

6月9日,2023北京智源大会,将邀请这一领域的探索者、实践者、以及关心智能科学的每个人,共同拉开未来舞台的帷幕,你准备好了吗?与会知名嘉宾包括,图灵奖得主Yann LeCun、OpenAI创始人Sam Altman、图灵奖得主…

【模型评估】混淆矩阵(confusion_matrix)之 TP、FP、TN、FN;敏感度、特异度、准确率、精确率

你这蠢货,是不是又把酸葡萄和葡萄酸弄“混淆”啦!!!这里的混淆,我们细品,帮助我们理解名词“混淆矩阵” 上面日常情况中的混淆就是:是否把某两件东西或者多件东西给弄混了,迷糊了。把…

数据隐私保护的最佳实践:全面了解数据脱敏方案

1、数据脱敏 数据脱敏是一种保护敏感信息的安全措施,通常会将真实数据替换成模拟数据或者经过处理后的数据。下面是常见的数据脱敏实现方案: 字符串替换:将需要脱敏的字符串中指定位置的字符替换为“****”或其他符号。例如,将银…

MySQL数据库误删恢复

前言 经常听说删库跑路这真的不只是一句玩笑话,若不小心删除了数据库,事情很严重。你一个不小心可能会给公司删没。建议研发不要直连生成环境,一般的话都会分配账号权限,生产环境的账号尽量是只读,以防你一个不经意给库或表删除。一定要备份,这很重要,这是一个血的教训。…

iTOP3568开发板-Buildroot 系统设置待机和锁屏

Weston 的超时待机时长可以在启动参数中配置,也可以在 weston.ini 的 core 段配置。 方法一: 修改文件系统中/etc/init.d/S50launcher 文件,如下图所示的红框,0 代表禁止待机,可自行设置待机时间,单位是秒。 方法二&a…

深浅拷贝各种实现方式性能

拷贝方式 拷贝方式类型原理备注Object.clone()默认 浅拷贝,可以自定义实现深拷贝对象内存复制constructor可以实现深拷贝自定义实现BeanUtil.copyProperties()浅拷贝利用 getter/setter 实现属性拷贝反射,spring utilCollectionUtils.clone()深拷贝本质…

强化学习驱动的低延迟视频传输

随着视频会议、视频直播的流行以及未来AR/VR业务的发展,低延迟视频传输服务被广泛使用,但视频质量(QoE)还不能满足用户要求。那么近年来新兴的AI神经网络是否能为视频传输带来智能化的优化?今天LiveVideoStack大会北京…

macos m1 pip install lightgbm error

MacOS M1电脑,执行 pip install lightgbm 错误如下: 尝试如下操作: 参考链接如下: https://github.com/Microsoft/LightGBM/issues/1324 brew install cmake brew install gcc git clone --recursive https://github.com/Micro…

Unity之OpenXR+XR Interaction Toolkit接入HTC Vive解决手柄无法使用的问题

前言 随着Unity版本的不断进化,VR的接口逐渐统一,现在大部分的VR项目都开始使用OpenXR开发了。基于OpenXR,我们可以快速适配HTC,Pico,Oculus,等等设备。 今天我们要说的问题就是,当我们按照官方的标准流程配置完OpenXR后(参考:Unity之OpenXR+XR Interaction Toolkit…

西门子S7-200 CPU输入/输出接线说明

总结来看,S7-200系列PLC提供4个不同的基本型号的8种CPU,其接线方式也可大致分为6种: 1.CPU SR20接线 2.CPU SR40接线 3.CPU CR40接线 4.CPU ST40接线 5. CPU SR60接线 6. CPU ST60接线 除了CPU外,我们还需要了解200smart PLC的数…

排序算法大总结(插入、希尔、选择、堆、冒泡、快速、归并、计数)

1. 排序概要2. 插入排序直接插入排序希尔排序(缩小增量排序) 3.选择排序直接选择排序堆排序 4. 交换排序冒泡排序快速排序霍尔版本(hoare)挖坑法双指针版本快排优化快速排序非递归 5. 归并排序归并递归版本归并非递归版本 6.计数排…

物联网开发项目中具备哪些特点?

物联网开发是一项由设备、传感器、系统和应用程序组成的复杂技术。许多公司已经制定了计划,准备将物联网技术整合到他们的系统中,以帮助提高效率和生产力。在许多方面,物联网都是一项技术投资,但与其他投资相比,它可以…

RFID如何提升工业物流管理效率?

RFID技术目前已经在工业物流行业中广泛应用,企业只要将附带产品信息的RFID标签贴在货物上,利用工业读写器,可以快速准确地读取货物信息,提高仓库管理效率。 RFID如何提升工业物流管理效率? 1、跟踪货物 RFID技术可帮助企业跟踪货…

声表面波滤波器圆片级互连封装技术研究

陈作桓,于大全,张名川 厦门大学,厦门云天半导体科技有限公司 摘要 射频前端模块是无线通信的核心,滤波器作为射频前端的关键器件,可将带外干扰和噪声滤除以保留特定频段内的信号,满足射频系统的通讯要求…

B站刚崩,唯品会又崩:亿级用户网站的架构硬伤与解决方案

说在前面 在40岁老架构师尼恩的数千读者的社区中,一直在指导大家简历和职业升级。前几天,指导了一个华为老伙伴的简历,小伙伴的优势在异地多活,但是在简历指导的过程中,尼恩发现: 异地多活的概念、异地多活…