董屹晨,張嚴(yán)嚴(yán),趙鵬飛
(江蘇大學(xué) 計(jì)算機(jī)科學(xué)與通信工程學(xué)院,江蘇 鎮(zhèn)江 212013)
隨著科技的飛速發(fā)展,各種圖像信息也在辦公、學(xué)習(xí)方面得到了廣泛的應(yīng)用。我們一般會(huì)將紙質(zhì)文本拍照或掃描成圖像,經(jīng)過計(jì)算機(jī)處理得到相應(yīng)的電子材料。然而,拍照得到的紙質(zhì)文本往往會(huì)出現(xiàn)大量問題。例如,由于光線環(huán)境的不同,文本往往會(huì)出現(xiàn)大量的陰影。若重新打印該文本圖像,會(huì)使得陰影嚴(yán)重影響文本的觀感。由于手機(jī)的角度與文本的角度都存在傾斜,會(huì)導(dǎo)致圖像出現(xiàn)透視的問題。印刷紙張存在一定的質(zhì)量問題,也會(huì)導(dǎo)致文本圖像中產(chǎn)生大量的噪點(diǎn),文字本身也會(huì)顯得粗糙,能夠明顯看到紙張本身出現(xiàn)的痕跡,從而進(jìn)一步影響文本圖像的觀感。由于書本較厚,書本的頁面會(huì)彎曲,導(dǎo)致拍攝的文本也變得扭曲。因此,在對(duì)文本圖像進(jìn)行進(jìn)一步處理(如光學(xué)字符識(shí)別(Optical Character Recognition, OCR))之前,需要消除文本的失真感。
在目前,針對(duì)文本出現(xiàn)的陰影現(xiàn)象的解決方法漸漸趨于成熟,市面上出現(xiàn)了大量軟件能夠?qū)崿F(xiàn)自適應(yīng)二值化。在背景灰度漸變情況下,各類自適應(yīng)二值化的算法能夠很好地將文本前景與圖像背景分離,從而實(shí)現(xiàn)陰影的去除。針對(duì)圖像的出現(xiàn)傾斜與透視的問題,其解決方案也較為容易,利用透視變換也能很好地將文本圖像進(jìn)行校正。然而,針對(duì)印刷紙張粗糙的文本圖像,部分文本掃描類軟件可能會(huì)產(chǎn)生誤識(shí)別的行為,將紙面的粗糙處與噪點(diǎn)錯(cuò)誤地認(rèn)作文本前景并進(jìn)行銳化與增強(qiáng)。針對(duì)文本所在頁面的扭曲現(xiàn)象,僅僅使用透視變換仍然不能很好地解決文本行彎曲的問題。
如圖1所示,我們一般會(huì)將紙質(zhì)文本拍照或掃描成圖像,再經(jīng)過計(jì)算機(jī)一系列的處理,得到相應(yīng)電子材料,以便互聯(lián)地交流和分享。而拍照或掃描出的圖像可能會(huì)出現(xiàn)模糊、歪斜、不平整等狀況,影響人們的日常使用。
圖1 拍照掃描示例圖
在本文中,將著力于解決文本粗糙與頁面扭曲的問題。經(jīng)過本文的算法的處理,可以將其內(nèi)容變得清晰校正歪斜等,結(jié)果如圖2所示。很大程度上提高了原圖像的可讀性。
圖2 軟件處理效果示例圖
文本圖像有以下幾個(gè)特點(diǎn):首先,紙張中存在需要去除的細(xì)節(jié)。紙張本身的褶皺與噪點(diǎn)即為需要去除的、不重要的細(xì)節(jié)。其次,文字本身是存在大量細(xì)節(jié)的。與外文文本的區(qū)別是,在中文文本圖像中,文字本身的細(xì)節(jié)更為豐富。由于文字的筆畫的寬度較小,所以中文文字的每一個(gè)筆畫都可以視作圖像的邊緣信息。因此,邊緣保持平滑(EPS)能夠很好地解決文本圖像的處理問題。邊緣保持平滑(EPS)本身作為一個(gè)計(jì)算機(jī)視覺領(lǐng)域的熱門課題,有兩種方法得到了廣泛的發(fā)展:基于加權(quán)平均的方法和基于全局優(yōu)化的方法。
基于加權(quán)平均的方法也稱為基于濾波器的方法或卷積方法。然而,傳統(tǒng)的濾波器方法難以兼顧邊緣保持與平滑。若卷積核導(dǎo)致過大的平滑強(qiáng)度,可能導(dǎo)致文字變得更模糊,也可能導(dǎo)致梯度翻轉(zhuǎn)。
基于全局優(yōu)化的方法包括總變差平滑、加權(quán)最小二乘平滑、梯度范數(shù)平滑和相對(duì)總變化平滑等。比起基于加權(quán)平均的方法,全局優(yōu)化的方法可以更好地避免諸如梯度反轉(zhuǎn)和光暈等偽影等諸多問題。
基于金字塔的方法也能夠進(jìn)行邊緣保持的平滑。然而,其運(yùn)行效率仍然低于基于全局優(yōu)化的方法。局部拉普拉斯濾波器是一種邊緣察覺型圖像處理技術(shù),它通過構(gòu)造輸出圖像的拉普拉斯金字塔{[]}得到最終結(jié)果。非規(guī)范化雙邊濾波是一種基于雙邊濾波和局部拉普拉斯濾波器折中的濾波,有著與局部拉普拉斯濾波器相似的策略:基于非線性的且依賴參考值。文獻(xiàn)[4]基于這個(gè)策略,設(shè)計(jì)了一個(gè)快速局部拉普拉斯濾波器,在保持局部拉普拉斯濾波器細(xì)節(jié)與邊緣處理細(xì)膩的優(yōu)點(diǎn)的同時(shí)使運(yùn)算更加快速。
基于深度學(xué)習(xí)的方法利用不同的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)模仿現(xiàn)有濾波器的平滑效果。然而,訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)需要的參數(shù)難以確定且可解釋性較差。
基于結(jié)構(gòu)提取的方法針對(duì)自然場(chǎng)景、布藝品以及手工藝品等都包含不同的紋理結(jié)構(gòu),例如毛衣、沙發(fā)、墻面涂鴉等。這些圖像中,有意義的結(jié)構(gòu)圖和不同樣式的紋理融合在一起。然而,面對(duì)拍攝的紙質(zhì)文本圖像,結(jié)構(gòu)提取的算法卻會(huì)錯(cuò)誤地將文本的前景進(jìn)行過度的平滑,反而將文本模糊化,達(dá)不到預(yù)期的效果。
因此,本文使用基于全局優(yōu)化的方法進(jìn)行圖像的平滑。本文將著重介紹文獻(xiàn)[1]提出的迭代最小二乘法平滑與文獻(xiàn)[2]提出的范數(shù)平滑。
迭代最小二乘法的整體流程為:
第二步,對(duì)于迭代次數(shù),循環(huán)地計(jì)算(1)和(2),循環(huán)次。
第三步,得到u,即為最終處理完成后的圖像。
迭代最小二乘法的處理速度非???,且在大部分情況下能夠較大程度地完成圖像去噪、平滑的任務(wù),且文字本身的細(xì)節(jié)能夠被保留。基本滿足文本圖像修復(fù)工作,提高了文本圖像的可讀性。
香港中文大學(xué)徐立等人所做的范數(shù)梯度平滑是一種經(jīng)典的邊緣保留的平滑算法。盡管這一算法較為經(jīng)典、處理效果也較好,然而,其處理速度相比于迭代最小二乘法接近實(shí)時(shí)的效果,效率較為低下,不適用于需要批量處理文本圖像時(shí)的應(yīng)用場(chǎng)景,且在處理尺寸較大的文本圖像時(shí)也需要較長(zhǎng)的時(shí)間。該算法整體流程為:
第一步,輸入原圖像,平滑權(quán)值,參數(shù)和,迭代率κ。
第二步,進(jìn)行初始化,←,←,←0。
最后更新,←κ。直到≥時(shí),循環(huán)結(jié)束。
第四步,輸出最終圖像。
在拍攝紙質(zhì)文檔時(shí),由于紙質(zhì)文檔角度的傾斜,手機(jī)本身角度的傾斜,所以利用手機(jī)拍攝出的紙質(zhì)文檔也會(huì)出現(xiàn)傾斜與透視的現(xiàn)象。對(duì)圖像的傾斜、透視進(jìn)行校正的方法很簡(jiǎn)單,使用透視變換即可。然而,由于紙質(zhì)書籍存在一定的厚度,書本的頁面會(huì)存在扭曲、彎曲的現(xiàn)象,使得原本應(yīng)當(dāng)處于同一行、同一條直線上的文字沒有正確地被處理到同一行。如圖3所示,左半頁書由于頁邊的彎曲出現(xiàn)了扭曲的現(xiàn)象,在拍攝的圖像中,每一行都被彎曲了。而在右半頁書中,由于拍攝角度的問題,出現(xiàn)了透視的現(xiàn)象。透視變換的流程較為簡(jiǎn)單,在此不贅述。
圖3 扭曲與透視
本文采用了字符分割的方法,使用文獻(xiàn)[5]中基于文本域的檢測(cè)的方法,并使用基于文獻(xiàn)[6]的基于連通域的扭曲圖像校正方法,對(duì)其進(jìn)行一定的改進(jìn),一定程度上減小了該方法的耗時(shí)。本文使用的文本扭曲校正算法整體流程如下:首先,輸入待處理圖像,對(duì)其進(jìn)行形態(tài)學(xué)腐蝕操作,并將其映射為一維形式。然后,逐步對(duì)點(diǎn)連通域、字連通域和行連通域進(jìn)行搜索。最后,根據(jù)每一行中心點(diǎn)的位置進(jìn)行圖像的校正。整體流程如圖4所示。
圖4 整體流程
在腐蝕時(shí)需要設(shè)定卷積核參數(shù)。若卷積核參數(shù)元素過小則會(huì)導(dǎo)致某些文字仍有一部分與其主體未連通,若參數(shù)元素過大則會(huì)導(dǎo)致文字與相鄰文字被連通。經(jīng)測(cè)試,卷積核參數(shù)中,卷積核內(nèi)部元素均為3 較為合適。
由于圖像是二維化存儲(chǔ)的,為了在遍歷圖像時(shí)提高效率,需要將圖像映射成一維。記圖片的高為,長(zhǎng)為,則對(duì)于(,)點(diǎn),可得pos=*+。在將pos 點(diǎn)映射回二維點(diǎn)位時(shí),=mod,=/。
由于對(duì)圖像的掃描與遍歷時(shí)從上到下,從左到右的,所以在判斷某點(diǎn)與其鄰域的關(guān)系時(shí),只需判斷其左上結(jié)點(diǎn)、左結(jié)點(diǎn)與上結(jié)點(diǎn)。若當(dāng)前結(jié)點(diǎn)為黑色,且其左結(jié)點(diǎn)為黑色,認(rèn)為當(dāng)前結(jié)點(diǎn)與左結(jié)點(diǎn)在同一連通域內(nèi)。對(duì)于上結(jié)點(diǎn)、左上結(jié)點(diǎn),同理。為了提高對(duì)判斷連通域時(shí)的效率,可以用到并查集的算法。
首先,每個(gè)點(diǎn)自成一個(gè)并查集。
然后,從上到下,從左到右掃描所有結(jié)點(diǎn)。每次掃描到某個(gè)結(jié)點(diǎn),就逐次遍歷其左上結(jié)點(diǎn)、左結(jié)點(diǎn)以及上結(jié)點(diǎn)。當(dāng)判斷結(jié)點(diǎn)與其像素值都為1 時(shí),則認(rèn)為所判斷結(jié)點(diǎn)與當(dāng)前結(jié)點(diǎn)同屬一個(gè)連通域,并將其加入當(dāng)前結(jié)點(diǎn)的集合。
最后,完成對(duì)所有結(jié)點(diǎn)的搜索,將所有結(jié)點(diǎn)劃分為若干個(gè)點(diǎn)連通域。
由于漢字的特性,部分漢字的偏旁與部首不一定與漢字的主體直接連通而會(huì)存在空隙,所以需要將點(diǎn)連通域合并成字連通域,使得每一個(gè)字連通域與每一個(gè)漢字一一對(duì)應(yīng)。
對(duì)于每一個(gè)點(diǎn)連通域,首先創(chuàng)建一個(gè)矩形將該點(diǎn)連通域包裹住。該矩形具有六個(gè)屬性:up,down,left,right,C,C,對(duì)應(yīng)這個(gè)矩形的頂邊、底邊、左邊、右邊,中心點(diǎn)橫軸坐標(biāo)、中心點(diǎn)縱軸坐標(biāo)。
其次,統(tǒng)計(jì)每個(gè)矩形的高度,即down-up 的值,并將down-up≤5的矩形視為噪點(diǎn)或標(biāo)點(diǎn)符號(hào),不進(jìn)行計(jì)算。同時(shí),對(duì)該值取平均,得到文字的平均高度值。
接著,按照一定的順序,對(duì)上下結(jié)構(gòu)的文字進(jìn)行循環(huán)相鄰合并。其合并的過程是與文獻(xiàn)[6]是一致的。先判斷是否存在重疊的矩形區(qū)域,進(jìn)行重疊合并。在進(jìn)行重疊合并完成后,合并具有上下結(jié)構(gòu)或左右結(jié)構(gòu)的漢字。該合并過程循環(huán)進(jìn)行,直到?jīng)]有能夠合并的漢字為止,構(gòu)建字連通域。
對(duì)于文本行的檢索,本文循環(huán)地查找某一文字與行內(nèi)與該文字最近的文字,從而構(gòu)建行連通域。
根據(jù)在3.2.4 章節(jié)中得到的字連通域,計(jì)算每個(gè)文字C所在的字連通域的中心坐標(biāo)(C,C)。對(duì)于文字C和C,若C的上邊界小于C的下邊界或C的下邊界大于C的上邊界,則認(rèn)為這兩個(gè)字塊不在同一行。根據(jù)中心坐標(biāo),計(jì)算C與左右兩側(cè)文字的中心間距,并分別選取左右兩側(cè)間距最小的文字C和C。C和C即為C的左右鄰居字塊。
最后,將文字聚合成行。通過遍歷各連通域,找出行首文字,即沒有左鄰居的文字。然后,從每個(gè)行首文字開始,逐個(gè)查找其右鄰居,直至行末文字,即沒有右鄰居的文字。
此時(shí)的文檔圖像可能的層次結(jié)構(gòu)如圖5所示。
圖5 圖像可能的層次結(jié)構(gòu)
本文利用已經(jīng)確定的文本行和文字位置信息,移動(dòng)單個(gè)文字即可完成校正過程。由于每個(gè)文字的面積接近,只需要將所有文字移到適當(dāng)位置即可完成校正操作。
首先,對(duì)圖像按從上到下的順序進(jìn)行逐行遍歷,同時(shí)每行按照從左至右的順序進(jìn)行遍歷。例如,對(duì)于第行L的最左文字作為標(biāo)記文字C,然后遍歷其他文字C,并計(jì)算其校正位移。對(duì)于,有計(jì)算公式如下:=C-C
同時(shí),由于當(dāng)前字連通域塊的高度小于或等于5,則認(rèn)為該連通塊為標(biāo)點(diǎn)符號(hào)。此時(shí),校正位移為最左文字下邊界與當(dāng)前字連通域下邊界的差值,即=C-C。
然后,將C按照校正位移進(jìn)行垂直移動(dòng),并繪制在新圖像上,避免相鄰兩行出現(xiàn)重疊。測(cè)試時(shí)使用了文獻(xiàn)[6]提供的圖像。
圖6(a)是原圖,圖6(b)是校正后圖像。在圖6(a)中文字所在行區(qū)域是歪斜的,而在圖6(b)中文字所在的行區(qū)域變得平整了,歪斜能夠得到校正如圖6所示。
圖6 歪斜能夠得到校正
本文在Pycharm2021 社區(qū)版環(huán)境下采用Python3.8 語言采用OpenCV 庫(kù)進(jìn)行編碼與實(shí)驗(yàn),在前端使用PyQt5 并集成了第二章與第三章涉及的算法。利用手機(jī)拍照獲取數(shù)據(jù)與原圖像。
針對(duì)圖像的平滑問題,進(jìn)行以下測(cè)試。
如圖7(a)所示,原圖像為紙質(zhì)文本圖像,然而由于紙張本身質(zhì)量較差,顯得較為粗糙,再經(jīng)過反復(fù)地放大與縮小后出現(xiàn)了失真的現(xiàn)象,一定程度上影響了觀感。使用迭代最小二乘法處理,得到圖7(b)中??梢悦黠@觀察到:這種粗糙感與圖像在放大后的失真感在一定程度上成功地被緩解了。與此同時(shí),比起較為傳統(tǒng)的線性加權(quán)平均值算法,文字的邊角等細(xì)節(jié)卻能得到較為完好地保存。從而得以改善文本的可讀性。使用梯度最小化平滑,得到圖7(c)。盡管算法運(yùn)行了較長(zhǎng)時(shí)間,但是效果較好地平滑了紙張的褶皺質(zhì)感。
圖7 針對(duì)圖像的平滑問題測(cè)試
以圖像中的某一行為例,在原圖像中該行的灰度級(jí)曲線為曲折,保留了大量的無意義的細(xì)節(jié)。在經(jīng)過迭代最小二乘法平滑的處理之后,灰度級(jí)曲線明顯地變得平滑了,且文字前景與圖像背景部分的對(duì)比度變得更大,以便于后續(xù)的二值化處理。梯度最小化的平滑效果,其平滑的效果較好,但運(yùn)行時(shí)間較長(zhǎng)。截取某行得到的灰度級(jí)對(duì)比如圖8所示。
圖8 截取某行得到的灰度級(jí)對(duì)比
以“雙邊濾波”四字為例,在未經(jīng)過平滑處理的圖像中,直接運(yùn)用二值化時(shí),仍然可以看到文字周圍存在大量的噪點(diǎn),如圖9(a)。而在經(jīng)過平滑后,噪點(diǎn)數(shù)量明顯變少,文字本身的筆畫線條被更為清晰地提取了出來,如圖9(b)與圖9(c)。
圖9 處理效果圖
10(a)是生活中較為常見的一種場(chǎng)景:拍攝書本上的一個(gè)歪斜、彎曲的頁面,而這一頁面內(nèi)的行在經(jīng)過第二章與第三章所使用的算法的綜合處理后,得到了圖10(b)。其扭曲的現(xiàn)象被成功地校正了,一定程度上提升了文本的可讀性。
圖10
處理前后對(duì)比在圖11 的實(shí)例中,可以觀察到其印刷紙張粗糙、泛黃。其背面頁文字的陰影也能在當(dāng)前頁面中看到。
圖11 紙質(zhì)明顯粗糙的圖像
針對(duì)本示例,本文的平滑效果能夠成功地將文本前景與背景很好地分離,并在二值化中處理出文本的前景,如圖12(a)。市面上常用的文本圖像掃描處理軟件為掃描全能王。而使用掃描全能王卻會(huì)錯(cuò)誤地將需要去除的背景當(dāng)做前景進(jìn)行增強(qiáng),如圖12(b)。
圖12 處理效果對(duì)比
針對(duì)手機(jī)拍攝的文本圖像,本文先利用邊緣保留的平滑對(duì)其進(jìn)行平滑去噪,將文本內(nèi)容與紙張進(jìn)行分離,基于行連通域的文本行校正方法對(duì)分離出來的文本的扭曲現(xiàn)象進(jìn)行校正。相比其他方法,本文提出的方法能夠取得較好的效果。
目前本文使用的算法只能處理純文字的文本圖像,帶有圖片與表格等復(fù)雜信息的文本圖像的處理亟待后續(xù)研究與進(jìn)一步處理。同樣,漢字本身的存在傾斜扭曲現(xiàn)象的判斷、檢測(cè)與校正也亟待進(jìn)一步的研究。