基于MATLAB的指纹识别系统设计

摘 要

生物识别技术已经成为身份识别和网络安全的发展技术之一,其中指纹识别技术是目前公认的安全,准确,方便的身份认证技术之一,使之成为人们研究的热点。

本文主要设计一个基于matlab 的指纹识别系统。首先主要介绍了指纹识别技术研究的背景,意义,及现状。其次,实现了指纹识别系统,描述了指纹识别系统的基本结构,并且对指纹图像的预处理、特征提取、特征匹配这三个必要的环节的算法进行了详细地研究,在指纹图像预处理阶段,本文使用基于灰度的算法对图像进行了分割,同时,针对二值化后图像中仍存在的噪声,也进行了相应的修整处理,尽可能的为以后指纹特征的提取打好基础,从而成功地实现了对指纹数字图像的处理、特征提取、保存和匹配等功能。最后,对指纹识别系统进行了仿真,仿真结果表明该系统可以较好的进行识别,准确率达到了95.1%。


关键词:指纹识别;预处理;二值化;特征提取;特征匹配

目 录

摘 要 I

Abstract II

1 绪论 1

1.1本课题背景和意义 1

1.2指纹识别技术研究现状 1

1.3本文的章节安排 2

2指纹识系统设计 4

2.1指纹识别系统设计基本结构 4

2.2指纹图像分割 4

2.2.1指纹图像分割介绍 4

2.2.2 均值方差法 5

2.3指纹图像的细化 6

2.3.1指纹图像细化的预处理 6

2.3.2 指纹图像细化方法计算 7

2.4指纹图像的特征提取 8

2.4.1 指纹特征提取概述 8

2.4.2指纹特征提取和去伪特征 9

2.5 指纹图像匹配方法 10

2.5.1指纹图像匹配介绍 10

2.6本章小结 10

3仿真结果及其分析 12

3.1仿真结果及分析 12

3.2本章小结 14

结 论 15

参 考 文 献 16

附录 MATLAB程序 17

致 谢 33


1 绪论

1.1本课题背景和意义

指纹识别技术的应用十分广泛,指纹因具有终生不变性及稳定性,而且不同人指纹相同的概率几乎为零,因此指纹自动识别系统被广泛应用于案例分析、商业活动中的身份鉴别等领域.目前有很多的生物测定技术可用于身份认证,包括虹膜识别技术、视网膜识别技术、面部识别、签名识别、声音识别技术、指纹识别等,具有安全、可靠的特点,其中自动指纹识别系统是目前研究最多、最有应用前景的生物识别系统。指纹识别技术的发展得益于现代电子集成制造技术的进步和快速可靠的算法的研究。

指纹门禁系统通过将用户的指纹特征与指纹特征数据库中的数据进行对比实现用户身份的鉴别,并不直接保存和使用用户的指纹图像信息,不会侵犯到用户的隐私信息,是当前技术最先进、应用最广泛的门禁系统。对生物识别(指纹识别)技术来说,被广泛应用意味着它能在影响亿万人的日常生活的各个地方使用。通过取代个人识别码和口令,生物识别(指纹识别)技术可以阻止非授权的 “访问”,可以防止盗用ATM、蜂窝电话、智能卡、桌面PC、工作站及其计算机网络;在通过电话、网络进行的金融交易时进行身份认证;在建筑物或工作场所生物识别技术(指纹识别)可以取代钥匙、证件、图章等。生物识别(指纹识别)技术的飞速发展及其广泛应用将开创个人身份鉴别的新时代。指纹所具有的唯一性、不变性、及易于获取、分类存储有规律等特性使其成为生物鉴定学中最为成熟的方式。

1.2指纹识别技术研究现状

指纹识别技术从早期的人工比对到现在采用计算机技术实现自动指纹识别,指纹对比更加准确,识别效率得到极大提高。自动指纹识别过程通常由指纹图像滤波增强、二值化、细化、特征提取以及指纹匹配等几个环节构成。指纹图像滤波增强的目的是将有噪声干扰的指纹图像变得更加清晰,使得指纹图像的脊线更黑,谷线更白,当前在实际指纹图像增强算法的应用中一般是几种滤波增强方式结合起来使用,主要的方案是基于傅里叶变换结合滤波和指纹图像点方向场的下上下滤波器;指纹图像二值化,是将指纹图像变成灰度值只有0和255两种颜色的图像,当前,在自动指纹识别中常采用的是根据指纹图像的点方向场在指纹纹线方向和指纹纹线垂直方向上对指纹图像进行二值化处理;指纹图像细化是指删除指纹纹线的边缘像素,使之只有一个像素宽度,目前在自动指纹识别技术中常用的是OPTA算法的改进的图像模板细化算法;指纹特征提取,是将细化后使用计算机数字图像处理技术采集指纹图像中奇异点、端点、叉点等指纹特征数据,目前常用的特征提取算法是先对细化后的指纹图像进行初步去噪,然后提取特征点,再根据阈值去除伪特征点;指纹匹配,是指纹预留模板图像与输入样板图像中的所有特征点的匹配,目前在自动指纹识别系统中常采用可变大小的界限盒的指纹特征匹配算法。

目前指纹识别技术还有诸多困难,例当三维的指纹被指纹录入设备扫描成二维的数字图像时,就会丢失一部分信息,手指划破、割伤、弄脏、不同干湿程度以及不同的按压方式,还会导致指纹图像的变化,这就给可靠的特征提取带来了困难;例如传统的基于细节点的识别方法,是依靠提取指纹脊线上的细节点,然后对其位置和类型进行匹配,来识别指纹的,而噪声会影响特征提取准确度,增加错误的特征点或丢失真正的特征点。当噪声很大时,就要增加图像增强算法来改善图像的质量,但很难找到一种增强算法能够适应所用的噪声,多种增强算法又会大幅增加算法运行时间,不好的增强算法又会增加人为特征。当噪声增大时,提取了许多虚假细节点,还有可能丢失细节点,这就是传统的基于细节点识别算法的不足之处之一,因为它只利用了指纹图像中的一小部分信息(细节点位置和方向)作为特征进行匹配,丢失了蕴涵在图像中的其他丰富的结构信息。不难想象,基于这种方法的识别算法,很难全面适应指纹的变化。

人的指纹含有天然的密码信息,它们具有几点重要特特点。

①广泛性,指每一个正常的人都有指纹。

