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