8个数据库设计典型实例
人事管理系统 工资管理系统 考勤管理系统 员工培训管理系统 仓库管理系统内部行文管理 销售管理系统 酒店管理系统由于数据库设计的重要性,人们提出了许多数据库结构设计的技术。但这些设计方法和设计者的工作经验有很大的关系。因此要从根本上解决所有数据库结构设计的问题,就需要多实践,在实饯中积累经验和教训,最终成为数据库结构设计的专家、数据库需求分析数据库结构设计的第个阶段,也是非常重要的个阶段是数据库需求分析。在这个阶段主要是收集基本数据以及数据处理的流稈,为以后进一步设计打下基础。需求分析主要解决两个问题:内容要求。调査应用系统用户所需要操作的数据,决定在数据库中存储什么数据。●●处理要求。调査应用系统用户要求对数据进行什么样的处理,理淸数据库中各种数据之间的关系。解决这两个问题的时候,程序编制人员需要冋应用系统用户详细调査,保证信息收集的完整性。否则有可能后面所有的工作都白费。在数据库需求分析后,应该得到一个数据字典文档,包括3方面内容●数据项。包括名称、含义、类型、取值范围、长度以及和其他数据项之间的逻辑关系数据结构。若十个数据项的有意义的集合,包括名称、含义以及组成数据结构的数据项●●数据沇。指薮据中数据的处理过程,包括输入、处理和输岀这个数据字典在程序的开发过程中会不断发生变化。对于一个大型的软件开发过程,般都需要一份详尽的数据字典针对本实例,通过对企业员工管理内容和过程分析,设计的数据项和数据结构如下●员工基本情况。包括的数据项有员工号、员工姓名、性别、所在部门、身份证号、生日、籍贯、国籍、民族、婚姻状況、健康状况、政治面貌、参加时间血型、参加工作时间、员工状态、状态时间、家庭住址、联系电话等工婚姻状况。包括的数据项有员工号、爱人姓名、爱人出生年月、结婚时间、爱人工作单位、爱人攻治面貌、爱人上作职务等员工学历信息。包括的数据项有员工号、学历、专业、毕业时间、毕业学校学校类型、外语1、外语1等级、外语2、外语2等级等。企业工作岗位信息。包括的数据库项有工作岗位代号、工作岗位名称、工作岗位杈力范围等。●企业部门信息。包括的数据项有部门代号、部门名称、部门经理、部门副经理等有了上面的数据结构和数据项基础,我们就能进行下面的数据库设计了。二、数据库概念结构设计这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这个阶段不用考虑所采用的数据库管系统、操作系统类型、机器类型等问题。这阶段可用的工具很多。用的最多的是ER图( Entity-Relation,实体-关系图),另外还有许多计算机辅助工具( Computer Aided Software Engineering,CASL)可以榘助进行设计本书的实例都是采用ER图的方法来进行数据库概念结构设计,在本书的第一个例子中先对ER图的方法进行简单介绍。E-R图是描述数据实体及其关系的一种直观的描述工具。这种图中有:实体。用方框表示,方框内为实体的名称。实体的各种属性。用椭圆表示,椭圆内为属性名称。使用线段将其和相应的实体连接起来。实体之间的联系。用菱形表示,菱形内为联系的名称。实体和实休之间的联系较多,比较常见的联系有1:1、1n和m:n这3种。●1:1。对于实体A构成的集合中每个实体,在实体集合B中至多只有一个实体与之相对应,反之亦然,称实体集合A和实体集合B之间是1:1的关系。1:n。对于实体A构成的集合中每个实体,在实体集合B中有n(n>0)个实体与之相对应,且对于实体集合B中的每个实体,在A中最多只有一个实体与之相对应,称实体集合A和实体集合B之间是1:n关系。m:n。对于实体A构成的集合中的每个实体,在实体集合B中有n(n>0)个实体与之相对应且对于实体集合B中的每个实体,在A中有m个实体与之相对应,称实体集合A和实体集合B之间是mn关系图2为员工实体E-R图。员工员工基本信息员工学历信息员工婚姻状况图2员工实体ER图图3为部门实体E-R实例工资管理系统工资管既是企业劳动人事管理的重要方面,同吋也是企业财务管理的重要方面,因为它是和人、资都相关的方面。工资管理需要和员工人事管理连接,同时连按工时考勤和医疗保险等等,来生成企业每个职工的基本工资、津贴、医疗保险、保险费、实际发放工资等工资管珥是一项琐碎、复杂而又十分细致的工作,一般不允许发生差错。手工进行工资发放工作,需要反复地进行抄写、计算,不仪花费财务人员大量的吋间,而且往往由于抄写不慎,出现张冠李戴,或者由于计算机的疏忽,岀现工资发放错误的现象。同时工资的发放具有较强的时间限制,必须严格按照单位规定的时间完成计算和发放工作。正是工资管理的这种重复性、规律性、时冋性,使得工資管计算札化成为可能。计算杋进行工资发放工作,不仅能够保证工资核算正确无误、快速输出,而∏还可以利用工资数据厍对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理。不同的企业有着不同的人事制度、财务制度,也就决定了不同的企业具有不同的工资制度。本例按照一般企业都采用的工资计算公式,即根据员工的职务工种来确定基本工资,根据岀工情况来扣除缺勤镄,根据加班情况发放沣贴,根据医疔倸险费用给予报销费用,同时扣除社公保险费来生成一个员工的当月工资。第一节第一节系统设计系统目标设计系统开发的总体任务是实现企业员工工资管理的系统化、规范化和自动化。能够和人事管理系统、考勤管理系统相结合,真正实现企业髙效、科学、现代化的员工管理。二、开发设计思想尽量采用公司现有软硬件环境,及先进的管理系统开发方案,从而达到充分利用公司现有资源,提高系统开发水平和应用效果的目的。系统应符合公司工资管理的规定,满足公司工资管理工作需要,并达到操作过程中的直观、方便、实用、安全等要求。系统采用C/S体系结构, Client(客户端)负责提供表达逻辑、显示用户界面信息、访问数据库服务器; Server(服务器端)则用于提供数据服务。·系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参开发的技术维护补充、维护。系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。三、系统功能分析工资管理涉及企业箮理的多个方面,如员工职务工种变化、员工考劐情况、员工加班情况、员工医疗保险等等。根据这些信息,在每个月的某个固定时间,生成企业全体员工的月工资。对于月工资,能够实现按照员工、部门、月、年进行统计分析,产生相应报表。工资管理的特点是所关联的方面比较多,信息处理量比较大。因此对于本系统的设计,需要采取了下面的些原则在公司范围内统一各种原始单据的格式,统一联日和报表的格式。删除不必要的管理余,实现管理规范化、科学化程序代码标准化,软件统一化,确保软件的可维护性和实用性能够连接各个关联的数据库,获取数据库中的信息。保证各个数据库表格相关的项目之间具有相同的属性。在上面设计原则的基础上,完成系统功能分析。本例中的工资管理系统需要完成功能主要有:员工每个工种基本工资的设定。加班津贴的管理。根据加班的时间和类型给予不同的加班津贴根据月工资生成公式,按照员工的考勤情况和工作表现,生成员工月工资。员⊥年终奖金的生成企业工资报表的生成。支持各种不同形式的报表,如单个员工工资报表生成部门员工工资报表生成、按照月份统计工资报表等。工资管系统的使用帮助。四、系统功能模块设计在系统功能分析的基础上,考虑 Power Builder程序编制的特点,得到如图1所示的系统功能模块图。工资管理系统系统模块工资生成模块津贴管理模块医疗保险模块报表生成模块帮助模块图1系统功能模块图五、工资管理系统和企业中其它系统的关系工资管理系统是全企业信息管理系统的一个有机组成部分。它与企业中其他系统之间的关系如图2所示。⊥资生成⊥资生成财条管工资管理升迁离职考勤情况财务管理考勤管理人事管理图2和企业中其他系统之间的关系第二节数据库设计数据库需求分析在仔细调査企业工资管理过程的基础上,得到系统所要处理数据的流程如图3所小。年奖计算企业年度效益年终奖佥公式设定员工考勤加班津贴工资计算公式设定月工资生医疗保险基本工资图2和企业中其他系统之间的关系针对本实例,通过对企业工资管理的内容和数据流程分析,设计的数据项和数据结构如下●·员工考勤统计信息。包括的数据项有缺勤时间、缺勤天数、缺勤类别等。这些信息可从考勤管理系统的数据库中统计获取。员工工种等级信息。包括的数据项有工种等级、工种基本工资等员工津贴信息、。,包括的数据项有加班时问、加班类别、加班大数等。员工医疗保险信息。包括的数据项有医疗保险时间、医疗费用保险、社会保险费用等。员工基本信息。包括的数据项有员工号、员工姓名、员工工种、员工所属部门等。员工月工资信息、。包括的数据项有生成工资的时间、基木工资、缺勤扣除、加班费用、医疗保险费、月应发工资等员工年终奖金信息。包括的数据项有年份、员工的年终奖金数额等有了上面的数据结构、数据项和数据流程,就能进行下面的数据库设计了。二、数据库概念结构设计本实例根据上面的改计规划岀的实体有:考勤信息实体、津贴信息实体、医疗休险信息实体、员工基本信息实体、月工资实体和年终奖金实体。各个实体的FR图以及实体和实体之间的关系E-R图描述如下。图4为员工基本信息实体ER图。实例考勤管理系统考勤管理既是企业劳动认识管理的重要方面,同时也是企业财务管理的重要方面,因为它是和人、事都相关的方面。考勤管理系统需要和员工人事管理连接,同时需要连接工资管理系统等等,用语完成员工的升迁、工资、津贴、医疗保险、保险费、实际发放工资等第一节系统设计系统目标设计系统丌发的总体任务是实现企业员⊥考勤管理的系统化、规范化、和自动化能够和人事管理系统、工资管理系统相结合,真正实现仝业髙效、科学、现代化的员工管理二、开发实际思想尽量采用公司现冇软硬件环境,及先进的管理系统开发方案,从而达到充分利用公司现有资源,提高系统廾发水平和应用效果的目的●员工考劐管珅系统能够和考動杋相连接,从而完成自动、高效、科学的考勤信息输入●系统采用模块化程序设计方法,既便与系统功能的各种组合和修该,又便于未参与开发的技术维护人员补充、维护●系统应具备数据库维护功能,即使根据用户需求进行数据的添加、删除、修改、被分等操作。系统功能分析考勤管理涉及企业人事管理的多个方面,如员⊥职务升迁、⊥资发放、兴金发放、员⊥医疗保险发放等等。本利自重的考勤管理系统需要完成功能主要有以下几点。●●员工考勤信息处理。该莫完成员工考勤情况的输入、修改等操作。如果企业內有考勤机,可以将它的输岀处理后,形成考勤管理系统考勤模块的输入。企业缺勤类刑的设定。企业考勤统计。该模块可对某个员工进行考勤情况的统计,生成统计报表四、系统功能模块设计在系统功能分析的基础上,考虑 PowerBuilder程序编制的特点,得到如图1所小的系统功能模块图。考勤管理系统考缺报系勤表图1系统功能模块如图五、考勤管理系统和企业中其他系统的关系考勤管理袭击仝全业信息管珄系统的一个有机组成部分。他与企业中替他系统之问的关系如图2所示。工资管理L考勤情况考勤管理人事管理考勤情况图2和企业中其他系统之间的关系第二节数据库设计数据库需求分析在仔细调査企业考勤管理过程的基础上,得到系统所要处理数据的流程如图3所示。人员考勤企业手工输入考勤信息其他考勤机输入信息统计信息数据库报表管理数据维护生成系统图数据流程图针对本实例,通过对企业考勤管理的内容和数据流程分析,设计的数据项和数据结构如员工考勤信息。包括的数据项有员工号、缺勤时间、缺勤天数、缺勤类别等缺勤类别信息。包括的数据项有缺勤类别、名称、描述等。员工基本信息。包括的数据项有员工号、员工姓名、员工工种、员工所属部门等有了上面的数据结构、数据项和数据流程,就能进行下面的数据库设计数据概念结构设计木实例根据上面的设计规划出的实体有:考勤信息实体、员工基木信息实体、缺勤类型实体。各个实体的ER图以及实体和实体之间的关系ER图描述如下图4为员工基本信息实体ER图。员工基本信息员工号姓名员工部员工职务图4员工基本信息实体ER图图5为考勤信息实体E-R图考勤信息员工号姓名缺勤天数缺勤类别时间、原因图5考勤信息实体F-R图图6为缺勤类型实体F-R图缺勤类型类别名称描述图6缺勤类别实体ER图实体和实体之间的关系ER图如图7所小。员工具有1考勤信息属于1:缺勤类型图7实体之间关系ER图数据库逻缉结构设计在上面的实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系考勤管理体统数据库中各个表格的设计结果如下面的几个表格所小。没高歌表小在数据库中的一个表。表1为考勤管理表kp表考勤管理表格列名数据类型可否为空Emp-noVARCHAR2(6NOTN ULL员工号(主键—一)qq-dateVARCHAR2(6)NOTNUL L时间(主键二)qq-daynumberNUMBERQ, 1)NULL缺勤天数qq-IlbVARCIIAR2(3)NULL缺勤类别
- 2021-05-06下载
- 积分:1
opencv2.4.9源码分析——SIFT
详细介绍SIFT算法,opencv的SIFT源码分析,以及应用实例SIFT算法进行了改进,通过对两个相邻高斯尺度空间的图像相减,得到个DoG(高斯差分,Difference of gaussians)的响应值图像Dx,y,σ)来近似LoGD(x,y, o)=(G(x,y, ko)-G(x,y,o)O1(x,y)=L(x,y, ko)-L(x,y,a(5)其中,k为两个相邻尺度空间倍数的常数。可以证明DoG是对LoG的近似表示,并且用DoG代替LoG并不影响对图像斑点位賀的检测。而且用DoG近似LoG可以实现下列好处:第一是LoG需要使用两个方向的高斯二阶微分卷积核,而DoG直接使用晑斯卷积核,省去了卷积核生成的运算量;第二是DoG保留了个高斯尺度空间的图像,因此在生成某一空间尺度的特征时,可以直接使用公式1(或公式3)产生的尺度空间图像,而无需重新再次生成该尺度的图像:第三是DoG具有与LoG相同的性质,即稳定性好、抗干扰能力强。为了在连续的尺度下检测图像的特征点,需要建立DoG金宇塔,而DoG金宁塔的建立又离不开髙斯金字塔的建立,如下图所小,左侧为高斯金字塔,右侧为DoG金字塔:(nextoctave)Scale(firstoctave)Difference ofaussianGaussian(DOG)图1高斯金字塔和DoG金字塔高斯金字塔共分O组( Octave),每组又分S层( Layer)。组内各层图像的分辨率是相同的,即长和宽相同,但尺度逐渐增加,即越往塔顶图像越模糊。而下·组的图像是由上组图像按照隔点降采样得到的,即图像的长和宽分别减半。高斯金字塔的组数O是由输入图像的分辨牽得到的,因为要进行隔点降采样,所以在执行降釆样生成高斯金字塔时,一直到不能降采样为止,但图像太小又亳无意义,因此具体的公式为:0=| log2 min(x,y)-2」(6)其中,X和Y分别为输入图像的长和宽,L」衣示向下取整。金字塔的层数S为:(7)LoWe建议s为3。需要注意的是,除了公式7中的第一个字母是大写的S外,后面出现的都是小写的s髙斯金字塔的创建是这样的:设输入图像的尺度为0.5,由该图像得到高斯金字塔的第0组的第0层图像,它的尺度为m,我们称m为基准层尺度,再由第0层得到第1层,它的尺度为ko,第2层的尺度为k2o,以此类推。这里的k为:(8)我们以s=3为例,第0组的6(s+3=6)幅图像的尺度分别为:0,ko0,k2∞,k3o0,k∞o,k5o(9)写成更一般的公式为:d=or∈[0,,s+2](10)第0组构建完成后,再构建第1组。第1组的第0层图像是由第0组的倒数第3层图像经过隔点采样得到的。由公式10可以得到,第0组的倒数第3层图像的尺度为k∞o,k的值代入公式8,得到了该层图像的尺度正好为2∞,因此第1组的第0层图像的尺度仍然是2∞。但由于第1组图像是由第0组图像经隔点降采样得到的,因此相对于第1组图像的分辨率来说,第θ层图像的尺度为ω,即尺度为2σ是相对于输入图像的分辨率来说的,而尺度为∞是相对丁该组图像的分辨率来说的。这也就是为什么我们称0为基准层尺度的原因(它是每组图像的基准层尺度)。第1组其他层图像的生成与第0组的相同。因此可以看出,第1组各层图像的尺度相对于该组分辨率来说仍然满足公式10。这样做的好处就是编程的效率会提高,并且也保证∫高斯金字塔尺度空间的连续性。而之所以会出现这样的结果,是因为在参数选择上同吋满足公式7、公式8以及对上·组倒数第3层图像降釆样这三个条件的原因。那么第1组各层图像相对」输入图像来说,它们的尺度为:=2k00r∈[0,,S-2该公式与公式10相比较可以看出,第1组各层图像的尺度比第0组相对应层图像的尺度人了一倍。高斯金字塔的其他组的构建以此类推,不再赘述。下面给出相对于输入图像的各层图像的尺度公式:o,)=2k∞O∈[0,O-1l,r∈[0,,+2(12)其中,O表示组的坐标,r表示层的坐标,a为基准层尺度。k用公式8代入,得:2O∈[0,…0-1],r∈[0,…,s+2](13)在高斯金字塔中,第0组第∂层的图像是输入图像经髙斯模糊后的结果,模糊后的图像的高频部分必然会减少,因比为了最大程度的保留原图的信息量,LoWe建议在创建尺度空间前首先对输入图像的长宽扩展一倍,这样就形成了高斯金字塔的第-1组。设输入图像的尺度为0.5,那么相对于输入图像,分辨率护人一倍后的尺度应为1,由该图像依次进行高斯平滑处理得到第-1组的各个层的尺度图像,方法与其他组的一样。由于增加」第-1组,因此公式13重新写为(0∈[-1,0,…,0-1],r∈[0,…,s+2](14)DoG金字塔是由高斯金字塔得到的,即高斯金宁塔组内相邻两层图像相减得到DoG金字塔。如髙斯金字塔的第0组的筼0层和第1层相减得到DoG金字塔的第0组的箅0层图像,高斯金字塔的第0组的第1层和第2层相减得到υσG金字塔的第θ组的第1层图像以此类推。需要注意的是,高斯金字塔的组内相邻两层相减,而两组间的各层是不能相减的因此高斯金字塔每组有s+3层图像,而DoG金宁塔每组则有s+2层图像。极值点的搜索是在DoG金字塔内进行的,这些极值点就是候选的特征点。在搜索之前,我们需要在DoG金字塔内剔除那些像素值过小的点,因为这些像素具有较低的对比度,它们肯定不是稳定的特征点。极值点的搜索不仅需要在它所在尺度空间图像的邻域内进行,还需要在它的相邻尺度空间图像内进行,如图2所示。每个像素在它的尺度图像中一共有8个相邻点,而在它的下一个相邻尺度图像和上个相邻尺度图像还各有9个相鸰点(图2中绿色标注的像素),也就是说,该点是在3×3×3的立方体内被包围着,因此该点在DoG金字塔内一共有26个相邻点需要比较,来判断其是否为极大值或极小值。这里所说的相邻尺度图像指的是在同个组内,因此在DoG金字塔内,每一个组的第0层和最后一层各只有一个相邻尺度图像,所以在搜索极值点时无需在这两层尺度图像内进行,从而使极值点的搜索就只在每组的中间s层尺度图像内进行。搜索的过程是这样的:从每组的第1层开始,以第1层为当前层,对第1层的DoG图像中的每个点取·个3×3×3的立方体,立方体上下层分别为第0层和第2层。这样,搜索得到的极值点既有位置坐标(该点所在图像的空间坐标),又有尺度空间坐标(该点所在层的尺度)。当第1层搜索完成后,再以第2层为当前层,其过程与第1层的搜索类似,以此类推。Scale图2DoG中极值点的搜索2、特征点的定位通过上一步,我们得到了极值点,但这些极值点还仅仅是候选的特征点,因为它们还存在一些不确定的因素。首先是极值点的搜索是在离散空间内进行的,并且这些离散空间还是经过不断的降采样得到的。如果把采样点拟合成由面后我们会发现,原先的极值点并不是真正的极值点,也就是离散空间的极值点并不是连续空间的极值点。在这里,我们是需要精确定位特征点的位置和尺度的,也就是要达到亚像素精度,因此必须进行拟合处。我们使用泰勒级数展开式作为拟合函数。如上所述,极值点是·个三维矢量,即它包括极值点所在的尺度,以及它的尺度图像坐标,即=(x,y,o),因此我们需要三维函数的泰勒级数展开式,设我们在=(x0,y,)处进行泰勒级数展开,则它的矩阵形式为:602f02f02fdxax day dao02f02f02faxdy ayay ayaallly-yol2f02f02fOrdo aydo dodo(15)公式15为舍去高阶项的形式,而它的矢量表示形式为f(X)=f(X0)+o¥(X-x0)+7(x-x0)a F(X-Xo(16)在这里表示离散空间卜的插值中心(在离散空问内也就是采样点)坐标,表示拟合后连续空间下的插值点坐标,设ⅹ=Ⅹ-Xn,则X表示相对于插值中心,插值后的偏移量。因此公式16绎过变量变换后,又可写成:f(x)=f(X0)+yX+XTⅩX20X2(17)对上式求导,得af (x a02f0ox ox+2 ax2+axa80f.02fXaxaX2(18)让公式17的导数为0,即公式18为0,就可得到极值点下的相对于插值中心的偏移量:aX2 ax(19)把公式19得到的极值点带入公式17中,就得到了该极值点下的极值Tf(X)=f(X0)+af02f10f)a2f/02f-1of2 8X2 0X/0X28X2dXf(X0)+H打×1ora2Ta2f-ra2fa2f-1 af2 dx dx2dx2dx2 dXa f02f-10f∫(X0)+dF×f7a22 ax ax2 axaflf(Xo)+xx+2 0X(-X)18Ff(X0)+2 aX(20)对于公式19所求得的偏移量如果大」0.5(只要x、y和σ任意一个量大于0.5),则表明插值点已偏移到了它的临近的插值中心,所以必须改变当前的位置,使其为它所偏移到的插值中心处,然后在新的位置上重新进行泰勒级数插值拟合,直到偏移量小于0.5为止(x、y和σ都小于0.5),这是一个迭代的工程。当然,为了避免无限次的迭代,我们还需要设置个最人迭代次数,在达到了迭代次数但仍然没有满足偏移量小于0.5的情况下,该极值点就要被剔除掉。另外,如果由公式20所得到的极值f(X过小,即f(X1,则Tr(H)2(a+β)2(+β)2(y+1)2Det(h)2(25)上式的结果只与两个特征值的比例有关,而与具体的特征值无关。我们知道,当某个像系的矩阵的两个特征值相差越大,即γ很大,则该像素越有可能是边缘。对于公式25,当两个特征值相等时,等式的值最小,随着γ的增加,等式的值也增加。所以,要想检查主曲率的比值是否小于某一阈值y,只要检査下式是否成立即可:Tr(H)(y+1)Det(h)(26)对于不满足上式的极值点就不是特征点,因此应该把它们剔除掉。Lowe给出γ为10在上面的运算中,需要用到有限差分法求偏导,在这里我们给出具体的公式。为方便起见我们以图像为例只给出二元函数的实例。与二元函数类似,三元函数的偏导可以很容易的得到设f(i,是ν轴为i、x轴为j的图像像素值,则在(j点处的一阶、二阶及二阶混合偏导af f(i, j+1)-f(i, j0ff(i+1,j)-f(-1,ax2h2h(27)ff(+1)+f(-1)-2f(,j)a2ff(+1,j+f(-1,j)-2f(i,j)hh(28)2ff(-1,j-1)+f(i+1,j+1)-f(i-1,+1)-f(i+1,-1)dx d(29)由丁在图像中,相邻像素之问的间隔都是1,所以这里的h3、方向角度的确定经过上面两个步骤,一幅图像的特征点就可以完全找到,而且这些特征点是具有尺度不变性。但为了实现旋转不变性,还需要为特征点分配一个方向角度,也就是需要根据检测到的特征点所在的高斯尺度图像的局部结构求得一个方向基准。该高斯尺度图像的尺度a是已知的,并且该尺度是相对于高斯金字塔所在组的基准层的尺度,也就是公式10所表示的尺度。而所谓局部结构指的是在高斯尺度图像中以特征点为中心,以r为半径的区域内计算所有像素梯度的幅角和幅值,半径r为(30)其中a就是上面提到的相对于所在组的基准层的高斯尺度图像的尺度。像素梯度的幅值和幅角的计算公式为:m(xy)=√(x+1,y)-L(x-1,y)2+(L(x,y+1),L(x,y-1)2(31)L(x,y+1)-L(x,y-1)o(x, y)=arctanL(x+1,y)-L(x-1,y)(32)因为在以〃为半径的区域内的像素梯度幅值对圆心处的特征点的贡献是不同的,因此还需要对幅值进行加权处理,这里采用的是高斯加权,该高斯函数的方差Cm为:Om=1.50(33)其中,公式中的σ也就是公式30中的σ在完成特征点邻域范围内的梯度计算后,还要应用梯度方向直方图来统计邻域內内像素的梯度方向所对应的幅值大小。具体的做法是,把360°分为36个柱,则每10°为一个柱,即0°~9为第1柱,10°~19为第2柱,以此类推。在以r为半径的区域内,把那些梯度方向在0~9°范围内的像索找出来,把它们的加权后的梯度嘔值相加在一起,作为第1柱的柱高;求第2柱以及其他柱的高度的方法相同,不再赘述。为了防止某个梯度方向角度因受到噪声的干扰而突变,我们还需要对梯度方向直方图进行平滑处理。 Opencv2.4.9所使用的平滑公式为:H()~h(-2)+h(+2)4×(h(-1)+h(+1)),6×h()i=0...15161616(34)其中h和H分别表示平滑前和平滑后的直方图。由于角度是循环的,即0°=360°,如果出现h(),j超出了(0,…,15)的范围,那么可以通过圆周循环的方法找到它所对应的、在0°~360°之间的值,如h(-1)-h(15)这样,直方图的主峰值,即最高的那个柱体所代表的方向就是该特征点处邻域范围内图像棁度的主方向,也就是该特征点的上方向。由于柱体所代表的角度只是一个范围,如第1柱的角度为0~9°,因此还需要对离散的梯度方向直方图进行插值拟合处理,以得到更精确的方向角度值。例如我们凵经得到了第i柱所代表的方向为特征点的主方向,则拟合公式为:H(i-1)-H(i+1)B=i+=0,…152×(H(-1)+H(i+1)-2×H()(35)O=360-10xB(36)其中,H为由公式34得到的直方图,角度6的单位是度。同样的,公式35和公式36也存在着公式34所遇到的角度问题,处理的方法同样还是利用角度的圆周循环。每个特征点除了必须分配一个主方向外,还可能有一个或更多个辅方冋同,增加辅方向的目的是为了增强图像匹配的鲁棒性。辅方向的定义是,当存在另个柱体高度大于主方向柱体高度的80%时,则该柱体所代表的方向角度就是该特征点的辅方向。在第2步中,我们实现∫用两个信息量来表小一个特征点,即位置和尺度。那么经过上面的计算,我们对特征点的表示形式又增加了个信息量一一方向,即(x,y,o,6)。如果某个特征点还有一个辅方向,则这个特征点就要用两个值来表示——(x,y,,B1)和(x,y,,02),其中O1表示主方向,O2表示辅方向,而其他的变量x,y,不变。4、特征点描述符生成
- 2020-06-25下载
- 积分:1