②唯一性,指每一个人的指纹都不同。指纹的细节由细微纹点和纹线的起点、终点、分叉等组成。正是这些无穷无尽的细节特征组合构成了指纹的唯一性.事实上,甚至包括双胞胎,世界上两个指纹相同的概率小于1/109,几乎为零,这就构成了指纹的第一大特点。

③终生不变性,指纹终身不变即指纹的图案永远不会改变,从人的出现到死后的分解为止(除非指纹受到伤害)。

④指纹与主体的不可分离性:即指纹不存在丢失、遗忘、被窃取的可能。

指纹的使用比起其它证卡来说更快捷、安全、准确、无干扰,可实现快速登录注册,系统兼容性好,也就是说可以独立或者通过联网构成系统并且很容易并入各类证卡和定义识别系统中。因此,指纹识别技术的应用范围极广。

1.3本文的章节安排

本文以研究指纹识别中指纹图像分割、细化、特征提取、匹配等若干问题为研究主体,针对指纹识别技术中分割、细化和匹配进行了仿真和修正。其中分割部分采用了方差均值的方法,细化选取了一种伪特征较少的模板,匹配时以分叉点和端点信息进行匹配。具体的章节和各章的内容安排如下:

  1. :在介绍本论文的研究背景及意义,在指纹识别技术的现状和特点的基础上,确定了本文所做的主要工作。
  2. :本章主要介绍了指纹识别系统设计原理,为后续的研究工作奠定基础,介绍了均值方差的基础知识和基本理论以及仿真中具体的分割运用算法;指纹图像细化的方法;指纹图像细化后的特征提取,需要哪些特征,去除哪些伪特征,以方便和正确地进行匹配工作;指纹图像匹配的概念、匹配问题的困难所在和常用方法。
  3. :指纹识别系统的仿真结果及分析。

结论:总结本文所取得的一些研究成果,并对课题发展进行了展望。


2指纹识系统设计

2.1指纹识别系统设计基本结构

指纹识别系统主要由指纹图像读取,图像预处理,特征提取,特征匹配四大步骤组成。

首先,我们要提取需要处理的指纹识别的原始图片。

其次,进行图像预处理。通常图像预处理包括分割、归一化、二值化和细化, 图像预处理的目的就是去除图像中的噪声,将图像变成清晰点线图,这样才能提取到正确的指纹特征,从而达到正确匹配的目的。它的好坏直接影响到指纹识别的效果。

在此基础上, 接下来就是要对细化后的数字图像进行关键特征提取,从而达到识别不同的志文数字图像的目的。普遍采用的特征提取是提取细节点。

最后,我们将处理后的图像进行匹配,指纹图像的特征匹配主要是对所提取的细节特征进行匹配,将要比对的图像与库中图像的细节特征进行比对,并将比对结果输出,这是指纹识别系统设计中最重要的一个环节,这也是指纹识别系的最终目的。

2.2指纹图像分割

2.2.1指纹图像分割介绍

指纹图像分割在指纹识别系统中作为图像与处理的一部分,指纹图像分割的基本依据是图像的某些特征及特征的集合。如灰度值,邻域关系,纹线的扭曲程度等。图像特征是指纹图像的固有属性。通过提取图像特征,可将原始图像映射到特征空间,使图像特征在特征空间中呈现一定的分布[6]。因此根据以上的的灰度值领域关系,纹线的扭曲程度,指纹图像分割大致分为三类:基于像素的图像分割,基于块特征的图像分割以及基于全局的图像分割。

基于像素的指纹图像分割中目前流行多尺度小波变换和阈值法。小波变换和傅里叶变换的出发点都是将信号表示成基函数的线性组合。所不同的是傅里叶变换采用时间属于(一∞,+∞)的谐波函数

v2-e99bc70ac8f1af992f97493d08c67239_b.jpg

作为基函数,

计算机中的图像信息是以离散信号形式存放的,在信号处理中,特别是在数字信号处理和数值计算等方面,为了计算机实现的方便,连续小波必须进行离散化,而最基本的离散化方法就是二进制离散,一般将这种经过离散化的小波及其变换叫做二进小波和二进变换。

小波变换的特点是压缩比高,压缩速度快,压缩后能保持信号与图象的特征不变,且在传递中可以抗干扰。在指纹识别识别中使用小波变换有助于噪声的滤除以及有利于检测奇异点。但是小波变换的明显缺点是它计算复杂,计算效果也取决于函数的选择。

另一种阈值分割就是简单地用一个或几个阈值将图像的灰度直方图分成几个类,认为图像中灰度在同一个灰度类内的像素属同一物体。它是图像分割中最基本的方法。其原理是先定一个阈值,大于此值为1,小于则认为为0;多阀值则可以利用多维函数。此原理在匹配中也可以运用。其优点是计算简单,仅需比较灰度值即可;运算效率较高,速度快;它的缺陷在于仅考虑图像的灰度信息,而忽略了图像的空间信息,对于图像中不存在明显灰度差异或各物体的灰度值范围有较大熏叠的图像分割问题难以得到准确的结果。

代表块特征的指纹图像分割目前研究趋势为多种块基本特征如灰度均值、块灰度方差[9]、块方向图等综合运用和重新定义块特征。其中块指的是将图像分个成一个个小的图像块。图像均值就是对每一个单位块的灰度值取均值,方差则反映该块中各点与均值的偏差性,方向[10]这可以很好的反映纹理的变化趋势。一般来说,常见的方向场的计算分为掩模法和公式法两大类。LinHong等人开发的基于最小均方估计算法,即公式法。


v2-3afaa8a9e33fa504cdbe754439dc8586_b.jpg

(3.1)

它是利用正交坐标系下,原点到它们组成的坐标点的有向线段与X的正半轴的夹角可来表示该子块的块方向。这种方法最大的优点是易实现,很好体现出纹理,但缺点是对于变化太快的部分出错。此方法的实现是利用方向滤波器。

基于全局的图像分割则是根据情况特别是某些特殊场合的利用,如残缺指纹。全局的图像分割可以是人工选定几个特定点后再根据全局的特点来处理,此法也可运用于匹配。基于全局的指纹识别仍处于实验室探索阶段,应用领域中尚不广泛。

2.2.2 均值方差法

在图像分割概述中,已经提到基于块特征的指纹图像分割。在这部分将重点介绍均值法差法的计算方法和在仿真中的运用。

