日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

基于C++和Opencv2的虹膜识别工程代码解析

發布時間:2024/3/26 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于C++和Opencv2的虹膜识别工程代码解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、說明

二、虹膜識別工程結構

1. OsiCircle類

2. OsiStringUtils類

3. OsiManager類

4. OsiEye類

5. OsiProcessings類

三、虹膜識別運行代碼

1. loadConfiguration模塊

2. showConfiguration模塊

3. run模塊

四、后續


一、說明

本文主要介紹基于C++和Opencv2的虹膜識別代碼,使用的虹膜識別工程見:基于C++和Opencv2的虹膜識別工程。以工程結構和運行過程為參考,介紹整個虹膜識別過程。

二、虹膜識別工程結構

具體的工程結構如下圖所示,含有5個類文件:OsiCircleOsiEyeOsiManagerOsiProcessingsOsiStringUtils。調用關系如圖所示,OsiCircle是基礎圓類,OsiStringUtils是string類型基本處理類,OsiManager是主調用類,OsiEye是人眼虹膜處理類,OsiProcessings是主處理類;OsiCircleOsiStringUtils用于整個工程中,OsiManager調用OsiEyeOsiEye調用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 showConfigurationrun三個模塊。下面回一一對每個模塊的代碼進行分析。

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中的keyvalue“=”右邊配置參數,與創建一個OsiManager類對象調用構造函數初始化參數一一對應。

?

參數含義表和對應的配置代碼如下圖:

? ?

2)讀取圖像文件process_CASIA-IrisV2.txt。圖像名稱存放格式如下圖所示,一行表示一張圖片的名稱。具體代碼如下圖所示,讀取文件中的每行到變量mListOfImages中。

?? ?

3)從OsirisParam/filters.txt配置Gabor濾波器值。Gabor濾波器,用于邊緣提取,感興趣可以參考:解讀Gabor濾波器Gabor濾波器值存放格式如下圖所示,共有6個濾波器,包含9*159*279*51的濾波器各一對,每對濾波器的值對應位置互為正負數,每個濾波器取值為:±0.25±0.5±1。對應代碼為void OsiManager::loadGaborFilters ( )函數,從文件中讀取每個濾波器存到Mat型變量mGaborFilterstd::vector<CvMat*>)中。

? ?

4)從OsirisParam/points.txt配置256個匹配點。行取值為6121824303642488個值,差值為6;列取值為72339557187103119135151167183199215231247263279295311327343359375391407423439455471487503,共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次異或操作并取和歸一化(01)之間,選取20次中歸一化和最小的作為最后的匹配分數。

?

四、后續

整個工程代碼中,最主要的部分在于OsiProcessings類中的虹膜分割、歸一化、編碼和匹配。原代碼中的英文注釋比較詳細,有時間后續會進行一一講解。

?

總結

以上是生活随笔為你收集整理的基于C++和Opencv2的虹膜识别工程代码解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。