徐毓凱 楊國(guó)平
(上海工程技術(shù)大學(xué)機(jī)械與汽車(chē)工程學(xué)院 上海 201620)
隨著社會(huì)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)上銀行已逐漸成為人們?nèi)粘I畈豢苫蛉钡囊徊糠帧R苿?dòng)支付也成為目前社會(huì)主流的消費(fèi)方式[1],比如微信支付、支付寶等。隨之我們會(huì)將銀行卡和各種移動(dòng)支付軟件進(jìn)行綁定。在實(shí)際綁定過(guò)程中,目前的常用方式大多還是用戶(hù)自己手動(dòng)輸入銀行卡號(hào)碼,然而手動(dòng)輸入十幾位銀行卡號(hào)很慢且容易出錯(cuò),并且對(duì)部分視力不佳的中老年人很不友好,影響用戶(hù)體驗(yàn)。因此,銀行卡卡號(hào)的自動(dòng)識(shí)別功能將會(huì)給人們帶來(lái)很大的便利。
雖然目前的字符識(shí)別技術(shù)發(fā)展已較為成熟,比如文本識(shí)別[2~4]、車(chē)牌識(shí)別等[5~6],但銀行卡識(shí)別技術(shù)還沒(méi)有廣泛應(yīng)用于各大移動(dòng)支付平臺(tái)中。針對(duì)這一問(wèn)題和現(xiàn)狀,本文提出了一種基于Sobel算子的銀行卡識(shí)別算法。首先用基于Sobel邊緣檢測(cè)的方法提取銀行卡輪廓,然后獲取銀行卡卡號(hào)的數(shù)字區(qū)域,最后對(duì)數(shù)字區(qū)域的銀行卡號(hào)進(jìn)行識(shí)別。
Sobel算子是圖像處理中的算子之一[7~10],在影像處理和計(jì)算機(jī)視覺(jué)領(lǐng)域中常被用來(lái)做邊緣檢測(cè)。Sobel算子最早由美國(guó)科學(xué)家Irwin Sobel和Gary Feldman于1968年在史丹佛大學(xué)的人工智能實(shí)驗(yàn)室(SAIL)提出。為了紀(jì)念他們所做的貢獻(xiàn),用他們的名字命名了該算子。概念上,Sobel算子就是一個(gè)小且是整數(shù)的濾波器對(duì)整張圖片在水平及垂直方向上做卷積,因此它所需的運(yùn)算資源相對(duì)較少。另一方面,對(duì)于圖像中頻率變化較高的地方,它所得的梯度的近似值也比較粗糙。
目前在銀行卡的輪廓提取中較為常用的方法為基于Canny算子的邊緣檢測(cè)[11~13],Canny算子的運(yùn)用場(chǎng)景較多,它其中有很多參數(shù),通過(guò)對(duì)這些參數(shù)的變化會(huì)對(duì)算法的性能產(chǎn)生影響。本文的銀行卡輪廓定位利用Sobel算法替代Canny算法。獲取數(shù)字區(qū)域過(guò)程中采用增強(qiáng)對(duì)比度再利用特定閾值獲取數(shù)字區(qū)域替代了之前Canny算法的邊緣檢測(cè)。雖然Sobel算法只能檢測(cè)水平和垂直方向的邊緣,對(duì)于紋理較為復(fù)雜的圖像,其邊緣檢測(cè)效果不是很理想,但是對(duì)于銀行卡數(shù)字識(shí)別來(lái)說(shuō),邊緣紋理并不是很復(fù)雜,用Sobel算子進(jìn)行邊緣檢測(cè)反而計(jì)算簡(jiǎn)單,速度快。圖1為對(duì)原始灰度圖像分別基于Canny算子和Sobel算子所做的邊緣檢測(cè)圖。

圖1 Canny和Sobel邊緣檢測(cè)比較
Sobel算子做平面卷積的原理按所示方程(1)計(jì)算:

分別可得到水平和豎直兩個(gè)方向的亮度差分近似值。其公式如下:

其中A是指原圖像,Gx及Gy是指對(duì)水平和豎直兩個(gè)方向的計(jì)算。然后通過(guò)式(4)可以對(duì)圖像的梯度值進(jìn)行計(jì)算。

一般來(lái)說(shuō),我們生活中手機(jī)識(shí)別到的銀行卡都不是直接的灰度圖像(如圖2),圖像處理過(guò)程中我們會(huì)分別對(duì)彩色圖像的三個(gè)顏色通道進(jìn)行處理,計(jì)算量會(huì)很大且影響識(shí)別過(guò)程的速度,因此需要對(duì)彩色圖像進(jìn)行灰度處理。如圖3為對(duì)彩色銀行卡灰度處理后的圖像。

圖2 彩色銀行卡圖像

圖3 灰度處理圖像
然后我們需要對(duì)灰度圖像進(jìn)行頂帽操作。頂帽運(yùn)算也被稱(chēng)為“禮帽”運(yùn)算,它為原圖像與圖像作“開(kāi)運(yùn)算”的結(jié)果圖之差。其中開(kāi)運(yùn)算就是對(duì)圖像進(jìn)行先腐蝕后膨脹的過(guò)程,一般可以用來(lái)對(duì)圖像邊緣進(jìn)行平滑處理,消除一些小的毛刺和干擾。如圖4則為對(duì)圖3進(jìn)行頂帽操作后的圖像。