该算法基于背景区灰度方差小,而指纹区方差大的思想,将指纹图像分成块,计算每一块的方差,如果该块的方差小于阈值为背景,否则为前景。具体步骤分以下三步:

(1)将低频图分成M×M大小的无重叠方块,方块的大小以一谷一脊为宜。

(2)计算出每一块的均值和方差。

(3.2)

  1. 如果计算得到的方差几乎接近于0就认为是背景,对于方差不为零的区域在进行阈值分割算法,这种算法主要是根据计算得到的方差来决定其是否为背景区。

在使用方差均值法之前还要使用归一法将图变为低频图。归一化的目的是把不同原图像的对比度和灰度调整到一个固定的级别上,为后续处理提供一个较为统一的图像规格。指纹图像的归一化公式如式所示。

在使用方差均值法之前还要使用归一法将图变为低频图。归一化[11]的目的是把不同原图像的对比度和灰度调整到一个固定的级别上,为后续处理提供一个较为统一的图像规格。

2.3指纹图像的细化

2.3.1指纹图像细化的预处理

这部分预处理主要为二值化。由于指纹图像脊、谷相间,因此指纹图像的处理常是将指纹图像二值化。灰度图像二值化是将灰度图变换为只有黑和白两种灰度的图像。这样不仅可以压缩原指纹图像的数据量,而且也方便后面的细节特征的提取。灰度图二值化的基本思想是选取适当的灰度阂值,将灰度图像转化为二值图像,阈值的选择是关键,对于阈值的选择,有多种方法,如熵法,Ostu法等。根据是否将图像分块处理,又分全局阈值算法和局部阈值算法两种,全局阈值算法是将整幅图像以一个阈值处理,而局部阈值算法则把原图分成若干个子图,在每个子图中确定闽值,在进行二值化,由于指纹图像在不同区域的亮度和对比度是有差别的,因而全局阈值算法不适用。

灰度图二值化的基本思路是选取适当的灰度阈值,将灰度图像转化为二值图像。一般的图像处理中的二值化算法主要是计算整幅图像的灰度平均值,然后将该值作为门限,高于该门限的像素点就置1,反之置0。我们通过研究发现,这种方法虽然简单,但是对噪声较大,图像质量不好的指纹会产生较大的二值化噪声。所以最好选用局部阈值法作为二值化算法。

论文中采用了一种动态局部阈值,满足这种条件下的灰度值为128,不满足则灰度值为255。再根据前面判断的是否为背景即Icc值的来修正Icc值:灰度值为128且Icc为1时(非背景指纹纹线时),Icc值为0,像素值置为0。背景和灰度值为255的纹线像素置为1,这做法的目的是去除不确切的点。此时背景为白,纹线为黑。

二值化后的图像中的点还要进行修改,修改条件为:当像素为1时,它周围点不大于3个为像素1点则修改为0;当像素为0时,它周围不小于7个点为像素1的点,则修改为1。这种修改是为了使图像连续圆滑。

2.3.2 指纹图像细化方法计算

由于灰度过渡区[12]的存在,指纹细化是指纹图像预处理中的一个重要环节,因为一般的特征提取都是在细化的基础上进行的,如果细化不好,将无法使用常规的特征提取算法提取细节特征信息[13]。细化可以便我们得到绞线的单像素的骨架。所谓“骨架”,是指图像中央的骨骼部分,是描述图像几何及拓扑性质的重要方法之一。获取一个图像骨架的过程通常称为对图像“细化”的过程。在文字识别、地质构造识别、工业零件形状识别或图像理解中,先对被处理图像进行细化有助于突出形状特点和减少冗余信息。

细化处理是指在指纹图像二值化以后,在不影响纹线连通性的基础上,删除纹线的边缘像素,直到纹线为单像素宽为止。理想细化后的纹线骨架应该是原始纹线的中间位置,并保持纹线的连通性、拓扑结构和细节特征。一种好的细化算法应该满足下列条件[14]:

(1)收敛性:迭代必须是收敛的。

(2)连通性;不破坏纹线的连接性。

(3)拓扑性:不引起纹线的逐步吞食,保持原图像的基本结构特性。

(4)保持性:保护指纹的细节特征。

(5)细化性:骨架纹线的宽度为1个像素,即单像素宽。

(6)中轴性:骨架尽可能接近条纹中心线。

(7)快速性:算法简单,速度快。

已有的算法迭代按迭代方式的不同分为串行算法和并行算法。在串行细化算法中,当前迭代的结果不仅取决于前一次的迭代迭代图像,而且与当前处理情况有关;而在并行方式中,当前迭代仅仅是由前一次的迭代情况决定,串行细化算法的处理结果依赖于对像素处理的先后顺序,因而像素点的消除或保留不可预测。并行细化算法对图像进行细化时利用相同的条件同时检测所有像素点,其结果具有各向同性,因此从算法原理上并行算法优于串行算法。由于并行细化算法具有快速而准确的特性,因此他一直是人们研究的热点,并且相应的提出了许多并行细化算法,如OPTA细化算法,R.W.Hall细化算法,Rosenfeld细化算法,Zhang & Suen 细化算以及ZR细化算法等等。性能上这些算法各有所长。

不同的文献上有不同的关于细化方法,如王家隆等[16]以及王业琳等[17]的细化模板。制约细化的直观表现在计算速度、毛刺和断点上。因而细化中选择一个好的模板很关键。模板分为保留模板和消除模板,消除模板就是根据条件判定这点去除作为背景的模板;保留模板则是根据条件判定这点保留作为前景的模板。这样就可以将较粗的图像曲线细化成很细的以像素为单位的线,大大减少了图像的信息量,有利于匹配的高效进行。

方法步骤:

(1)建立3维数组,第一组数据为预处理后的图像信息,定义每一个像素点它周围点像素参数。

(2)对于满足6种情况的模板,赋值为2 ,其实为像素1情况。对于满足后六种情况的模板赋值为3,别的情况点值不做改变。

(3)16种消去模板是在不满足上述情况下衍生的模板,对于满足这些模板的点像素全为0,以上都未涉及的点不做改变。

(4)循环进行上述过程,到所有点值不改变为止,最多进行20次细化。

2.4指纹图像的特征提取

2.4.1 指纹特征提取概述

特征提取就是对细化后的指纹图像提取表示其特征的信息的操作。我们前面所叙述的指纹图像预处理目的就是为指纹的特征提取和最终识别建立一个良好的基础,以保证整个系统识别率比较高。对于自动指纹识别技术而言,选择一种合适的、能表达指纹唯一性的特征量是非常关键的。一般说来,这种特征应有以下性质:

