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