,
(信息工程學院,浙江 杭州 310023)
自動指紋識別系統(tǒng)在過去的50年里不斷地被研究開發(fā),其中仍然有很多開放性的研究課題,特別是當獲取的指紋圖像質(zhì)量較差,指紋特征不明顯的時候.為了能夠準確地從指紋圖像中獲取指紋特征,指紋圖像增強成為了自動指紋識別系統(tǒng)中必不可少的一個步驟.已知自適應指紋圖像增強系統(tǒng)在等誤差率、認假率和不匹配率等方面都有很好的表現(xiàn)[1-2].其中局部指紋頻譜特性估計是該指紋圖像增強系統(tǒng)的核心組成部分,由于其需要對大量的局部指紋圖像進行頻譜特性估計,因此僅僅利用CPU進行運算需要消耗較長時間.
近年來,GPU已經(jīng)發(fā)展演變成了一種高并行度,多線程的多核處理器,它強大的計算能力和極大的內(nèi)存帶寬讓其不再局限于傳統(tǒng)的3D圖像處理,而是更多地被廣泛用于通用并行計算[3-5].由英偉達公司開發(fā)的CUDATM運算平臺為開發(fā)人員提供了一套針對GPU的編程模型,使得GPU具備了解決復雜計算問題的能力,同時大大簡化了GPU編程[6].如今通過CUDA的GPU編程已經(jīng)在信號處理領域,特別是圖像處理領域被廣泛應用[7-9].此外,由于不同局部指紋的頻譜估計之間具有高度的獨立性,非常適合多線程實現(xiàn).因此,將該基于GPU的并行實現(xiàn)方法,應用于已知指紋增強系統(tǒng),以提高已知指紋增強系統(tǒng)局部指紋頻譜估計的運算速度.
由于局部指紋在頻譜特性上相似于一個帶噪聲的正弦信號,因此只需要模擬正弦信號尋找主頻率的方式便可以估計出局部指紋的紋線頻率及其方向,即局部指紋的頻譜特性.所要優(yōu)化的局部指紋頻譜特性估計大致可以分為3個步驟[1]:
步驟1采用SMQT對局部指紋進行動態(tài)范圍調(diào)整,增強局部指紋的對比度,以解決局部指紋可能存在的對比度較差問題[10],即
IH(m1,m2)=SMQT{IL(m1,m2)}
(1)
式中:IL(m1,m2)為一張M1×M2的局部指紋圖像;IH(m1,m2)為對比度增強后的局部指紋圖像,其中m1∈[0,M1-1],m2∈[0,M2-1].
步驟2對增強后局部指紋圖像IH(m1,m2)進行幅度譜計算,即
G(ω1,ω2)=|J{IH(m1,m2)}|
(2)
式中J{IH(m1,m2)}為對局部指紋圖像IH(m1,m2)的二維傅里葉變換.
步驟3遍歷幅度譜G(ω1,ω2),獲得幅度峰值Pi,從而篩選獲得最大峰值PD及其對應的頻率ωD,x與ωD,y,然后利用峰值計算峰度因子,用于判斷局部指紋噪聲大小,即
(3)
式中N為幅度譜中所含的峰值數(shù).由于每個局部指紋含有一組頻譜特征,因此整個指紋圖像可以用特征圖PD(n1,n2),ωD,x(n1,n2),ωD,y(n1,n2)和Q(n1,n2)來表示.
從圖像處理到通用并行計算,GPU強大的運算能力得益于其單指令多線程的體系架構,這種體系架構能夠讓程序員直接為線程編寫程序,從而能夠實現(xiàn)線程間獨立計算,同時也能進行線程之間的相互協(xié)調(diào)通信,英偉達公司推出的CUDATM便是一種通用的并行計算架構.在CUDA架構中,GPU可以被看成是一組流處理器,配備有多種形式的內(nèi)存,如全局內(nèi)存、局部內(nèi)存、紋理內(nèi)存和共享內(nèi)存等.一個多線程程序被劃分成多個CUDA程序塊,不同程序塊之間相互獨立,被自動平均分配給GPU的不同流處理器,如圖1所示.
圖1 多線程CUDA編程與GPU流處理器Fig.1 Multi-threaded CUDA programing with GPU streaming multiprocessors
此外CUDA運算平臺還為GPU提供了一套編程模型(圖2),在CUDA編程模型中,程序員可以在CPU端以調(diào)用核函數(shù)的方式來來訪問GPU,并且可以指定需要調(diào)用的線程塊數(shù)量以及線程塊中的線程數(shù)量.這些線程會組織成三級層次結構,線程組成線程塊,線程塊在線程格上運行,每一個線程和線程塊都會有相應的內(nèi)置標識符threadId和blockId來進行標識.
圖2 CUDA編程模型Fig.2 CUDA programing model
首先將整個指紋圖像劃分成一定數(shù)量的局部指紋圖像,然后調(diào)用相應數(shù)量的CUDA線程塊來實現(xiàn)并行處理不同局部指紋的功能.此外,對于其中某一塊,相應CUDA線程塊中的多個線程會被調(diào)用,來對其中的SMQT,2DFFT和特性估計進行并行優(yōu)化.由于整個處理過程中指紋圖像具備只讀的屬性,因此采用CUDA紋理內(nèi)存來存儲指紋圖像以提高讀取效率.圖3簡略地表示了線程塊B(i,j)處理相應局部指紋圖像IL(i,j)的過程,采用(i,j)標識線程塊和局部指紋圖像,即i和j分別表示局部指紋圖像所在行數(shù)與列數(shù).
圖3 局部頻譜特性估計模型Fig.3 The model of local spectrum estimation
針對SMQT中大量的平均值計算[10],采用順序尋址的CUDA并行歸約算法來對其中的求和過程進行優(yōu)化,圖4簡要地闡述了8個數(shù)并行規(guī)約求和的過程,首先利用4個線程將數(shù)據(jù)兩兩求和,并將求和結果存儲于共享內(nèi)存中.然后再利用其中兩個線程將求和結果再次兩兩相加,以此類推,最后這8個數(shù)的和被存儲于共享內(nèi)存的第一塊單元中.顯然,如果需要對N個值進行求和,求和的步驟便可以從單線程的N-1次縮減到log2N次.
圖4 順序尋址的并行規(guī)約算法Fig.4 The model of local spectrum estimation
由于CUDA提供的cuFFT庫是一個只能在主機端調(diào)用的應用接口,并不能在設備端調(diào)用,因此只能重新實現(xiàn)設備端的2DFFT,圖5簡要地闡述了多線程2DFFT的實現(xiàn)過程.每一個CUDA線程塊中的線程都會對局部指紋的某一行數(shù)據(jù)進行一維FFT運算,并將運算結果按轉置的方式存儲.等到所有線程都完成運算,再一次并行地對每一行數(shù)據(jù)進行一次一維FFT,其轉置后的運算便是最終2DFFT的結果.
圖5 2DFFT的并行實現(xiàn)過程Fig.5 The model of local spectrum estimation
利用CUDA線程塊中的多線程,對局部指紋圖像的幅度函數(shù)進行并行峰值遍歷搜索.每個線程都會定義一個3×3的矩陣,用以判斷幅度值在其領域內(nèi)是否為最大值,從而獨立完成對一行數(shù)據(jù)的峰值搜索.因此對于一個N1×N2的二維幅度函數(shù),CUDA線程塊中的N1個線程被充分調(diào)用.圖6闡述了一個線程完成一行數(shù)據(jù)峰值遍歷搜索的過程,其中每一行的最大峰值都會被保存下來,用于獲得最終的頻譜峰值及其坐標的同時計算峰度因子.峰度因子的計算式為
(4)
圖6 一行數(shù)據(jù)的峰值搜索過程Fig.6 Peak search for a row of magnitude values
式中PD,M為每行最大峰值PD,i的最大值.由于整個過程對局部指紋的幅度函數(shù)只存在讀取操作,因此不同線程之間完全并行,不需要進行內(nèi)存加鎖使得不同線程之間串行化.
實驗在Intel Xeon E5-1620 3.5 GHz 的CPU,NVIDIA Geforce GTX 1080 的GPU以及8G DDR4 內(nèi)存的硬件環(huán)境下完成,利用Visual Studio將基于GPU的局部指紋頻譜估計接入完整的指紋圖像增強系統(tǒng)并生成可執(zhí)行文件.然后通過Matlab調(diào)用的方式,將FVC2000數(shù)據(jù)庫中不同傳感器來源的指紋圖像輸入測試.結果顯示:將該基于GPU的局部指紋頻譜估計應用于已知指紋增強系統(tǒng)中,指紋增強效果顯著[1].以其中3個樣本為例,效果如圖7所示,其中圖7(a~c)為原始指紋圖像,圖7(d~f)為分別對應的增強指紋圖像.
圖7 基于GPU指紋圖像樣本增強效果Fig.7 The examples of the fingerprint enhancement based on GPU
實驗還對數(shù)據(jù)庫中所有指紋的局部頻譜估計執(zhí)行時間進行統(tǒng)計,根據(jù)3種尺寸進行分類,得出相同尺寸指紋樣本局部頻譜特性估計執(zhí)行時間的平均值,結果如表1所示, 其中加速比是指CPU平均執(zhí)行時間與GPU平均執(zhí)行時間的比值.實驗結果表明:采用該基于GPU的實現(xiàn)方法,局部指紋頻譜特性估計的計算時間顯著減少,并且隨著指紋尺寸的增加,效果越明顯.
表1局部指紋CPU頻譜估計與GPU的執(zhí)行時間比較
Table1ThecomparisonoftheCPUbasedlocalfingerprintspectrumestimatorwithGPUbasedlocalfingerprintspectrumestimator
指紋尺寸CPU平均執(zhí)行時間/msGPU平均執(zhí)行時間/ms加速比324×2401 664.43989.701.68300×3002 089.731 099.611.90364×2562 144.611 065.922.01
針對已知指紋圖像增強系統(tǒng)基于CPU實現(xiàn)執(zhí)行時間較長的缺點[1],提出了一種基于GPU的局部指紋頻譜特征估計的實現(xiàn)方法,利用GPU多核心多線程的特點對不同局部指紋圖像進行并行化處理,并對其中單個局部指紋處理中的SMQT,2DFFT以及特性估計3部分進行了并行優(yōu)化,最后利用CUDA平臺成功將其實現(xiàn). 實驗結果表明:通過該基于GPU并行運算的實現(xiàn)方法,已知指紋圖像增強系統(tǒng)局部指紋頻譜特性估計的執(zhí)行時間顯著減少,因此將該方法應用于這個已知指紋圖像增強系統(tǒng),可以提高其運行效率,使得該指紋圖像增強系統(tǒng)有更大的應用前景.