(1)单一性:要求这种特征能够充分体现指纹的唯一性。

(2)可测试性:适用于指纹匹配算法,便于在匹配算法中应用。

(3)紧凑性:要求提取的特征不应包含指纹唯一性以外的冗余信息,并且信息量要尽量小,便于存储、管理和计算。

(4)鲁棒性:要求这种特征对噪声的存在与指纹形变不敏感。

为了比较两个指纹是否相同,需要从指纹图像中提取出能表示指纹唯一性的特征。Galton提出的指纹细节点是人工指纹匹配中最常用的特征。指纹由脊线和谷线交替构成,在大多数地方纹线连续且相互平行,而某些局部不连续的地方构成了细节点。Galton定义了4种细节点类型:分叉点,端点,环、岛,并指出细节点具有唯一性,可以用于指纹匹配。

目前已定义的特征类型己达150多种,但是这些扩展的特征往往不易提取相互区分,并且它们都可以由端点和分叉点的组合进行描述,这使得端点和分叉点成为最常用的结构特征,也称为细节特征,它被认为是最稳定、最容易检查的,而且占全部特征点的80%以上。提取出的特征点还必须经过伪特征点的去除,尽可能地去除掉由于二值化、细化处理等过程引入的伪特征点。最后确定出特征点的类型、位置、方向。

本章就是根据端点和分叉点是最常用的结构特征,提取满足一定条件接近的点,再去除不是端点和分叉点的伪特征点,最终实现特征值的提取,有利于后面匹配的展开。

2.4.2指纹特征提取和去伪特征

目前在细化二值图像中提取细节特征多是用8邻域法,该方法比较简单,在得到可靠的细化二值图像后,只需要一个3×3的模板便可将端点和分叉点提取出来。对于细化二值图像,像素点的灰度值只有2种情况。

在提取指纹图像的细节特征中,由于图像质量和噪声的干扰,存在大量的伪特征点,实验表明一幅质量较差的图像在经过预处理,细节特征提取后可能产生多达一、两万个细节特征点,其中包含了大量的伪特征点,这些伪特征点的存在,不但使匹配的速度大大降低,还使指纹识别性能急剧下降,造成识别系统的拒真率和误识率的上升,因此在进行指纹匹配之前,应对细节特征进行验证,尽可能将伪特征点去除,同时保留真特征点。

去除伪特征点是特征提取要解决的一个重要问题。对整个图像进行特征提取后得到的特征点并非全部都是真实的分叉点和端点,由于指纹质量,细化、特征提取过程引入的噪声造成了很多伪特征点,特别是图像边缘有很多图像分割产生的边界伪端点。

本章中将特征建立为一个3维数组,前两组用于记录端点和分叉点。第3足则专门记录伪特征最终可以除去。端点和分叉点的判断都是运用了上述的8邻域法。其中

(1)端点的判断条件为:周围的8邻域两两相邻当且仅当存在2个不同值。此时的处理为记录数组2,记录点的个数 ,并将该点记为0,而它的8邻域点记为1。

(2)分叉点的判断条件为:周围的8邻域两两相邻当且仅当存在6个不同值。此时的处理为记录数组1,在上述基础上记录点的个数 ,并将该点记为0,而它的8邻域点记为1。处理方式类同上面。

(3)伪特征的判断比较多,全部计入数组3。第一类:超出一定边界,仿真中用了17。此时把它和周围8点记为0,并在上述基础上减去不是特征点的个数。第二类:对于直线12点的和不超过1的点也被视为伪特征点,处理方式类同。第三类为断点:在上述的范围内,特征值为2。此时在更小12的上半范围或下半范围,特征仍为2则认为为断点。处理方式为把它和周围8点置为0,在上述基础上减去2倍的断点数。第四类为毛刺,毛刺的判断类似于短点。因为指纹变化多的部分为中间,所以处理的范围比断点来的范围小,并且在特征值为2的情况下仅仅是缩小范围再次判断特征值,这点就不相同了。毛刺的处理方式也类同断点。第五类为小桥。小桥的判断条件为:10范围内特征值为1,6的上半范围或下半范围特征值仍为1。此时该点则被视为小桥。小桥处理方式类同断点和毛刺。

2.5 指纹图像匹配方法

2.5.1指纹图像匹配介绍

指纹匹配要解决的是对两幅给定指纹图像的特征模式进行比对,判断这两幅图像是否来自同一个人的同一手指。指纹匹配是自动指纹识别的最后一步,也是非常关键的一步。

指纹图像匹配方面,主要有基于图像,脊线结构和特征点的方法。基于特征点的匹配算法具有简单、快速、鲁棒性等优点。目前最为常用的方法是FBI提出的细节点坐标模型来做细节匹配。它利用脊线上的端点和分叉点这两种关键点来鉴定指纹。通过将细节点表示为点模式,一个指纹识别问题可以转化为一个点模式匹配问题。点匹配算法是通过某些变换,如平移变换、旋转变化、伸缩变换,可以把两个点集中的对应点匹配起来。对于基于细节点的匹配思路大体分两种:基于直角坐标系的特征识别和基于极坐标系的特征识别[19]。

点模式匹配[20]将注册指纹和待识指纹的特征点定义为两个点集和P和Q通过平移和旋转使得两个点集重合点数最多。点模式匹配是著名的数学难题。目前的指纹识别系统主要采用基于节点的匹配方法,即点模式匹配。从模板指纹和输入指纹中选取一个节点作为参考节点对,在进行节点匹配时先利用基准点将指纹对齐,然后再评估其它节点的匹配程度。很多情况下选用图片的中心点。当然,他所带来的难题有:

(1)如何快速找到基准点把两幅指纹对齐。

(2)例如图片A中有图片B中不存在的点,集合B中也有图片A中不存在的点,匹配的时候如何处理这些点。

(3)由于指纹存在变形位移,任何一对匹配点之间都不是绝对相等,而是存在一定的差距。设计算法的时候,必须要有一定的容错能力。

(4)最终得到的是两幅指纹的相似度,怎么确定相似度的计算方式。

另外,计算匹配的时间即效率性也很重要。参考点在指纹图像的识别中是也至关重要的。能获得参考点表明从被识别图像中获得的任意比特流与登记图像中获得的比特流相近,则有可能得出两图像相同的结果;没有参考点表明被识别图像完全是另一不同图像。

