劉 紅, 許傳林
(上海電機學(xué)院 電子信息學(xué)院, 上海201306)
網(wǎng)上閱卷已成為各類考試的重要趨勢。針對圖片中的文本行檢測,近年來國內(nèi)外的研究人員做了大量的工作。其中,基于紋理的方法和基于區(qū)域的方法是文本檢測的兩大傳統(tǒng)方法[1]。基于區(qū)域的方法是將圖像進行字符區(qū)域的劃分,再拼接形成文本區(qū)域[2];基于紋理的方法是掃描整個圖像,將文本作為一種紋理處理,從而實現(xiàn)圖像中文本區(qū)域與非文本區(qū)域的分離[3]。
檢測到的文本圖像不能直接發(fā)送到OCR軟件進行識別,與文檔圖像中的文本相比,它具有更為復(fù)雜的背景。照相機獲取圖像時由于視角問題以及相機硬件的不足都會影響成像的結(jié)果。雖然有方法支持灰度圖像中文本的識別,但是當(dāng)文本背景較復(fù)雜時,其識別效果并不十分理想。現(xiàn)有的商用OCR軟件大多只能處理背景干凈的二值圖像[4]。對于在圖像中檢測到的文本行,應(yīng)將其與背景分離[5]。
在圖像處理和計算機視覺范疇,圖像分割始終是一個基礎(chǔ)和關(guān)鍵問題。例如,醫(yī)學(xué)圖像分割、數(shù)字圖像編輯、軍事目標(biāo)辨認(rèn)、人體活動跟蹤等,隨著圖像分割的應(yīng)用領(lǐng)域越來越多樣化,采用的技術(shù)也越來越先進。
前景是被顯示和表達的主體,背景可以理解為主體存在的環(huán)境。圖像分割是一項主要的圖像技術(shù),具有普遍的理論研究和現(xiàn)實使用價值。大量的數(shù)字圖像處理方法可以用于目標(biāo)的分割和提取,在計算機視覺、模式識別等范疇?wèi)?yīng)用廣泛。圖像分割是為了提取有意義的特點區(qū)域或需要利用的特點區(qū)域,引起很多研究者的注意[6]。
基于試卷的自適應(yīng)分割算法的實現(xiàn)是針對前景的檢測和分離的需要,涉及一些相關(guān)的圖像處理方法。算法的重中之重是對前景的邊緣檢測、識別和處理,涉及到的圖像處理算法有圖像的灰度化、圖像二值化、圖像增強(拉普拉斯變換)、直線檢測及輪廓檢測、圖像校正(透視變換)等。實現(xiàn)過程中還包括一些求解四邊形面積、圖像旋轉(zhuǎn)等功能。算法處理流程如圖1所示。

圖1 算法處理流程
二值化實現(xiàn)過程:輸入原始圖像—圖像灰度化—求解閾值—分割圖像—輸出二值化圖像。
OpenCV用C++語言開發(fā)集成,重要接口也是C++語言,但它仍有很多C語言接口。這個庫另有大量的python、Java等接口[7]。本文采用OpenCV庫中的CVtColor函數(shù),將該函數(shù)中的code參數(shù)設(shè)置為CV_BGR2GRAY,實現(xiàn)圖像灰度化,再采用用戶自己計算閾值的方法對灰度圖進行二值化[8]。本文圖像灰度化的原理是根據(jù)圖像RGB三通道的亮度值用不同的權(quán)重加權(quán)后平均,獲得更符合實際的灰度圖[9]。計算閾值的方法是先用numpy庫中的reshape函數(shù)將數(shù)字圖像轉(zhuǎn)化為一維數(shù)組,再通過求其轉(zhuǎn)換數(shù)組所有元素的平均值得到閾值。最后用OpenCV 庫中的threshold函數(shù)進行圖像二值化的實現(xiàn)。二值化測試如圖2所示。

圖2 圖像二值化測試
圖像增強的實現(xiàn)過程:輸入二值化圖像-高斯濾波-拉普拉斯變換—輸出增強圖像。
圖像增強是指凸顯圖像中的主要信息。在圖像增強的算法中,直方圖均衡化是較常使用的方式,它只會加強原始圖像中局部的對比度,對于輸入的二值化圖像會得到更好更快的處理結(jié)果[10]。本文采用高斯濾波去除圖像噪聲[11],再用拉普拉斯變換和OpenCV庫中的ConvertScaleAbs函數(shù)實現(xiàn)圖像增強。圖像降噪用OpenCV 中的GaussianBlur函數(shù)實現(xiàn)。在應(yīng)用高斯濾波函數(shù)時定義高斯核的大小為Size(5,5);拉普拉斯變換采用Laplacian函數(shù)實現(xiàn),定義圖像深度為CV_16S以避免外溢,Sobel算子的內(nèi)核大小設(shè)置為3;位深轉(zhuǎn)化convertScaleAbs函數(shù)可將任意類型的數(shù)據(jù)轉(zhuǎn)化為CV_8UC1。圖像增強可以增加圖像的對比度,調(diào)節(jié)各類參數(shù)使圖像的線條凸顯,便于后續(xù)直線檢測的需要。圖像增強測試如圖3所示。

