謝 陽 程艷云
(南京郵電大學人工智能學院、自動化學院 南京 210000)
通??山柚l票的兩個特點來進行定位:發票矩形框和發票打印字符。其中利用發票矩形框定位可以充分利用發票表格框線規整的特點來進行表格框線檢測并輸出坐標進行定位。劉長松[1],白偉[2]等提出,以增值稅發票矩形框作為定位基準,利用矩形框兩條平行的橫線和豎線,通過投影法確定它的四個頂點來實現矩形框的定位。對發票進行版面分析,根據矩形框與各項目區域相對位置固定的特點,確定各項目區域的位置。該方法容易受到印章等因素的影響,若矩形框上有印章,則使用投影法定位速度無法保證并且靠投影波形定位矩形框容易失敗。為了消除印章影響,文獻[3]提出,使用直線表達式,計算出矩形框四條直線的焦點,即可確定矩形框的四個頂點。通過檢測發票矩形框來實現定位,方法簡單容易實現,但是容易受到發票平整度的影響,并且需要計算直線方程和交點,影響檢測速度。宮義山等[4~5],劉洋[6],陳超[7]等出了基于模板匹配的發票定位算法,利用母版發票對待定位發票進行平方差匹配,不過這種方法由于需要提供模板發票并計算相關系數等多個參數,在沒有模板的情況下無法實現,而且在活動匹配時最佳匹配點不能完全吻合,所以會影響定位速度和準確性。
隨著越來越多的學者把精力放在如何把文字從復雜場景提取出來,因此除了利用發票矩形框進行定位之外,場景文本檢測技術也可被應用于發票文本提取。場景文本檢測是指將圖像中包含文本的區域提取出來,一般可分為三種方法:基于紋理的方法,基于連通域的方法和基于紋理與連通域相結合的方法[8~9]。不過這些方法都是基于自然場景的文本區域定位方法,沒有充分利用發票的標準規格特性,這樣使得在發票文本提取中沒有很高的效率。
在參考其他票據定位算法的基礎上,基于專利定位方法[10]的基礎上,通過觀察發票的框線特征提出一種基于形態學的定位算法,等高線檢測效果圖如圖1。
該定位算法具體操作如下:
1)對待處理發票進行常規預處理,包括灰度二值化,反轉等;
(7)外賣市場:近幾年隨著美團、餓了么等外賣軟件的興起,越來越多的商家開始入駐外賣平臺,學生的外賣需求也日益增大。
2)運用水平和垂直結構元分別對發票進行一維開操作;
3)圖片加權合并,輸出框線坐標集;
4)運用List篩選計算得到右下角坐標,然后以它為基準點計算待識別區域坐標;
5)裁剪識別區域。
整個定位流程圖如圖2。

圖2 方法流程圖
發票的預處理是發票識別前的一個規范化操作,在此進行發票的一些特殊處理即圖片矯正,二值化,高斯去噪。
雖然我們在掃描發票時盡可能擺正,但是仍然無法完全避免圖像傾斜的情況,為了避免因發票傾斜導致的定位不精確,我們需要在定位前對發票掃描圖片進行矯正。
本次矯正運用到了邊界跟蹤[11]的方法進行發票圖片輪廓提取,其次利用Susan角點檢測算法[12]。
1)在待矯正圖像上放置一個37個像素的圓形模板,模板在圖像上滑動,依次比較模板內各個像素點的灰度與模板核的灰度,判斷是否屬于USAN區域。判別函數如下:

2)統計圓形模板中和核心點有相似亮度值的像素個數n(r0):

D(r0)是r0為中心的圓形模塊。
3)使用如下角點響應函數。若某個像素點的USAN值小于某一特定閾值,該點被認為是初始角點,其中,g可以設定為USAN的最大面積的一半。

再利用Hough變換進行直線檢測,Hough變換將笛卡爾坐標空間中的線變換為極坐標空間中的點?;驹砣缦拢?3~14]。
在直角坐標系中,一條直線可以表示為

式中:k和b是待定參數,分別是斜率和截距。如果ρ為原點到直線上某點的距離,與x軸的正向夾角為θ,且θ?[-90°,90°]。直線可表示為