2.6本章小结

本章主要介绍指纹图像分割及其算法,指纹图像分割分类:主要提到的基于像素。基于像素的指纹图像分割中目前流行多尺度小波变换和阈值法。对比两种方法优缺点:小波变换的特点是压缩比高,压缩速度快,压缩后能保持信号与图象的特征不变,且在传递中可以抗干扰。阈值法其优点是计算简单,仅需比较灰度值即可;运算效率较高,速度快;它的缺陷在于仅考虑图像的灰度信息,而忽略了图像的空间信息,对于图像中不存在明显灰度差异或各物体的灰度值范围有较大熏叠的图像分割问题难以得到准确的结果。

此外,本章还详细介绍了均值方差法,以及应用之前的处理要求:在使用方差均值法之前还要使用归一法将图变为低频图。

3仿真结果及其分析

3.1仿真结果及分析

指纹图像读取如图2.1, 指纹识别归一化仿真结果如图2.2,对指纹图像的首次预处理,将指纹图像的对比度和灰度调整到一个固定级别上,为后续处理提供一个较为统一的图像规格。指纹识别分割仿真结果如图2.3,从中可以看到用方差均值法分割既适用于比较圆滑的指纹,又适用纹线变化很大的指纹图像。在归一化处理降频和通过区域均值方差的后得到的图像条纹清晰,轮廓分明,对于后面的细化和匹配有很大的帮助。该方法快捷,损坏程度低,缺点是计算有一定的复杂度,要通过2次方差均值来处理。

v2-ab49c2d97ae1d298770e07cfbbf34859_b.jpg

v2-3a195dea6589dc9670325f3a8c64447f_b.jpg

v2-8deff333ef3cfe21fa393105d5111827_b.jpg

v2-f1c99dbc7c5ab0ffbf6e60dc60273f40_b.jpg

图2.1指纹识别原图像图 图2.2指纹识别归一化图像

图2.3指纹识别分割后图像 图2.4指纹识别二值化图像

指纹识别二值化仿真结果如图2.4,指纹图像的二值化就是从一个具有纹理灰度变化的指纹图像生成另一个只有两种色调的黑白分明的指纹图像。二值化操作使得指纹灰度中,相对色调较浅的谷纹线部分被转成了白色,而相对较深的脊纹线部分被转成了黑色。使具有灰度的图像变成只有黑白两种色调的二值化图像。可以提高指纹图像中脊线和谷线的对比度, 因此有利于细节点提取。指纹识别二值化去噪仿真图2.5。

指纹识别细化仿真结果如图2.6,从分割后的二值化处理图像中,我们可以看到,整个灰度变成了黑白的二值图像图,图像的条纹比较清楚,它的实现有助于压缩数据量和细化的实现。

细化将黑白二值图像细化成了单个像素带宽的指纹图像,由于模板的选择不同,上图中的细化图像一定程度上存在毛刺、分叉、断点等不理想的情况。所以在特征提出前还需稍加处理,细化好的模板选择可以提高图片的质量和细化运算的速度。

当然,此次仿真的细化还有待改进。对于细化中出现的毛刺现象,要根据局部特征来修改判定模板来决定这个点的像素,甚至可以减少模板的数量和判断次数,既简化模板,又提高运算速度,这点还可以有很大的深入研究。

指纹识别特征提取仿真结果如图2.7,这个特征点分布结果图包含了特征点和伪特征点。在匹配前还需对毛刺、小桥等伪特征点加以识别和处理,这样有助于后面匹配的进行,使匹配更加精确无误和快速。对于特征点和伪特征点的判断方法还有很多,端点判断和分叉点判断属于比较多的特征点判断,伪特征点也还有别的种类,短线之类也属于处理后出现的伪特征,本仿真中没有对此作出处理。在上述基础上也可以根据特征基本构造出相似原图像。指纹识别匹配仿真结果如图2.8。

指纹识别匹配结果仿真结果如图2.9,匹配与否用success值返回。返回1说明匹配成功,返回0则匹配失败。图2.9给出的匹配结果为匹配不成功,耗时3.516411秒。

3.2本章小结

本章主要对指纹识别系统进行了仿真,并对其结果进行了分析,归纳,及总结。

本文中采用的匹配方式,为主流的点模匹配法。首先采用了在原图基础上修改参数值来验证的方法。这种方法将原特征点的相对距离进行修改,使得各个特征点之间的相对距离产生差异。在找到核心点后,比较它们相对距离的差异,对于满足一定值的点视为可积点。最后判断可积点的个数和相对值。当它们个数满足一定条件时即为匹配成功,不满足视为不匹配。匹配与否用success值返回。返回1说明匹配成功,返回0则匹配失败。此外,本实验做了多次仿真,经验证该系统可以较好的进行识别,准确率达到了95.1%。


结 论

本文系统地介绍了指纹识别技术的发展和国内外研究应用现状,阐述了建立指纹识别系统的必要性和意义,实现了基于Matlab的指纹识别系统。针对指纹图像的特性,将均值方差法、模板细化、点模匹配应用于指纹识别技术,以改善指纹识别算法的性能。

本系统主要完成了如下几项工作:

(1)综合分析了指纹分割目前主流的三种趋势,选择了基于区域特征的均值方差法并用MATLAB语言来对指纹图像进行分割。分割前还对图像进行低频归一化处理。

(2)对分割好的图像进行了二值化处理,使得细化的信息量大大减少。选用了一种比较精确的模板细化,得到了指纹细化后比较清晰的图像。

(3)对细化后的图像进行特征提取,其中分叉点和端点视为特征点,小桥、边界、毛刺视为伪特征点,对他们进行加以区分和提取以进行匹配。

指纹匹配算法具有速度快、指纹模板小的优点,但是容易受指纹图像噪声干扰。基于全局特征匹配方式主要使用指纹纹理特征,具有特征稳定、信息丰富的优点,但是匹配精度不高、指纹模板比较大。

指纹自动识别技术仍是国内外研究的热点问题实现自动指纹识别系统的实时性网络化提高系统识别率是人们研究的目标,相信不久以后指纹识别将广泛应用于我们的生活为人们提供更方便更快捷的服务。


参 考 文 献

[1]王崇文,李见为,周宏文.指纹识别系统的设计与实现.计算机应用,2001.21(12):23-25

