基于C++和Opencv2的虹膜识别工程代码解析
目錄
一、說明
二、虹膜識(shí)別工程結(jié)構(gòu)
1. OsiCircle類
2. OsiStringUtils類
3. OsiManager類
4. OsiEye類
5. OsiProcessings類
三、虹膜識(shí)別運(yùn)行代碼
1. loadConfiguration模塊
2. showConfiguration模塊
3. run模塊
四、后續(xù)
一、說明
本文主要介紹基于C++和Opencv2的虹膜識(shí)別代碼,使用的虹膜識(shí)別工程見:基于C++和Opencv2的虹膜識(shí)別工程。以工程結(jié)構(gòu)和運(yùn)行過程為參考,介紹整個(gè)虹膜識(shí)別過程。
二、虹膜識(shí)別工程結(jié)構(gòu)
具體的工程結(jié)構(gòu)如下圖所示,含有5個(gè)類文件:OsiCircle、OsiEye、OsiManager、OsiProcessings、OsiStringUtils。調(diào)用關(guān)系如圖所示,OsiCircle是基礎(chǔ)圓類,OsiStringUtils是string類型基本處理類,OsiManager是主調(diào)用類,OsiEye是人眼虹膜處理類,OsiProcessings是主處理類;OsiCircle和OsiStringUtils用于整個(gè)工程中,OsiManager調(diào)用OsiEye,OsiEye調(diào)用OsiProcessings。
VS工程結(jié)構(gòu)顯示示意圖
各類之間的關(guān)系圖
1. OsiCircle類
定義圓類,包含方法和屬性如下圖所示。
2. OsiStringUtils類
?????? 有關(guān)string之間的基礎(chǔ)處理方法,所有方法以及對(duì)應(yīng)的含義如下圖所示
3. OsiManager類
?????? 主處理類,主要從配置文件中配置參數(shù)和調(diào)用OsiEye類中的人眼虹膜處理方法,所有方法如下圖所示。
4. OsiEye類
?????? 人眼類,虹膜識(shí)別最重要的部分,包含了載入配置參數(shù)、分割虹膜區(qū)域、虹膜區(qū)域歸一化和編碼處理、虹膜匹配識(shí)別等主調(diào)用函數(shù),該類由OsiManager類調(diào)用,然后調(diào)用OsiProcessings類中的方法。下圖是該類的所有方法,圖中不包括類的屬性。
5. OsiProcessings類
?????? 主處理類,虹膜的預(yù)處理、分割、歸一化、編碼、匹配模塊的底層實(shí)現(xiàn)代碼。該類由6個(gè)公有方法和12個(gè)私有方法共18個(gè)方法組成,如下圖所示,是整個(gè)虹膜識(shí)別模塊中最復(fù)雜的模塊。值得注意的是,方法normalizeFromContour為最新的OsirisV4.1版本,改自于OsirisV4版本的normalize方法,是OsirisV4升級(jí)到OsirisV4.1唯一不同且提高效果的方法。
三、虹膜識(shí)別運(yùn)行代碼
從虹膜識(shí)別調(diào)用代碼看,如下圖1所示,主要分為loadConfiguration、 showConfiguration和run三個(gè)模塊。下面回一一對(duì)每個(gè)模塊的代碼進(jìn)行分析。
1. loadConfiguration模塊
代碼在調(diào)用loadConfiguration方法之前,首先定義了一個(gè)類OsiManager類,OsiManager類在命名空間osiris中。創(chuàng)建一個(gè)OsiManager類對(duì)象,名稱為osi,調(diào)用該類的構(gòu)造函數(shù)OsiManager::OsiManager ( )。構(gòu)造函數(shù)主要是初始化參數(shù),這些參數(shù)和配置文件process.ini關(guān)聯(lián),下面會(huì)說到。
? ? ?
?????? 初始化參數(shù)后,調(diào)用loadConfiguration方法,主要分為讀取配置文件process.ini配置參數(shù)、讀取圖像文件process_CASIA-IrisV2.txt到變量mListOfImages中、從OsirisParam/filters.txt配置Gabor濾波器、從OsirisParam/points.txt配置256個(gè)匹配點(diǎn)。
(1)讀取文件process.ini配置參數(shù)。主要參數(shù)如下圖所示。每個(gè)參數(shù)的含義和對(duì)應(yīng)代碼如下圖所示, 圖中參數(shù)列中的名稱對(duì)應(yīng)變量mMapBool 、mMapInt 和mMapString中的key,value為“=”右邊配置參數(shù),與創(chuàng)建一個(gè)OsiManager類對(duì)象調(diào)用構(gòu)造函數(shù)初始化參數(shù)一一對(duì)應(yīng)。
?
參數(shù)含義表和對(duì)應(yīng)的配置代碼如下圖:
? ?
(2)讀取圖像文件process_CASIA-IrisV2.txt。圖像名稱存放格式如下圖所示,一行表示一張圖片的名稱。具體代碼如下圖所示,讀取文件中的每行到變量mListOfImages中。
?? ?
(3)從OsirisParam/filters.txt配置Gabor濾波器值。Gabor濾波器,用于邊緣提取,感興趣可以參考:解讀Gabor濾波器。Gabor濾波器值存放格式如下圖所示,共有6個(gè)濾波器,包含9*15、9*27和9*51的濾波器各一對(duì),每對(duì)濾波器的值對(duì)應(yīng)位置互為正負(fù)數(shù),每個(gè)濾波器取值為:±0.25、±0.5、±1。對(duì)應(yīng)代碼為void OsiManager::loadGaborFilters ( )函數(shù),從文件中讀取每個(gè)濾波器存到Mat型變量mGaborFilters(td::vector<CvMat*>)中。
? ?
(4)從OsirisParam/points.txt配置256個(gè)匹配點(diǎn)。行取值為6、12、18、24、30、36、42、48共8個(gè)值,差值為6;列取值為7、23、39、55、71、87、103、119、135、151、167、183、199、215、231、247、263、279、295、311、327、343、359、375、391、407、423、439、455、471、487、503,共32個(gè)值,差值為16。一個(gè)行值對(duì)應(yīng)32個(gè)列值,共8*32=256個(gè)點(diǎn)。
? ? ? ??
2. showConfiguration模塊
showConfiguration模塊方法為void OsiManager::showConfiguration ( ),功能是打印一些配置的參數(shù)信息,如下圖所示。
3. run模塊
?????? run模塊是虹膜識(shí)別的重要部分,主要分為:虹膜處理和匹配識(shí)別。
(1)虹膜處理。方法為:void OsiManager::processOneEye ( const string & rFileName , OsiEye & rEye )。
(2)匹配識(shí)別。對(duì)兩張圖片分別進(jìn)行虹膜處理操作,利用處理后結(jié)果先對(duì)NormalizedMask進(jìn)行處理得到total_mask;之后對(duì)其中一張圖片做shift變換處理,選取20個(gè)變換圖片;根據(jù)total_mask對(duì)變換圖片的IrisCodes分別和另一張圖片的IrisCodes進(jìn)行20次異或操作并取和歸一化(0,1)之間,選取20次中歸一化和最小的作為最后的匹配分?jǐn)?shù)。
?
四、后續(xù)
整個(gè)工程代碼中,最主要的部分在于OsiProcessings類中的虹膜分割、歸一化、編碼和匹配。原代碼中的英文注釋比較詳細(xì),有時(shí)間后續(xù)會(huì)進(jìn)行一一講解。
?
總結(jié)
以上是生活随笔為你收集整理的基于C++和Opencv2的虹膜识别工程代码解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件配置管理工程师(SCM)
- 下一篇: linux firefox applet