姚鵬威,楊 炯,張愛梅,黃 曉
(鄭州大學 機械工程學院, 河南 鄭州 450001)
隨著計算機技術(shù)的高速發(fā)展,人類社會各方面信息的更新與傳遞也更加快捷和便利。然而,傳統(tǒng)紙質(zhì)表格存儲的信息不易管理與交換,已經(jīng)無法滿足人們的需求。市場上的識別軟件以識別純文字的居多,這些產(chǎn)品能完成簡單表格圖像的轉(zhuǎn)換,但無法很好地完成簡歷類、采購單類和信息采集類表格的轉(zhuǎn)換。有些產(chǎn)品需要自己的模板庫,對于復雜多變的簡歷類表格有時無法完成匹配,也就無法完成表格圖像中表格的提取。還有一些產(chǎn)品對圖像的要求較高,如圖像大小、位深度和分辨率。基于以上情況,本文將紙質(zhì)表格掃描成圖像并保存為圖片,利用圖像處理技術(shù)在Word中繪制可編輯的電子表格,從而大大提高信息錄入的效率,有利于實現(xiàn)從紙質(zhì)表格到電子表格的轉(zhuǎn)換。
本文采用BRISK方法實現(xiàn)表格圖像中特征點的檢測和描述,通過篩選提取表格的4個角點和圖像的4個角點,然后以圖像的4個角點為模板利用透視變換完成表格圖像的傾斜校正。接著對其進行圖像預處理,提取表格圖像的橫線和豎線并對其進行修復和細化。本文采用投影法完成表格橫線和豎線的細化,利用Shi-Tomasi角點檢測完成表格圖像中橫線和豎線端點坐標的提取。算法流程如圖1所示。
圖1 橫線和豎線端點提取算法流程
首先,進行光照均衡化預處理,目的是消除光照變化的影響,增強對比度,這樣有利于特征點的檢測。利用BRISK方法完成特征點的檢測,然后對特征點進行兩次篩選以去除干擾點。第1次篩選時,文字上的特征點數(shù)量多且密集,因此可以采用密度聚類的思想去除文字上的特征點,方法是以每一個特征點為圓心、給定距離為半徑建立累加器,當累加器的數(shù)量大于一定數(shù)量時,判斷為雜點,然后將其去除。第2次篩選時,首先判斷特征點是否存在重疊,若存在則對重疊的特征點進行特征響應值的判斷,保留特征響應值較強的特征點,刪除響應值小的特征點,從而達到去除雜點的目的。通過對傾斜表格分析可知:表格邊框4個角點的坐標x和y值要么最大要么最小,根據(jù)這一特征得到表格邊框的4個角點坐標,然后用表格邊框的4個角點坐標與表格圖像的4個角點坐標進行距離比較,從而完成表格邊框4個角點和圖像4個角點的一一對應。接下來利用透視變換實現(xiàn)表格圖像的傾斜校正。
1.1.1利用BRISK方法檢測特征點
BRISK方法[1]是BRIEF算法的改進,也是一種基于二進制編碼的特征描述子,對噪聲有很好的魯棒性,并且具有尺度不變性和旋轉(zhuǎn)不變性。它采用FAST算法進行特征點檢測,為了滿足尺度不變性,通過構(gòu)造圖像金字塔在多尺度空間內(nèi)進行特征點檢測。
在BRISK框架下,其尺度空間金字塔由n個組層(用ci表示)和n個組間層(用di表示)組成,其中i={0,1,2,…,n-1},組間層di在組層ci和ci+1之間,一般情況下n=4。c0層是原圖像,c1層是c0的2倍下采樣得到,c2層是在c1層的2倍下采樣得到,ci層是在ci-1層的2倍下采樣得到。組間層d0是由原始圖像c0層的1.5倍下采樣得到。d1層是d0的2倍下采樣得到,d2層是在d1層的2倍下采樣得到,di層是在di-1層的2倍下采樣得到。圖像尺度用t表示,則每個組層的尺度為[2-3]
t(ci)=2i
(1)
每個組間層的尺度為
t(di)=1.5×2i
(2)
尺度空間金字塔建立后,對每個組層和組間層采用FAST角點檢測算法檢測特征點。對檢測到的特征點進行非極大值抑制,去掉魯棒性差的特征點。比較它們的角點響應值即得分值,非特征點得分值為0。利用最小二乘法提取特征點的位置信息。本文以特征點檢測常用的兩種方法BRISK方法和SIFT方法[4]進行對比。由表1數(shù)據(jù)分析可知:BRISK方法檢測的特征點多,速度快,從角度偏差看SIFT檢測的特征點更準確,但是BRISK方法檢測的特征點并不影響表格橫線和豎線的提取,綜合考慮采取BRISK方法完成特征點的檢測。2種方法的對比分析見表1。
表1 BRISK方法和SIFT方法對比分析
1.1.2透視變換實現(xiàn)表格圖像校正
確定了表格邊框的4個角點和圖像邊框的4個角點后,以表格的4個角點為目標、圖像的4個角點為模板獲取變換矩陣,采用透視變換[5]達到校正表格圖像的目的。
分別以表格的4個角點為原點計算每個角點到圖像4個角點的距離,篩選出每組計算結(jié)果的最短距離,以此來確定表格4個角點的排列順序。這時表格的4個角點和圖像的4個角點就形成了一一對應的關(guān)系。
使用estimateAffine 2D方法生成變換矩為
(3)
特征矩陣R寫成數(shù)學表達式為
R=T·s+b
(4)
其中:T旋轉(zhuǎn)矩陣;s為縮放因子;b為平移矩陣。
(5)
a2+b2=s2(cosθ2+sinθ2)=s2
(6)
因為透視變換使用的變換矩陣為3×3矩陣,因此需要對R矩陣進行補齊。補齊后的R矩陣為:
(7)
為了便于提取表格圖像中表格橫線和豎線端點坐標,保證表格圖像矯正后大小保持不變。需要去除變換矩陣的縮放因子s,變換后的H矩陣為:
(8)
修改后的變換矩陣H使表格圖像居中,使用矩陣H對表格的4個角點進行變換,變換后4個角點統(tǒng)一到圖像的4個角點坐標所在的位置,使用逆變換求得移動變換矩陣H1。移動4個角點位置使表格圖像居中,完成表格圖像的傾斜校正。逆變換矩陣H1為:
(9)
表格圖像傾斜校正前后如圖2所示。
圖2 校正前后的表格圖像
圖像預處理的目的是消除圖像中冗雜的信息,增強有關(guān)信息的可檢測性和最大限度地簡化數(shù)據(jù)處理,從而有利于特征提取、圖像分割和識別。
首先,對表格圖像進行灰度化處理[6]。本文采用加權(quán)平均法對表格圖像進行灰度化處理,其計算公式為[7]:
f(i,j)=0.11R(i,j)+0.59G(i,j)+
0.3B(i,j)
(10)
式中:R、G、B分別表示彩色圖像中第i行第j列像素的紅綠藍3種顏色的亮度值;f(i,j)則是經(jīng)轉(zhuǎn)換得到的灰度圖像中第i行第j列像素的灰度值。
然后,進行二值化處理[8]。二值化處理的閾值采用最大類間方差法計算,它可以自適應地進行閾值選擇,即算法在實現(xiàn)過程中,讓閾值遍歷所有灰度級并計算其對應的類間方差。取使類間方差最大的灰度級作為二值化的閾值。
如果灰度閾值取值為T,則圖像像素按灰度級被分為2類:前景C0和背景C1。則最佳閾值的求值公式為:
(11)
式中:μ為圖像總平均灰度級;ω(T)表示C0類灰度級出現(xiàn)的概率;μ(T)表示C0類的平均灰度級。當方差σ2(T)最大時,前景和背景差異最大,灰度T為最佳閾值。
利用形態(tài)學處理方法[9]提取預處理后的表格圖像的橫線和豎線,通過采用最基本的兩個形態(tài)學操作膨脹和腐蝕,用不同的結(jié)構(gòu)元素實現(xiàn)對輸入圖像的處理以得到目標圖像。
檢測表格橫線結(jié)構(gòu)元素的Size寬度必須大于文字橫線的最大寬度,目的是去除文字和豎線保留橫線;檢測表格豎線結(jié)構(gòu)元素的Size高度必須大于文字豎線的最大高度,目的是去除文字和橫線保留豎線。然后,用以上兩種結(jié)構(gòu)元素分別對圖像的水平方向以及豎直方向做閉運算操作,以去除橫線或豎線以外的細節(jié)干擾,得到表格橫線和豎線并完成下一步表格橫線和豎線的修復和細化。
1.3.1修復表格橫線和豎線
圖3所示為4種表格豎線的缺損情況,黑色部分為值是0的像素點,其他部分是像素值為255的待填充像素點,以剖面線部分為例進行填充。
如圖3中(a)和(b)所示,遍歷方式為從左向右,從上向下。圖(a)待填充部分坐標為(i,j),(i-1,j)像素值為0,在i行向后搜索像素值不為255的點,若有,則待填充部分為0,即填充為黑色像素點,其他缺失的像素點按照相同的方式進行填充。圖(b)待填充坐標為(i,j),(i,j-1)和(i-1,j)像素值為0,則待填充部分像素值應為0,即待填充部分為黑色像素,其他缺失的像素點按照相同的方式進行填充。
對于圖3中(c)和(d)所示的情況,遍歷方式為從右向左,從下向上。圖(c)待填充部分坐標為(i,j),(i-1,j)像素值為0,沿i行向前搜索像素值不為255的點,若有,則待填充部分為0,即填充為黑色像素點,其他缺失的像素點按照相同的方式進行填充。圖(d)待填充坐標為(i,j)、(i,j-1)和(i-1,j)像素值為0,則待填充部分像素值應為0,即填充部分為黑色像素,其他缺失的像素點按照相同的方式進行填充。
圖3 直線修復示意圖
同理,完成表格橫線的4種缺損情況的修復。表格橫線和豎線的修復前后對比如圖4所示。
圖4 表格橫線和豎線修復前后對比
1.3.2利用投影法細化表格橫線和豎線
在進行表格橫線和豎線圖像處理時,需要對圖像進行細化,提取出圖像的骨架信息,即原圖像的中心線,有利于獲取更加有效的端點坐標。利用投影法細化表格橫線和豎線的算法流程如下:
步驟1對水平線進行從左向右投影。
步驟2從上向下遍歷投影圖最右端,獲取每條水平線豎直方向的起點的和終點,也就是水平線的線寬。遍歷圖像,當像素值不為0時,記錄該點位置為i,設定閾值k<15,建立累加器m。判定i+k行像素值是否為0。若不為0,累加器m+1,繼續(xù)循環(huán);若i+k點像素值為0時,結(jié)束循環(huán),輸出i和m,此時m為線寬。
步驟3若m為偶數(shù),記錄i+m/2行,此時i+m/2行為單像素行;若m為奇數(shù),記錄i+(m+1)/2行,此時i+(m+1)/2行為單像素行。
步驟4將所有單像素行從原圖中提取出來并在所建與原圖一樣大小的空白圖中保存,完成水平線細化。
豎直線細化同理,豎直線從下向上投影,遍歷圖像從左向右。
在本文1.3節(jié)表格橫線和豎線提取中得到橫線和豎線的灰度圖后,分別對橫線和豎線進行相應的形態(tài)學處理,尋找到相應的矩形輪廓,用每個相同位置的矩形輪廓框選細化后的表格橫線和豎線,每次框選1條,并將其放到新建的大小相同的空白圖像上。使用Shi-Tomasi角點檢測方法[10]分別對新的圖像進行角點檢測并記錄每條橫線和豎線的端點坐標。
端點坐標的取值。由于傾斜校正和檢測誤差等因素會導致同一坐標的坐標值有偏差,不利于后面的表格繪制。因此,有必要對獲得的端點坐標進行取值處理。行的形式為[xs,ys,xe,ye],先計算數(shù)據(jù)行與行之間x值坐標差值,如果差值小于3說明x值應相等,同取首個x值。然后比較行內(nèi)部數(shù)據(jù),如果|xs-xe|<3,說明xs=xe,同取首個x值。y的取值同理。
Word繪制表格的流程如下:
步驟1根據(jù)橫線和豎線端點坐標統(tǒng)計得到m條橫線和n條豎線。
步驟2Word生成(m-1)行和(n-1)列的表格。
步驟3合并單元格。
根據(jù)同一條橫線端點坐標y值相同,即有m條橫線,同一豎線端點坐標x值相同,有n條豎線,完成表格橫線和豎線的統(tǒng)計。進而在Word中生成(m-1)行和(n-1)列的表格。
表格單元格的合并策略:對于橫線,按照y值從小到大進行排序。對于豎線,則是x值從小到大進行排序。豎格合并,每個單元格標記為(i,j)(其中i=1,2,3…,j=1,2,3…),單元格不進行合并的條件是ys=ye=y且xs≤x 圖5 單元格合并類型 橫格合并時,每個單元格標記為(i,j),(其中i=1,2,3…,j=1,2,3…),單元格不進行合并的條件是xs=xe=x且ys≤y Word中自動生成的表格效果如圖6。 圖6 自動生成的表格效果 本文主要研究簡歷類、采購單類和信息采集類表格的掃描圖像。通過對紙質(zhì)表格的掃描圖像進行傾斜校正,然后對表格圖像預處理,實現(xiàn)了表格橫線和豎線的提取、修復和細化,進而完成橫線和豎線端點坐標的提取、數(shù)據(jù)處理和數(shù)據(jù)存儲。利用提取的端點坐標在Word中完成表格的自動繪制,為表格圖像內(nèi)文字識別后填充到Word表格中準備條件,進而完成表格圖像到可編輯電子表格的自動化轉(zhuǎn)換。表格紙質(zhì)化到電子化的轉(zhuǎn)變?yōu)樾畔⒌拇鎯徒粨Q提供了極大的便利,具有廣闊的應用前景。不足之處是識別表格種類較少和缺少文字填充,且圖像獲取方式存在局限性。下一步的研究重點是文字識別后的填充和票據(jù)類、快遞單等復雜圖像的識別以及數(shù)據(jù)的提取,還包括擴大圖像的獲取方式。3 結(jié)束語