[2]谢立锋,陈灵枭.浅谈指纹识别基本原理.技术与市场,2008.1:44-45

[3]耿德英,陈志敏,陈梅琴.图像处理在指纹识别中实践.西昌学院学报,2009.32(4):72-74

[4]田捷,陈新建,张阳阳. 指纹识别技术的新进展. 自然科学进展,2006.16(4):400-40

[5]王业琳,宁新宝,尹义龙,指纹图像细化算法的研究.南京大学学报:自然科学版,2003.39(4):469-475

[6]张雄,贺贵明,一种指纹宏观曲率特征提取算法.武汉大学软件工程国家重点实验室,2002.1

[7]R. J. Langley, TRW Integrated Engineering Division SIG Technology Review • Winter 1995.3-10

[8]高月红.灰度图像分割算法的研究.科技信息.2009.27:17-18

[9]郭丹颖,吴成东,曲道奎.小波变换理论应用进展. 信息与控制.2004.33(1):67-71

[10]李晨丹,徐进,指纹图像预处理和特征提取算法的MATLAN实现.计算机工程与科学.

[11]张雄,贺贵明,一种指纹宏观曲率特征提取算法.武汉大学软件工程国家重点实验室.2002.11

[12] 赵磊,陈琼,陈中. 一种新的改进OPTA细化算法. 计算机应用,2008.28(10):2639-2642

[13].Asker M. Bazen,Fingerprint Identification - Feature Extraction,Matching, and Database Search

[14]Ranade osenfeld .A.oint Pattem Matching by Relaxation .Pattem Recogition,1993.12(2):269-275

[15]郭晶莹, 吴晴, 商庆瑞. 基于Matlab实现的指纹图像细节特征提取. 计算机仿真, 2007. 24:1

[16] KASS M,WITKIN A,TERZOPOULOS D.Snake:Active contour models.International Journal of Computer Vision.1988.1(4):32l-331

[17]MORTENSEN E N,BARRETF W A.Intelligent scissors for image composition.Proceedings of the ACM SIGGRAPH 95.New York,NY.USA:ACM.2017:191-198


附录 MATLAB程序
clc
clear all
close all
originI=imread('1.tif');
[m,n,s] = size(originI);
I=originI;
if s == 3
    I = rgb2gray(originI);
end
I=double(I);
figure, imshow(uint8(I)) 
tic
%%%%%%%%%%% 归一化
M=0;var=0;
for x=1:m
    for y=1:n
        M=M+I(x,y);
    end
end
for x=1:m
    for y=1:n
        var=var+(I(x,y)-M1)*(I(x,y)-M1);
    end
end
%c=sqrt(30*(I(x,y)-M1)/var1);
for x=1:m
    for y=1:n
        if I(x,y)>=M1
           I(x,y)=150+sqrt(100*(I(x,y)-M1)*(I(x,y)-M1)/var1);
        else
            I(x,y)=150-sqrt(100*(M1-I(x,y))*(M1-I(x,y))/var1);
        end
    end
end
figure, imshow(uint8(I))
%%%%%%%%%%%%% 分割
M = 10;      %1
H = m/M;  L= n/M;
aveg1=zeros(H,L);
var1=zeros(H,L);
for x=1:H;
   for y=1:L;
       aveg=0;var=0;
        for i=1:M;
            for j=1:M;
                aveg=I(i+(x-1)*M,j+(y-1)*M)+aveg;
            end
        end
         aveg1(x,y)=aveg/(M*M);
        for i=1:M;
            for j=1:M;
               var=(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y))*(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y))+var;

            end
        end
 
        var1(x,y)=var/(M*M);
 
   end
end
Gmean=0;Vmean=0;
for x=1:H
    for y=1:L
        Gmean=Gmean+aveg1(x,y);
        Vmean=Vmean+var1(x,y);
    end
end
Gmean1=Gmean/(H*L);
Vmean1=Vmean/(H*L);

gtemp=0;gtotle=0;vtotle=0;vtemp=0;
for x=1:H
    for y=1:L
       if Gmean1>aveg1(x,y)
           gtemp=gtemp+1;
           gtotle=gtotle+aveg1(x,y);
       end
       if Vmean1<var1(x,y)
           vtemp=vtemp+1;
           vtotle=vtotle+var1(x,y);
       end 
    end
end
G1=gtotle/gtemp;V1=vtotle/vtemp;


gtemp1=0;gtotle1=0;vtotle1=0;vtemp1=0;
for x=1:H
    for y=1:L
       if G1<aveg1(x,y)
           gtemp1=gtemp1+1;
           gtotle1=gtotle1+aveg1(x,y);
       end
       if 0<var1(x,y)<V1
           vtemp1=vtemp1+1;
           vtotle1=vtotle1+var1(x,y);
       end 
    end
end
G2=gtotle1/gtemp1;V2=vtotle1/vtemp1;

moban=zeros(H,L);
T1=G2;T2=V2;
T3=G1-100;T4=V2-10;
for x=1:H
   for y=1:L
       if aveg1(x,y)>T1 && var1(x,y)<T2
           moban(x,y)=1;
       end
       if aveg1(x,y)<T3 && var1(x,y)<T2
           moban(x,y)=1;
       end
   end
end

for x=2:H-1
    for y=2:L-1
        if moban(x,y)==1
            if moban(x-1,y) + moban(x-1,y+1) +moban(x,y+1) + moban(x+1,y+1) + moban(x+1,y) + moban(x+1,y-1) + moban(x,y-1) + moban(x-1,y-1) <=4
                moban(x,y)=0;
            end
        end
    end
end  %2

Icc = ones(m,n);
for x=1:H
   for y=1:L
       if  moban(x,y)==1
 
          for i=1:M
            for j=1:M
                I(i+(x-1)*M,j+(y-1)*M)=G1;
                Icc(i+(x-1)*M,j+(y-1)*M)=0;
            end
          end
        end
    end
end
figure, imshow(uint8(I)) 
%%%%%%%%%%%二值化
temp=(1/9)*[1 1 1;1 1 1;1 1 1];%模版系数       %3
 Im=double(I);
 In=zeros(m,n);
for a=2:m-1;
    for b=2:n-1;
        In(a,b)=Im(a-1,b-1)*temp(1,1)+Im(a-1,b)*temp(1,2)+Im(a-1,b+1)*temp(1,3)+Im(a,b-1)*temp(2,1)+Im(a,b)*temp(2,2)+Im(a,b+1)*temp(2,3)+Im(a+1,b-1)*temp(3,1)+Im(a+1,b)*temp(3,2)+Im(a+1,b+1)*temp(3,3);
    end