圖4 頂帽操作后的圖像
頂帽操作之后,我們就會(huì)用Sobel算子進(jìn)行邊緣檢測(cè),由于銀行卡邊緣背景信息比較簡(jiǎn)單且具有一定的規(guī)律性,因此本文只對(duì)x軸方向進(jìn)行了Sobel算子邊緣計(jì)算得到了待識(shí)別銀行卡的輪廓(見(jiàn)圖5),通過(guò)后文實(shí)驗(yàn)可以看出只做x軸方向的Sobel計(jì)算邊緣檢測(cè)效果也比較理想,并且計(jì)算簡(jiǎn)單,效率高。

圖5 sobel邊緣檢測(cè)
通過(guò)上文的實(shí)驗(yàn)可以得到銀行卡的輪廓信息,接下來(lái)我們需要獲取銀行卡數(shù)字區(qū)域。首先對(duì)銀行卡輪廓圖像進(jìn)行閉操作(先膨脹,再腐蝕)將卡號(hào)數(shù)字連在一起(見(jiàn)圖6),然后對(duì)圖6進(jìn)行二值化操作將目標(biāo)區(qū)域和背景區(qū)別開(kāi)來(lái)(見(jiàn)圖7),接著計(jì)算輪廓信息找到圖7中的所有輪廓得到圖8。

圖6 閉操作

圖7 二值化

圖8 目標(biāo)區(qū)域輪廓
如圖8得到的目標(biāo)區(qū)域的輪廓我們可以看出已經(jīng)找到的輪廓不僅包含數(shù)字區(qū)域,還包含一些例如銀行名稱(chēng),logo等一些干擾區(qū)域輪廓,因此我們需要從中排除這些干擾區(qū)域輪廓,得到只包含卡號(hào)數(shù)字的區(qū)域輪廓。經(jīng)過(guò)篩選輪廓,我們得到了四組數(shù)字輪廓區(qū)域,如圖9是得到的四組數(shù)字區(qū)域的其中一組。

圖9 數(shù)字區(qū)域
一般而言,銀行卡卡號(hào)識(shí)別的方法有很多,常用的主要有:模板匹配識(shí)別法[14]、神經(jīng)網(wǎng)絡(luò)識(shí)別法[15]、特征統(tǒng)計(jì)匹配識(shí)別法等[16]。本文的研究對(duì)象一般只有十幾位的阿拉伯?dāng)?shù)字,且每個(gè)數(shù)字0~9之間選擇,分布具有很強(qiáng)的規(guī)律,且本文考慮的情況需要快速的識(shí)別出銀行卡號(hào)信息,所以采用模板匹配字符識(shí)別法。
第一步要建立一個(gè)模版。首先導(dǎo)入一個(gè)包含0~9數(shù)字模板的圖像(圖10),將圖像分別進(jìn)行灰度處理和二值化(圖11),然后找到圖像的所有輪廓,遍歷每一個(gè)輪廓,每一個(gè)數(shù)字輪廓對(duì)應(yīng)每一個(gè)模板(圖12)。

圖10 包含模板數(shù)字圖像

圖11 灰度化及二值化

圖12 數(shù)字模板
第二步將待檢測(cè)銀行卡數(shù)字區(qū)域的每一個(gè)數(shù)字輪廓與第一步的10個(gè)數(shù)字模板分別比較,計(jì)算每一個(gè)待檢測(cè)數(shù)字與每一個(gè)模板的匹配得分,得分最高的模板即為待識(shí)別數(shù)字的正確模板。最終識(shí)別的結(jié)果如圖13所示。

圖13 識(shí)別結(jié)果
隨著互聯(lián)網(wǎng)和移動(dòng)支付技術(shù)的飛速發(fā)展,本文的研究對(duì)象也有著廣泛的應(yīng)用前景。目前對(duì)銀行卡號(hào)識(shí)別的相關(guān)文獻(xiàn)和參考資料非常少,一些開(kāi)發(fā)出銀行卡號(hào)識(shí)別技術(shù)的公司其識(shí)別技術(shù)及方法均未公開(kāi),銀行卡號(hào)的識(shí)別技術(shù)研究依然具有一定的實(shí)用性。
本文在現(xiàn)有的常用的銀行卡號(hào)識(shí)別技術(shù)上做了一些改善,將常用的Canny邊緣檢測(cè)方法改為了只做x軸方向的Sobel邊緣檢測(cè),檢測(cè)結(jié)果差別不大,但是計(jì)算簡(jiǎn)單,提高了識(shí)別過(guò)程中圖像預(yù)處理的效率。另外,針對(duì)銀行卡號(hào)具有固定字體的規(guī)律,使用模板匹配法對(duì)數(shù)字進(jìn)行識(shí)別,也一定程度上節(jié)省了時(shí)間。與此同時(shí),本文在一些方面仍有不足,需要進(jìn)一步的改進(jìn)。例如銀行卡圖像數(shù)據(jù)庫(kù)涉及到個(gè)人隱私問(wèn)題,本文并沒(méi)有對(duì)大量真實(shí)的銀行卡進(jìn)行驗(yàn)證。另外,在識(shí)別過(guò)程中沒(méi)有考慮銀行卡使用過(guò)程中的磨損問(wèn)題,實(shí)驗(yàn)對(duì)象采取的只是比較理想的圖像。雖然本文具有一定的不足,但是仍為銀行卡號(hào)識(shí)別提供了一定的參考意義。