圖3 圖像增強測試
直線檢測及輪廓識別的實現(xiàn)過程:輸入增強圖像—圖像灰度化—邊緣檢測—霍夫曼直線檢測—繪制線條—輸出帶輪廓圖像。
Hough變換是常用的直線檢測算法,其算法的實質(zhì)是將圖像空間中的直線檢測問題轉(zhuǎn)化為代數(shù)空間中的峰值問題[12]。本文采用OpenCV 庫中的Canny函數(shù)和Houghlinesp函數(shù)檢測二值化圖像中的線條[13]。用line函數(shù)將檢測到的直線進行繪制,再通過FindContours函數(shù)從圖像中得到輪廓數(shù)量及對應(yīng)各個輪廓的屬性。對于所需輪廓的提取,需要在檢測過程中判斷是否為所需的輪廓,即目標(biāo)輪廓。調(diào)節(jié)函數(shù)參數(shù)檢測出所有外輪廓,其中,面積最大的輪廓即為實際所需分離的前景,并求出該前景的極值點,即前景的4個頂點[14]。直線檢測及輪廓檢測測試如圖4所示。
圖像校正的過程:輸入原圖像—獲取變換前后矩陣位置—生成透視變換矩陣—透視變換—輸出校正圖像。
本文采用OpenCV 庫中的WarpPerspective函數(shù)和GetPerspectiveTransform 函數(shù)實現(xiàn)圖像的透視變換。GetPerspectiveTransform 函數(shù)由4對點得到透射變換矩陣,WarpPerspective對圖像進行透視變換。

圖4 輪廓檢測測試
圖片進行輪廓識別后未必可以返回實際所需的極值點(前景的4個頂點坐標(biāo))。進行圖像校正時,本文將需要校正的原圖像和旋轉(zhuǎn)一定角度的Hough圖像作為參數(shù)輸入,獲得旋轉(zhuǎn)圖像中輪廓的4個極值點后進行透視變換,得到校正好的圖像。校正后的圖像如圖5所示。

圖5 校正圖像
適宜圖像校正角度尋找的過程:輸入帶輪廓圖像—圖像旋轉(zhuǎn)—輪廓檢測—獲取輪廓極值點及輪廓面積S1—求極值點圍成四邊形面積S2—記錄比值S1/S2—統(tǒng)計比值眾數(shù)—輸出旋轉(zhuǎn)角度。
在圖像處理過程中進行輪廓檢測最終得到的極值點(前景的4個頂點)有時并不能滿足實際需求。本文將原圖像按適當(dāng)比例進行一定角度的旋轉(zhuǎn)來測試其極值點是否為實際所需的前景圖像的4個頂點[15]。測試方法為在圖像旋轉(zhuǎn)的過程中,利用海倫公式算出輪廓檢測的極值點圍成的四邊形面積,將其與輪廓檢測所返回的輪廓面積相比得到一個參數(shù),當(dāng)這個參數(shù)固定不變時,對應(yīng)的旋轉(zhuǎn)角度即為適宜的旋轉(zhuǎn)角度。在尋找適宜角度的過程中可以發(fā)現(xiàn),適宜圖像校正的旋轉(zhuǎn)角度是一個區(qū)間范圍。
計算機圖形學(xué)、圖像處理技術(shù)和人工智能技術(shù)的快速發(fā)展,使圖像前景和背景目標(biāo)分割技術(shù)不斷進步。本文源于OCR 自動識別系統(tǒng)中的前景和背景分離的需要,輸入掃描或拍攝到包含背景的文本圖片,輸出為裁剪和旋轉(zhuǎn)校正后的文本圖片(不包含背景)。初期算法普適性不強,且對圖像輸入要求較高,經(jīng)過后期不斷的完善,除了一些干擾較大的圖像校正效果不太理想外,整體的功能相對完善,基本可以實現(xiàn)輸入和輸出的要求,對一些旋轉(zhuǎn)一定角度的圖片也可以準(zhǔn)確的識別和校正。