end

I=In;
Im=zeros(m,n);
for x=5:m-5;
   for y=5:n-5;
    sum1=I(x,y-4)+I(x,y-2)+I(x,y+2)+I(x,y+4);
    sum2=I(x-2,y+4)+I(x-1,y+2)+I(x+1,y-2)+I(x+2,y-4);
    sum3=I(x-2,y+2)+I(x-4,y+4)+I(x+2,y-2)+I(x+4,y-4);
    sum4=I(x-2,y+1)+I(x-4,y+2)+I(x+2,y-1)+I(x+4,y-2);
    sum5=I(x-2,y)+I(x-4,y)+I(x+2,y)+I(x+4,y);
    sum6=I(x-4,y-2)+I(x-2,y-1)+I(x+2,y+1)+I(x+4,y+2);
    sum7=I(x-4,y-4)+I(x-2,y-2)+I(x+2,y+2)+I(x+4,y+4);
    sum8=I(x-2,y-4)+I(x-1,y-2)+I(x+1,y+2)+I(x+2,y+4);
    sumi=[sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8];
    summax=max(sumi);
    summin=min(sumi);
     summ=sum(sumi);
     b=summ/8;
  if  (summax+summin+4*I(x,y))> (3*(sum1+sum2+sum3+sum4+sum5+sum6+sum7+sum8)/8)
                        sumf = summin;
         else
            sumf = summax;
         end
 
         if   sumf > b
           Im(x,y)=128;
        else
            Im(x,y)=255;
         end
   end
end

for i=1:m
     for j =1:n
         Icc(i,j)=Icc(i,j)*Im(i,j);
     end
end
 
for i=1:m
     for j =1:n
         if (Icc(i,j)==128)
             Icc(i,j)=0;
         else
             Icc(i,j)=1;
         end;
     end
 end

%figure,imshow(double(Icc))
%%%%%%%%%%%二值化后处理

Im=Icc;
 In=Im;
 for a=1:4
  for i=2:m-1
    for j=2:n-1
        if Im(i,j)==1
            if Im(i-1,j) + Im(i-1,j+1) +Im(i,j+1) + Im(i+1,j+1) + Im(i+1,j) + Im(i+1,j-1) + Im(i,j-1) + Im(i-1,j-1) <=3
                In(i,j)=0;
           end
        end
         if Im(i,j)==0
            if Im(i-1,j) + Im(i-1,j+1) +Im(i,j+1) + Im(i+1,j+1) + Im(i+1,j) + Im(i+1,j-1) + Im(i,j-1) + Im(i-1,j-1) >=7
                In(i,j)=1;
            end
         end
    end
end
Im=In;
 end
%%%%%%%%%%%%%%%%细化
figure,imshow(In);
I=xihua(In);
figure,imshow(I);
%%%%%%%%%%%特征提取
xxx=0;
Im=I;
tezheng=zeros(m,n,3);
for i=2:m-1
    for j=2:n-1
        if Im(i,j)==1
        a = 0;
        if Im(i-1,j) ~= Im(i-1,j+1)
            a = a + 1;
        end
        if Im(i-1,j+1) ~= Im(i,j+1)
            a = a + 1;
        end
        if Im(i,j+1) ~= Im(i+1,j+1)
            a = a + 1;
        end
        if Im(i+1,j+1) ~= Im(i+1,j)
            a = a + 1;
        end
        if Im(i+1,j) ~= Im(i+1,j-1)
            a = a + 1;
        end
        if Im(i+1,j-1) ~= Im(i,j-1)
            a = a + 1;
        end
        if Im(i,j-1) ~= Im(i-1,j-1)
            a = a + 1;
        end
        if Im(i-1,j-1) ~= Im(i-1,j)
            a = a + 1;
        end
        if a==6                           %%%分叉点判断
            tezheng(i,j,1)=i;
            tezheng(i,j,2)=j;
            tezheng(i,j,3)=1; 
           xxx=xxx+1;
             I(i,j)=0;
               I(i-1,j)=1;I(i-1,j+1)=1;I(i,j+1)=1;I(i+1,j+1)=1;I(i+1,j)=1;I(i+1,j-1)=1;I(i,j-1)=1;I(i-1,j-1)=1;
               %%%%%%%1表示分叉点   0表示端点            
        end
              if a==2                          %%%%  端点判断
           tezheng(i,j,1)=i;
           tezheng(i,j,2)=j;
           tezheng(i,j,3)=2; 
           xxx=xxx+1;
             I(i,j)=0;           I(i-1,j)=1;I(i-1,j+1)=1;I(i,j+1)=1;I(i+1,j+1)=1;I(i+1,j)=1;I(i+1,j-1)=1;I(i,j-1)=1;I(i-1,j-1)=1;
 
        end
    end
    end
end
figure,imshow(I)
%%%%%%%%%%%特征提取后处理~
Izz=I;
for i=1:m         %%%%%%%%%%%%%去除边界点
    for j=1:n
        if tezheng(i,j,3)~=0
          if i-17<0||i+17>m|| j-17<0||j+17>n
              tezheng(i,j,3)=0;   
              xxx=xxx-1;               %%%消除端点
            Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
           else
               a=0;b=0;c=0;d=0;
              a=I(i+1,j)+I(i+2,j)+I(i+3,j)+I(i+4,j)+I(i+5,j)+I(i+6,j)+I(i+7,j)+I(i+8,j)+I(i+9,j)+I(i+10,j)+I(i+11,j)+I(i+12,j);
              b=I(i-1,j)+I(i-2,j)+I(i+3,j)+I(i-4,j)+I(i-5,j)+I(i-6,j)+I(i-7,j)+I(i-8,j)+I(i-9,j)+I(i-10,j)+I(i-11,j)+I(i-12,j);
              c=I(i,j+1)+I(i,j+2)+I(i,j+3)+I(i,j+4)+I(i,j+5)+I(i,j+6)+I(i,j+7)+I(i,j+8)+I(i,j+9)+I(i,j+10)+I(i,j+11)+I(i,j+12);
              d=I(i,j-1)+I(i,j-2)+I(i,j-3)+I(i,j-4)+I(i,j-5)+I(i,j-6)+I(i,j-7)+I(i,j-8)+I(i,j-9)+I(i,j-10)+I(i,j-11)+I(i,j-12);
              if ( a<=1 && b<=1 && c<=1 && d<=1)
                  tezheng(i,j,3)=0;        %%%消除端点 
                  xxx=xxx-1;
                  Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
             end

          end
        end
    end
