用FPGA實現(xiàn)優(yōu)化的指紋識別預(yù)處理算法
指紋識別作為生物識別的一種,因其具有唯一性和穩(wěn)定性,在身份識別上有著其他手段不可比擬的優(yōu)勢。隨著指紋傳感器性能的提高和價格的下降,指紋的采集越來越容易,指紋識別算法也已比較成熟。傳統(tǒng)的指紋識別系統(tǒng)一般以PC機和DSP為主要處理平臺。隨著人們對便攜設(shè)備的安全性要求越來越高,傳統(tǒng)的處理系統(tǒng)在功耗和處理速度及實時性上已經(jīng)不能滿足需要。
指紋識別系統(tǒng)在很大程度上依靠指紋圖像的質(zhì)量。在實際應(yīng)用中由于采集條件和采集設(shè)備的因素,采集到的指紋質(zhì)量比較差,含有大量噪聲,容易導(dǎo)致很多問題,影響后續(xù)處理的效果。所以在對指紋特征提取前,必須進行一系列的預(yù)處理,改善輸入指紋圖像的質(zhì)量,為后續(xù)處理奠定基礎(chǔ)。
本文在進行多方面比較和論證的基礎(chǔ)上,選取較優(yōu)化的預(yù)處理算法,作為FPGA指紋預(yù)處理平臺的算法。并用FPGA實現(xiàn)所選算法。
1 處理步驟
本系統(tǒng)采用XILINX公司Spartan 3E系列FPGA作為核心控制芯片,通過富士通公司的MBF200指紋傳感器實現(xiàn)對指紋圖像的采集,利用CPLD進行接口傳輸。FPGA通過讀取SDRAM中的指紋數(shù)據(jù),在其邏輯單元中進行灰度值歸一化、圖像分割、濾波、二值化、細化等,從而獲得重要的指紋圖像信息,以便與指紋模板庫進行對比。系統(tǒng)模塊圖如圖1。圖2是采集到的指紋圖像。
2 灰度值歸一化
指紋圖像歸一化的目的是把指紋圖像的平均灰度和對比度調(diào)整到一個固定級別上,以減少不同指紋圖像上的差異。歸一化并不改變指紋脊線和谷線的清晰度,只是消除樣本采集因外界因素造成的影響,為后續(xù)處理提供統(tǒng)一規(guī)格的圖像。
把圖像分為w×w的子塊,對于每一子塊求其灰度均值Mi和方差Vi。子塊灰度均值和方差的計算如下:
用FPGA實現(xiàn)上述算法的難點在于計算Var0。而計算期望的關(guān)鍵是求得每個像素的概率,即求子塊中每個像素出現(xiàn)的次數(shù)??紤]到FPGA的硬件結(jié)構(gòu)采用并行比較的方法可以方便求出I(i,j)的概率,本次設(shè)計w取為3。實現(xiàn)模塊采用圖3所示。
3 圖像分割
圖像識別的基礎(chǔ)是圖像分割,其作用是把反映物體真實情況的、占據(jù)不同區(qū)域的、具有不同特征的目標(biāo)區(qū)分開來,并形成數(shù)字特征。圖像分割的好壞直接影響后續(xù)圖像處理的效果,甚至決定其成敗。分割算法至今已有上千種,每年還有不少新算法出現(xiàn),然而大都基于圖像在像素級的兩個性質(zhì):不連續(xù)性和相似性。
筆者研究了Mehtre等提出的基于脊線方向的局部直方圖的分割方法;Rarha,chen和Jain提出的根據(jù)垂直于脊線方向的灰度方差區(qū)分前景與背景的方法;Maio和Maltoni提出的利用每一子塊的平均梯度來分割指紋圖像的前景與背景等多種方法。在此基礎(chǔ)上選擇圖像分割的經(jīng)典方法——自適應(yīng)的局部閾值圖像分割方法。該方法在合理選取閾值T的情況下,能較好地對圖像進行分割[5]。
但該算法本身沒有給出T的取值大小,所以對原算法進行改進后描述為:
(1)將待處理的圖像分成W×W的子塊(根據(jù)實驗選取W=8或16,對一般和較濕的圖像選為8,較干的選為16)
(2)求各塊圖像灰度值的標(biāo)準(zhǔn)方差:
式中G(m,n)表示塊內(nèi)各點的灰度值,Aver(i,j)表示某一塊的均值。
(3)根據(jù)式(4)確定閾值T
其中a是調(diào)整系數(shù),其值的選取根據(jù)圖像的質(zhì)量而定,一般可取為10~20,對質(zhì)量較好的圖像,a可取12左右,對較濕的圖像可取下限,對較干的圖像a取上限或更大。若a取得過大,則無法消除指紋區(qū)域外的噪聲點(背景被誤判為前景),若a取得過小,則會造成區(qū)域內(nèi)脊線斷裂(前景被誤判為背景),分割后的指紋圖像如圖4。
4 濾波
由于分割后的圖像質(zhì)量仍然不是很好,所以需要對其做進一步的處理,以使指紋圖像清晰,消除不必要的噪聲,以利于進一步的辨識。本系統(tǒng)采用中值濾波作為圖像預(yù)處理常用的方法,能有效地去除噪聲,平滑圖像。較之其他平滑濾波的方法如均值濾波等,中值濾波能夠在去噪的同時不模糊圖像的邊緣,較好地保持圖像的清晰度。
圖像中值濾波的定義:
其中g(shù)(x,y),f(x,y)為像素灰度值,即把f(x,y)領(lǐng)域的所有像素灰度值排序,求其處于中間位置的值代替f(x,y)。濾波窗口可以有各種不同的形狀,如線狀、方形、圓形等。本系統(tǒng)采用的是3×3的窗口。為了突出FPGA快速計算的優(yōu)點采用如圖5所示方式[6]。
圖6輸入為以f(x,y)為中心的9個數(shù)據(jù),A1、A2、A3、A4是3個比較器,輸出的值分別是第i-1行3個值、第i行3個值、第i+1行3個值的中值。以這3個中值再輸入A4就可以選出9個點的中值。這樣大大提高了算法的效率。
5 二值化
經(jīng)過中值濾波后的指紋圖像首先進行二值化變成二值圖像,才能進行細化處理。由于采集到的指紋圖像不同區(qū)域深淺不一,如對整幅圖像使用同一閾值進行二值分割,會造成大量有用信息的丟失。這里使用自適應(yīng)局部閾值二值化的思想,對每塊指紋圖像,選取的閾值應(yīng)盡量使該塊圖像內(nèi)大于該閾值的像素點數(shù)等于小于該閾值的像素點數(shù)。算法流程如圖7。
T為該塊指紋圖像的平均灰度值,Nh、Nl分別為第(k,l)塊指紋圖像中灰度值≥T和
6 細化
現(xiàn)有的細化算法存在很多問題,如細化不徹底、紋線吞噬、骨架偏離紋線中心等。本設(shè)計在對快速細化和改進的OPTA細化算法分析研究后,設(shè)計一種改進的細化算法。該算法與傳統(tǒng)的細化算法相比不破壞紋線的連接性,不會引起紋線的吞食,保護了紋線的特征。算法的主要思想是:利用快速細化算法速度快的優(yōu)點對指紋圖像進行一次細化。由于細化后的紋線大多不是單像素寬,再利用改進的OPTA細化算法對不是單像素寬的紋線進一步細化。算法的描述:
(1)遍歷整個指紋圖像,找出紋線的邊界點。
(2)判斷該邊界點是否應(yīng)該刪除。對邊界點P定義2個特征變量nsum和tsum:
如果P點同時滿足:tsum=2且nsum≠1,nsum6,則可將其刪除。
(3)繼續(xù)尋找下一個邊界點,直到?jīng)]有可刪除的點為止。
(4)得到的紋線很多不是單像素寬,從圖像的左上角開始掃描,每個像素(圖為P)均抽取出圖7所示的15個相鄰像素,把其中的8個相鄰像素(P1~P8)與圖9的消除模板比較,如果都不匹配,則P保留。
(5)重復(fù)上述過程,直到?jīng)]有一個像素值被改變?yōu)橹埂?br />
細化算法的硬件設(shè)計:細化算法的難點在于快速細化后的圖像和模板比較。這次設(shè)計的主要思想是把模板圖變?yōu)閿?shù)據(jù)流,只有用二進制數(shù)據(jù)流的方式才便于做比較。如圖10所示,黑色代表1,白色代表0。以第一行最左邊的模板為例,即可變?yōu)?00 111 010??紤]到FPGA的結(jié)構(gòu),用并行語句讓輸入的9位像素數(shù)據(jù)和模板二進制化數(shù)據(jù)進行關(guān)系運算操作,即可并行地和12個模板比較,大大提高了運算速度。FPGA模板匹配仿真圖如圖11,細化后的指紋圖像如圖12。
實驗結(jié)果表明,用FPGA完全能滿足指紋預(yù)處理的要求,而且提高了運算速度。FPGA的低功耗特點使其在便攜式設(shè)備上具有廣闊的應(yīng)用前景。
評論