利用直角坐標系與極坐標空間的點線對偶關系來實現直線檢測,效果如圖3。

圖3 圖片矯正效果圖
初步二值化的主要目的是將發票的背景和發票圖像中的主邊框分離,由于背景灰度值和邊框灰度值相差一般很大,因此此處二值化時所使用的閾值并非一個非常嚴格的值,可以簡單地對當前票據進行灰度統計,選取與背景和邊框相應的灰度峰值,使用調和方法得到一個合適的值為背景和邊框的分界值。

圖4 二值化處理效果
腐蝕與膨脹是灰度圖像的初等形態學運算[15]。用B(x)代表結構元,E被定義為圖像空間。B為具有原點的結構元素,腐蝕的定義為

用B腐蝕E就是B完全包含在E中時,B的原點位置的集合。膨脹的定義為

一維開操作即對利用一維結構元SE對圖片進行先腐蝕再對結果進行膨脹的的形態學操作,腐蝕和膨脹結構元的選取很重要,在此我們選取一維矩形結構元,設圖片長度為L,參數e,在垂直等高線檢測時結構元選取為(1,EH)即寬為1,長為EH,在水平等高線檢測時選取(EH,1),EH參數為一個特定的參數選取不固定,它取決于文本圖像的平均字符高度,因此我們進行平均字符大小估計,在此提出一種基于計算周邊矩形連接元素高度的自動估計平均字符高度的方法,步驟如下:
1)選取一個隨機像素p(x,y),且它四個相鄰像素中至少有一個背景像素;
2)從像素p(x,y)開始,我們沿該像素連接的矩形元素輪廓進行操作;
3)重復1)、2)步,直到我們擁有最大的樣本量,并計算出像素周邊矩形連接元素的高度值集H;
4)取H中的最大值計為EH,這就是平均字符高度,示例如圖5所示。

圖5

本文算法是利用已經選取的一維結構元對圖片進行開操作,分別迭代3次,由此可得到水平和垂直的等高線圖片,如圖6所示,圖6(a)為水平結構元卷積后得到的垂直等高線,圖6(b)為垂直結構元卷積后得到的水平等高線。

圖6 水平和垂直的等高線
得到這兩張等高線圖片后,我們利用圖片加權算法進行Addweight,設置兩個圖片的權值相等,合并加權后,為使表格框線更加清楚,在此我們再次選取3*3結構元對加權合并后的圖片進行卷積。卷積后對圖片按位取反得到圖7,圖7就是完整的發票表格線框架。

圖7 合并加權后得到的發票表格框線
在得到發票表格框線圖后,利用OpenCV庫將坐標集以List方式進行輸出,取得每條直線段的頂點坐標集,坐標集以(x,y)坐標對形式存儲,如圖8所示。

圖8 坐標散點圖
將含有坐標集的多維數據進行降維成一維數組,取得其中最大的數即右下角的橫坐標,再進行奇數索引篩選取最大值得到右下角的縱坐標,這樣就獲得了右下角的坐標,通過以上方式獲得的(x,y)就是基準點坐標。再通過基準點坐標獲得待識別區域的坐標并進行剪裁得到待識別區域圖片。
本文代碼采用Python及其相關庫進行編寫,該系統用52張標準的印刷體電子稅發票作為樣本,在不需要模板的情況下分別與投影法,直線檢測法進行對比,對比結果如表1。

表1 對比結果
定位后的裁剪示例如圖9。

圖9 定位后的裁剪示例
以上都可以通過本文算法準確快速定位到需要識別的區域。
本文中提出的基于OpenCV形態學的發票定位技術,利用結構元水平和垂直雙卷積,再加權合并,從而定出發票的表格框線,并在確定框線后直接輸出框線坐標,通過坐標篩選找到基準點,有效提高了定位準確率和速度。這種方法排除了印刷體文字和發票上其他標識造成的定位困難,直接定位到發票表格內區域,而且不需要額外提供模板,從這種意義上講,該技術是非常通用的。特別是在中國,這種印刷體發票種類很多并且使用頻繁,這種基于等高線檢測的發票識別方法有較大的應用價值。