end
%%%%%%%%%%%%消除断点
for i=17:m-17
    for j=17:n-17
        if tezheng(i,j,3)==2
            for x=i-12:i+12
                for y=j-12:j-1
                    if tezheng(x,y,3)==2
                        tezheng(i,j,3)=0;
                        tezheng(x,y,3)=0;
                        xxx=xxx-2;
                       Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
                        Izz(x-1,y)=0;Izz(x-1,y+1)=0;Izz(x,y+1)=0;Izz(x+1,y+1)=0;Izz(x+1,y)=0;Izz(x+1,y-1)=0;Izz(x,j-1)=0;Izz(x-1,y-1)=0;
                    end
                end
            for x=i-12:i+12
               for y=j+1:j+12
                   if tezheng(x,y,3)==2
                      tezheng(i,j,3)=0;
                         tezheng(x,y,3)=0;
                           xxx=xxx-2;
                        Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
                        Izz(x-1,y)=0;Izz(x-1,y+1)=0;Izz(x,y+1)=0;Izz(x+1,y+1)=0;Izz(x+1,y)=0;Izz(x+1,y-1)=0;Izz(x,j-1)=0;Izz(x-1,y-1)=0;
                    end
                end
               end
            end
        end
    end
end
%figure,imshow(I)
%%%%%%%%%%%%%%消除毛刺
for i=10:m-10
    for j=10:n-10
        if tezheng(i,j,3)==2
            for x=i-5:i+5
                for y=j-5:j+5
                    if tezheng(x,y,3)==1
                        tezheng(i,j,3)=0;
                        tezheng(x,y,3)=0;
                        xxx=xxx-2;
                         Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
                        Izz(x-1,y)=0;Izz(x-1,y+1)=0;Izz(x,y+1)=0;Izz(x+1,y+1)=0;Izz(x+1,y)=0;Izz(x+1,y-1)=0;Izz(x,j-1)=0;Izz(x-1,y-1)=0;
                    end
                end
            end
        end
    end
end
%figure,imshow(I)
%%%%%%%%%%%消除小桥
for i=10:m-10
    for j=10:n-10
        if tezheng(i,j,3)==1
            for x=i-6:i+6
                for y=j-6:j-1
                    if tezheng(x,y,3)==1
                        tezheng(i,j,3)=0;
                        tezheng(x,y,3)=0;
                        xxx=xxx-2;
                        Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
                        Izz(x-1,y)=0;Izz(x-1,y+1)=0;Izz(x,y+1)=0;Izz(x+1,y+1)=0;Izz(x+1,y)=0;Izz(x+1,y-1)=0;Izz(x,j-1)=0;Izz(x-1,y-1)=0;
                    end
                end
            end
             for x=i-6:i+6
                for y=j+1:j+6
                    if tezheng(x,y,3)==1
                        tezheng(i,j,3)=0;
                        tezheng(x,y,3)=0;
                         xxx=xxx-2;
                         Izz(i-1,j)=0;Izz(i-1,j+1)=0;Izz(i,j+1)=0;Izz(i+1,j+1)=0;Izz(i+1,j)=0;Izz(i+1,j-1)=0;Izz(i,j-1)=0;Izz(i-1,j-1)=0;
                        Izz(x-1,y)=0;Izz(x-1,y+1)=0;Izz(x,y+1)=0;Izz(x+1,y+1)=0;Izz(x+1,y)=0;Izz(x+1,y-1)=0;Izz(x,j-1)=0;Izz(x-1,y-1)=0;
                    end
                end
            end
        end
    end
end
figure,imshow(Izz)
%%%%%%%%%%%%%%%%%匹配
pipei=zeros(xxx,3);
ddd=1;
for i=10:m-10
    for j=10:n-10
        if ddd~=xxx+1
            if tezheng(i,j,3)~=0
                pipei(ddd,1)=tezheng(i,j,1);
                pipei(ddd,2)=tezheng(i,j,2);
                pipei(ddd,3)=tezheng(i,j,3);
                ddd=ddd+1;
            end
        end
    end
end
%计算p1与格
pp=zeros(xxx,xxx-1);                       
qqq=1;
for fff=1:xxx-1
    for i=qqq:xxx-1
        d=sqrt((pipei(qqq,1)-pipei(i+1,1)).^2+(pipei(qqq,2)-pipei(i+1,2)).^2);
       % jiao=arctan((pipei(i+1,2)-pipei(qqq,2))/(pipei(i+1,1)-pipei(qqq,1));
      %  jiaodu(qqq,i)=jiao;
        pp(qqq,i)=d;       
    end
    if qqq~=1
      for ttt=1:qqq
          if ttt~=qqq         
          pp(qqq,ttt)=pp(ttt,qqq-1);
       %   jiaodu(qqq,ttt)=180-jiaodu(ttt,qqq);
          end 
      end
    end
     qqq=qqq+1;
end
qq=pp;        %%%%%%手动修改模板的匹配
T=6;
yyy=xxx;
count=zeros(xxx-1,yyy-1);
for i=1:xxx-1
   for j=1:yyy-1
       for x=1:xxx-1
          for y=1:yyy-1    
                    p1(x,y)=abs(pp(i,x)-qq(j,y));     %%  修改矩阵
          end
       end
       count1=0; 
         for v=1:xxx-1
            if min(p1(v,1:35))<T
              count1=count1+1;
            end
         end        
       count(i,j)=count1;
   end
end
%%%%%%%%%%找最大值的坐标
temp=0;
for i=1:xxx-1
    for j=1:yyy-1
      if count(i,j)>temp
          temp=count(i,j);
          Pdingdian=i;
          Qdingdian=j;
      end
    end
end
count2=0;success=0;
for x=1:xxx-1
    for y=1:yyy-1    
            p1(x,y)=abs(pp(Pdingdian,x)-qq(Qdingdian,y));      
    end
end

for x=1:xxx-1       %%%%%%%%%%%          整行
    if (min(p1(x,1:35))<6)
      count2=count2+1;
    end
end

if (count2/min(xxx,yyy)>0.6 && count2>9)
    success=1
end
success
toc

  • 9
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值