羅朝陽 張鵬超 姚晉晉 王 彥 趙瑞杰
1(陜西理工大學機械工程學院 陜西 漢中 723000)2(陜西省工業(yè)自動化重點實驗室 陜西 漢中 723000)
考試是教育測量的重要手段,也是目前選拔人才的重要手段。所以公平、公正就顯得非常重要,這不僅體現(xiàn)在考試的過程中,還體現(xiàn)在評卷的過程中。以前,這些試卷都是進行人工翻閱批改,其中評卷老師的水平、狀態(tài)、情緒都能影響評卷的結果,這種不確定性有失公平公正。隨著信息技術的不斷發(fā)展,計算機功能的不斷強大,出現(xiàn)了答題卡的計算機閱卷設備,通過電子掃描技術將紙質的答題卡轉化為數(shù)值化的形式,再對其自動評閱,這不僅解決了評卷公正性、準確性的要求還提高了評卷的工作效率。
目前答題卡識別方式主要有兩種:一種是基于光電設備,另一種是基于圖像處理技術。光標閱讀機(OMR)是根據(jù)光電設備將不同區(qū)域的感光能力轉換為計算機處理的電信號,再依據(jù)電信號來識別。這種識別系統(tǒng)具有高效率、高準確率、低功耗的優(yōu)點,但它的缺點也很突出,即必須采用光標閱卷機和專用的答題卡,購買成本和使用成本都非常高昂,且這種形式的答題卡規(guī)格一旦確定就難以修改,所適用的范圍小。圖像處理技術是將圖像采集設備所獲得的圖像供計算機分析識別,從而獲取答題卡上的有效信息。這種識別方式不僅可以完成閱卷工作,還具有成本低廉、使用方便的優(yōu)點,而且可通過軟件方便修改答題卡的結構,以適應不同的需求。
針對獲得的數(shù)字化圖像數(shù)據(jù),陳淑紅等[1]提出基于縱向同步頭和模板匹配的方法進行定位識別;杜聰[2]提出模板匹配的識別方法;郝平[3]提出基于OpenCV耦合模板定位識別。他們都是采用模板匹配的方法來識別,識別的精度全取決于模板。本文提出一種基于Hough變換答題卡識別算法,以此構建基于圖像識別的閱卷系統(tǒng)。
通過相機或掃描儀采集答題卡的原始圖像,當系統(tǒng)獲取到圖像之后,先對其進行預處理操作;通過Hough直線變換獲取圖像的矯正角度,并將圖像進行矯正操作,矯正后對圖像進行區(qū)域分割,獲得答題區(qū)域和準考證區(qū)域以及考試科目信息區(qū)域;對這些區(qū)域進行識別判斷,以完成閱卷步驟,流程如圖1所示。
圖1 閱卷流程圖
本文所描述的算法通過MATLAB 2017b軟件實現(xiàn),通過在main函數(shù)中調用其他子函數(shù)來實現(xiàn)圖1流程框圖中的內(nèi)容。
算法主程序:
I=imread(p);
%p為答題卡圖像的路徑和名字
[I1,bw1]=Image_Preprocessing(I);
%圖像預處理
[~,~,xy_long]=Hough_Process(bw1);
%hough直線檢測
angle=Compute_Angle(xy_long);
%計算傾斜角度
[I2,bw2]=Image_Rotate(I1,bw1,angle);
%圖像矯正
[bw3,Loc]=Morph_Process(bw2);
%形態(tài)學濾波
[Len,XYz,xy_long]=Hough_Process(bw3);
%
[bw4,bw5]=Image_Segmentation(XYz,bw3);
%圖像分割
[stats1,stats2,Line]=Region_Label(bw4,bw5,XYz,Loc);
%區(qū)域標記
[Anss(i).Answer,Anss(i).Bn]=Analysis(stats1,stats2,Line,I2);
%區(qū)域分析
Hough檢測子程序:
function[Len,XYz,xy_long]=Hough_Process(bw)
[H,T,R]=hough(bw);
%hough矩陣
P=houghpeaks(H,4,′threshold′,ceil(0.3×max(H(:))));
%hough峰值
lines=houghlines(bw,T,R,P,′FillGap′,50,′MinLength′,6);
%hough直線
max_len=0;
for i=1:length(lines)
xy=[lines(i).point1;lines(i).point2];
len=norm(lines(i).point1-lines(i).point2);
%計算直線長度
Len(i)=len;
if len>max_len
max_len=len;
xy_long=xy;
end
%判斷最長直線
XY{i}=xy;
%存儲直線坐標
end
[Len,ind]=sort(Len(:),′descend′);
%直線長度排序
for j=1:length(ind)
XYz{j}=XY{ind(j)};
end
x=xy_long(:,1);
y=xy_long(:,2);
if abs(diff(x)) x=[mean(x);mean(x)]; else y=[0.75×y(1)+0.25×y(2);0.25×y(1)+0.75×y(2)]; end %坐標調整 xy_long=[x y]; %輸出調整后的直線坐標 識別判斷子程序(部分): function[Answer,Bn]=Analysis(stats1,stats2,Line,Img) aw=[′A′ ′B′ ′C′ ′D′]; for i=1:length(stats1) %循環(huán)所有的題目 temp=stats1(i).Centroid; %獲取當前填涂區(qū)域的坐標 for i1=1:length(Dom) %循環(huán)答題區(qū)域 Loc=Dom(i1).Loc; %獲取i1區(qū)域中的范圍坐標 if temp(2)>=Loc(1) && temp(2)<=Loc(2) x=Dom(i1).x; y=Dom(i1).y; i_y=(i1-1)×20; %統(tǒng)計當前的題數(shù) for i2=1:length(x) %循環(huán)i1區(qū)域中的題組 xt=x{i2}; for i3=1:length(xt)-1 %循環(huán)題組中的題號 if temp(1)>=xt(i3) && temp(1)<=xt(i3+1) i_x=(i2-1)×5+i3; %統(tǒng)計題號 break; end end end i_n=i_y+i_x; for i4=1:length(y)-1 %循環(huán)當前題號選項的個數(shù) if temp(2)>=y(i4) && temp(2)<=y(i4+1) i_a=aw(i4); %給出答案 break; end end end end Answer(i_n).Loc=[Answer(i_n).Loc;temp]; % Answer(i_n).no=i_n; %保存題號 Answer(i_n).aw=[Answer(i_n).aw i_a]; %保存答案 end 答題卡自動閱卷系統(tǒng)是將圖像采集設備獲得的答題卡圖像傳輸給計算機,供其分析識別。但在獲取答題卡的數(shù)字圖像過程中,常常會受到環(huán)境、設備等因素的影響而產(chǎn)生噪聲,從而影響閱卷的準確性。因此,要對獲取到的圖像進行預處理操作,包括對圖像進行灰度拉伸、高斯濾波、圖像二值化,然后再將二值化的圖像進行反轉,這樣就可以大大減少計算的數(shù)據(jù)量。處理結果如圖2所示。 (a) 預處理后的答題卡圖像 (b) 二值反轉后的答題卡圖像圖2 預處理與二值反轉后的答題卡圖像 霍夫變換是由Paul Hough于1962年首次提出,僅僅用于圖像中直線的檢測?,F(xiàn)在使用的廣義霍夫變換不僅能檢測直線,還可以檢測其他形狀的幾何特征。因為直角坐標的線與參數(shù)坐標中的點具有對偶性,從而可將直角坐標中的線轉換為參數(shù)坐標中的點?;舴蜃儞Q就利用這一原理,將曲線的檢測問題轉化為尋找峰值的問題。 在笛卡爾坐標系中一條過點(x0,y0)的直線可以用斜截式表示: y0=kx0+b (1) 式中:斜率k和截距b都是參數(shù)。若將x0和y0視為常數(shù),而將參數(shù)k和b視作變量,則式(1)改寫為: b=-kx0+y0 (2) 這就將直角空間中的直線轉換成了參數(shù)空間中的點。同理直角空間中的點也可以轉換為參數(shù)空間的直線,變換如圖3所示。 圖3 點-線對偶性 但斜截式的直線方程不能表示所有的直線,如斜率不存在的直線,為了能表示所有的直線,采用極坐標形式的方程來表示直線,則將式(1)改寫為: ρ=x0cosθ+y0sinθ (3) 式中:ρ是原點到直線上最近點的距離,θ是x軸與連接原點和最近點直線之間的夾角,如圖4所示。因此,將圖像中的直線與一對參數(shù)(ρ,θ)相關聯(lián),這個參數(shù)(ρ,θ)平面就被稱為霍夫空間。 圖4 直角空間與霍夫空間 經(jīng)Hough變換后,會得到很多條直線的橫縱坐標,經(jīng)式(4)計算,選出其中最長的一條直線,如圖5(a)所示,并根據(jù)此直線按式(5)求出矯正角度θ,最后將原圖像按式(6)矯正,矯正后的效果如圖5(b)、(c)所示。 (4) (5) (6) (a) 檢測的最長直線 (b) 矯正后的原圖 (c) 矯正后的二值圖像圖5 檢測的直線圖與矯正后的原圖和二值圖 形態(tài)學的本質是結構元素與圖像矩陣之間的相互作用,這種作用包括基礎的膨脹和腐蝕,也包括由這兩種復合而成的開和閉。 在形態(tài)變換中,若用E(X)表示二值圖像,B(X)表示結構元素,⊕和Θ兩種符號分別表示形態(tài)學運算中的膨脹運算和腐蝕運算,則: 膨脹定義為: E⊕B={x:B(x)∩E≠Φ} (7) 腐蝕定義為: EΘB={x:B(x)?E} (8) 設·和°分別是開運算和閉運算的符號,則: 開運算定義為: E°B=(EΘB)⊕B (9) 閉運算定義為: E·B(E⊕B)ΘB (10) 因此,本文采用的結構元素定義為: 濾波算法定義為: f=EΘB2⊕B1 (11) 采用此算法對圖5(c)中的二值圖像進行形態(tài)學濾波處理,并將處理后的圖像中的答題邊界符去除,結果如圖6所示。 (a) 濾波前的二值圖 (b) 濾波后的二值圖圖6 濾波結果 圖像分割是指將圖像劃分成具有相似性質的若干區(qū)域的過程?,F(xiàn)有的分割方法有基于閾值分割、基于區(qū)域分割、基于邊緣分割以及基于特定理論的分割等[4]。 答題卡的有效信息位于圖像中的特定區(qū)域,包括準考證號區(qū)域、答題區(qū)域以及科目代號區(qū)域,對這些區(qū)域精準定位就可以獲取答題卡中的有效信息。本文采用了基于直線的邊界檢測和區(qū)域分割的方法,將答題卡化分為信息區(qū)域和答題區(qū)域兩部分,分割效果如圖7所示。 (a) 直線邊界檢測 (b) 信息區(qū)域 (c) 答題區(qū)域圖7 分割結果 識別包含對信息區(qū)域中準考證號的識別、科目代號的識別,也包含對答題區(qū)域選項的單選識別、多選識別。通過bwlabel獲取答題區(qū)域和信息區(qū)域的標記矩陣,通過regionprops獲取區(qū)域的Centroid屬性,然后根據(jù)此屬性判斷填涂的選項。 根據(jù)前文Hough變換獲得的直線,將答題區(qū)域和信息區(qū)域中的每個選項、信息通過網(wǎng)格劃分出來。然后采用圖8的識別算法進行識別。 圖8 識別算法 對圖7(b)、(c)進行識別,識別結果如表1、表2所示,將表1、表2中的信息疊加到原圖中的效果如圖9所示。 表1 信息區(qū)域識別出的結果 表2 答題區(qū)域識別出的結果 圖9 識別結束后的效果 測試環(huán)境:處理器型號為Intel(R) Core(TM) i5-4210U CPU @ 1.70 GHz 2.40 GHz,內(nèi)存4 GB,Windows 10操作系統(tǒng)。仿真軟件為MATLAB 2017b。答題卡圖像是用CCD相機在室內(nèi)拍攝的100張標準答題卡,每幅圖像的大小5 MB,分辨率為4 000×3 000。圖像以JPG格式保存,對拍攝的圖像進行壓縮,產(chǎn)生了馬賽克噪聲,且相機本就包含CCD噪聲,導致圖像中也含有了CCD噪聲。 本方法是根據(jù)答題卡圖像中的直線特征來識別答題區(qū)域和信息區(qū)域,它影響著這些區(qū)域的定位精度。直線特征在算法中有著舉足輕重的作用,在本算法中若用其他特征代替直線特征將很難定位答題區(qū)域和信息區(qū)域。 實驗共進行100份答題卡測試,每份45道題,測試結果如表3所示。 表3 不同份數(shù)的測試結果 表4 不同方法的識別速度 從表3中可以得知每份答題卡平均耗時0.893秒,正確率達到100%,從表4中可以知道本文算法相比于文獻[1]平均耗時2.956秒、文獻[5]平均耗時1.934秒、文獻[8]平均耗時0.909秒具有明顯優(yōu)勢,充分說明本文算法具有高效性。 本實驗實現(xiàn)了答題卡的正確識別,不需要專用的識別設備和答題卡,在普通PC機上就可實現(xiàn)。這不僅降低了購買成本、使用成本,還擴大了應用范圍,并且該方法的識別正確率達到了100%,識別速度為每份0.893 s。因此,本文所描述的識別方法是一種廉價、高效、便捷、實用的閱卷方法,具有實際應用價值。2 圖像預處理
3 Hough直線傾斜矯正
3.1 Hough變換
3.2 圖像矯正
4 形態(tài)學濾波
5 圖像分割
6 識別判斷
7 測試與分析
8 結 語