基于數(shù)字圖像處理技術(shù)的答題卡識別方法(圖像處理課程練習(xí))_第1頁
基于數(shù)字圖像處理技術(shù)的答題卡識別方法(圖像處理課程練習(xí))_第2頁
基于數(shù)字圖像處理技術(shù)的答題卡識別方法(圖像處理課程練習(xí))_第3頁
基于數(shù)字圖像處理技術(shù)的答題卡識別方法(圖像處理課程練習(xí))_第4頁
基于數(shù)字圖像處理技術(shù)的答題卡識別方法(圖像處理課程練習(xí))_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、××大學(xué)2013-2014學(xué)年第二學(xué)期課程考核圖像處理綜合設(shè)計(jì)報(bào)告基于數(shù)字圖像處理技術(shù)的答題卡識別方法學(xué) 號 姓 名 班 級 日 期 本人鄭重聲明:本人認(rèn)真、獨(dú)立完成了查找資料、編寫程序、撰寫報(bào)告等考核任務(wù)。簽字:日期:摘 要背景:隨著科技的發(fā)展,電子與計(jì)算機(jī)技術(shù)的進(jìn)步,答題卡的出現(xiàn)大大減輕教學(xué)工作者們批改試卷的工作量。答題卡是光標(biāo)閱讀機(jī)輸入信息的載體,是配套光標(biāo)閱讀機(jī)的各種信息錄入表格的總稱。 答題卡將用戶需要的信息轉(zhuǎn)化為可選擇的選項(xiàng),供用戶涂寫。OMR是用光學(xué)掃描的方法來識別按一定格式印刷或書寫的標(biāo)記,并將其轉(zhuǎn)換為計(jì)算機(jī)能接受的電信號的設(shè)備,并根據(jù)信息點(diǎn)的涂與未涂和格式

2、文件設(shè)置將信息還原。因此,如何將答題卡填涂的黑色區(qū)域識別出來并使用計(jì)算機(jī)進(jìn)行處理是極為關(guān)鍵的。本論文探索了有效識別答題卡的方法,以matlab為工具,基于數(shù)字圖像處理技術(shù)對答題卡填涂區(qū)域進(jìn)行了識別,并對識別的結(jié)果進(jìn)行了處理,得到了結(jié)果。本論文利用Hough變換的直線檢測技術(shù)檢測圖像的傾斜度,判斷圖像是否傾斜,對存在傾斜的圖像進(jìn)行旋轉(zhuǎn)校正。最終實(shí)現(xiàn)答題卡答案的定位和檢測。論文使用像素統(tǒng)計(jì)方法進(jìn)行識別,利用黑白顏色灰度值的巨大差異對二值圖像的灰度值進(jìn)行累加并進(jìn)行閾值判定,識別錯誤效率極低,能夠準(zhǔn)確的識別答題卡的涂卡標(biāo)記。關(guān)鍵詞:Hough變換,答題卡識別,matlab,一、設(shè)計(jì)任務(wù)、目的和要求本設(shè)

3、計(jì)以matlab為工具利用數(shù)字圖像處理技術(shù)對答題卡進(jìn)行了識別,并對識別結(jié)果進(jìn)行了處理。注意到答題卡在采集圖像的過程中由于各種原因可能會產(chǎn)生圖像傾斜、水平或垂直錯位,要進(jìn)行正確識別首先必須對其進(jìn)行校正,再依據(jù)像素檢索技術(shù)進(jìn)行識別。二、總體方案設(shè)計(jì)說明系統(tǒng)運(yùn)行環(huán)境,編程軟件平臺,編碼算法原理,算法流程圖設(shè)計(jì)本系統(tǒng)運(yùn)行在當(dāng)今主流的Windows7系統(tǒng),使用較新的MATLAB2012b進(jìn)行設(shè)計(jì)。在進(jìn)行旋轉(zhuǎn)校正時,先使用Hough變換檢測出答題卡邊緣直線,調(diào)用lines函數(shù)的參數(shù)得到傾斜角度并進(jìn)行旋轉(zhuǎn)變換從而消除答題卡傾斜狀態(tài)。將掃描部分分為7個掃描區(qū)域,分別使用像素檢索技術(shù),對各個檢索區(qū)域內(nèi)的灰度值進(jìn)

4、行累加,并對累加和進(jìn)行閾值判定,從而得出檢索區(qū)域顏色,完成判定。最后再與標(biāo)準(zhǔn)答案進(jìn)行比對,得出成績。流程圖:開始灰度化Hough變換圖像旋轉(zhuǎn)圖像傾斜嗎? 是 是 否 測量各個掃描區(qū)域的起始坐標(biāo)分別依次統(tǒng)計(jì)各大掃描區(qū)域內(nèi)各個檢測區(qū)域的灰度值閾值判定,得出所檢測區(qū)域顏色并賦值與標(biāo)準(zhǔn)答案比對算出成績結(jié)束三、程序設(shè)計(jì) clc;clear;close;A=imread('原圖.jpg');%讀取圖像imshow(A),title('原圖');gray=rgb2gray(A);bw=edge(gray,'canny');%canny算子邊緣檢測得到二值邊緣圖

5、像h,t,r=hough(bw,'RhoResolution',0.5,'ThetaResolution',0.5); %Hough變換figure,imshow(imadjust(mat2gray(h),'XData',t,'YData',r,'InitialMagnification','fit'),title('Hough變換矩陣');%顯示Hough變換矩陣xlabel('theta'),ylabel('rho');axis on, axis

6、normal,hold on;P=houghpeaks(h,2);x=t(P(:,2);y=r(P(:,1);plot(x,y,'s','color','r'),title('');%獲取并標(biāo)出參數(shù)平面的峰值點(diǎn)lines=houghlines(bw,t,r,P,'FillGap',5,'Minlength',7);%檢測圖像中的直線段figure,imshow(gray);hold on;max_len=0;for i=1:length(lines) xy=lines(i).point1;lines

7、(i).point2; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','g');%用綠色線段標(biāo)注直線段 plot(xy(:,1),xy(1,2),'x','LineWidth',2,'Color','y'); plot(xy(:,1),xy(2,2),'x','LineWidth',2,'Color','r');%標(biāo)注直線段端點(diǎn)endx=lines.theta;%由與圖像邊緣平行的

8、直線段的斜率得到整個圖像旋轉(zhuǎn)的角度B=imrotate(gray,x);%圖像修正figure,imshow(B),title('旋轉(zhuǎn)后圖像');T=graythresh(B);%使用OTSU方法獲得閥值Tresult=im2bw(B,T);%二值化圖像figure,imshow(result),title('二值化后結(jié)果');%掃描區(qū)域:在本程序中,有7個掃描區(qū)域,分別對應(yīng)題號為1-5,6-10,11-15,16-20,21-25,26-30,31-35這幾個區(qū)域n=52;m=244;% 首先測得答題區(qū)域第一題A選項(xiàng)左上角的坐標(biāo)(52,244)s=60;t=9

9、0;%s為上下兩個掃描區(qū)域的距離,t為左右兩個掃描區(qū)域的距離。P=4;Q=5;%P為字母項(xiàng)的個數(shù)(這里有ABCD共有4項(xiàng)),Q為每個小區(qū)域選項(xiàng)數(shù)。interval_length=14;%左右相鄰兩題填涂區(qū)域左邊線的距離interval_width=9;%上下相鄰兩題填涂區(qū)域上邊線的距離length=11;%填涂區(qū)域的長度width=6;%填涂區(qū)域的寬度a2=zeros(4,5);%初始化灰度值統(tǒng)計(jì)矩陣%第1-5題區(qū)域的檢測for P=1:4 for Q=1:5 %m=244;n=52;%第1-5題區(qū)域的檢測的起始坐標(biāo)(即第一題A選項(xiàng)左上角的坐標(biāo)) a1=result(m+(P-1)*(inte

10、rval_width+1) :m+(P-1)*(interval_width+1)+width,n+(Q-1)*(interval_length+1):n+(Q-1)*(interval_length+1)+length); %得到矩形區(qū)域內(nèi)各像素的灰度值 sum1=sum(sum(a1);%計(jì)算統(tǒng)計(jì)的矩形區(qū)域內(nèi)像素灰度值之和 a2(P,Q)=sum1;%多次循環(huán)后得到20個統(tǒng)計(jì)區(qū)域的灰度值,并依次放在a2矩陣中 endend a2(a2<80)=1;a2(a2>=81)=0;%對灰度值統(tǒng)計(jì)矩陣?yán)锏臄?shù)值進(jìn)行處理,大于某一閥值的值賦1,其余的賦0。 %在此程序中,涂黑則相應(yīng)數(shù)值為1。

11、result1_5=a2;%存儲1-5題的結(jié)果%第6-10題區(qū)域的檢測for P=1:4 for Q=1:5 a1=result(m+s*1+(P-1)*(interval_width+1) :m+s*1+(P-1)*(interval_width+1)+width,n+(Q-1)*(interval_length+1):n+(Q-1)*(interval_length+1)+length); sum1=sum(sum(a1); a2(P,Q)=sum1; endend a2(a2<80)=1;a2(a2>=81)=0;result6_10=a2; %存儲6-10題的結(jié)果%第11-

12、15題區(qū)域的檢測for P=1:4 for Q=1:5 a1=result(m+(P-1)*(interval_width+1) :m+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):n+t*1+(Q-1)*(interval_length+1)+length); sum1=sum(sum(a1); a2(P,Q)=sum1; endend a2(a2<80)=1;a2(a2>=81)=0;result11_15=a2; %存儲11-15題的結(jié)果%第16-20題區(qū)域的檢測for P=1:4 for Q=1

13、:5 a1=result(m+s*1+(P-1)*(interval_width+1) :m+s*1+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):n+t*1+(Q-1)*(interval_length+1)+length); sum1=sum(sum(a1); a2(P,Q)=sum1; endend a2(a2<80)=1;a2(a2>=81)=0;result16_20=a2; %存儲16-20題的結(jié)果%第21-25題區(qū)域的檢測for P=1:4 for Q=1:5 a1=result(m+s*

14、2+(P-1)*(interval_width+1) :m+s*2+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):n+t*1+(Q-1)*(interval_length+1)+length); sum1=sum(sum(a1); a2(P,Q)=sum1; endend a2(a2<80)=1;a2(a2>=81)=0;result21_25=a2; %存儲21-25題的結(jié)果%第26-30題區(qū)域的檢測for P=1:4 for Q=1:5 a1=result(m+s*3+(P-1)*(interval

15、_width+1) :m+s*3+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):n+t*1+(Q-1)*(interval_length+1)+length); sum1=sum(sum(a1); a2(P,Q)=sum1; endend a2(a2<80)=1;a2(a2>=81)=0;result26_30=a2; %存儲26-30題的結(jié)果%第31-35題區(qū)域的檢測for P=1:4 for Q=1:5 a1=result(m+s*4+(P-1)*(interval_width+1) :m+s*4+

16、(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):n+t*1+(Q-1)*(interval_length+1)+length); sum1=sum(sum(a1); a2(P,Q)=sum1; endend a2(a2<80)=1;a2(a2>=81)=0;result31_35=a2; %存儲31-35題的結(jié)果answer=result1_5,result6_10,result11_15,result16_20,result21_25,result26_30,result31_35;%將所檢測的7個區(qū)域

17、的結(jié)果匯總dlmwrite('Result.txt',answer);%以txt文本的形式輸出結(jié)果矩陣disp(answer);%在command窗口實(shí)時顯示結(jié)果%附加一個統(tǒng)計(jì)錯誤的并顯示分?jǐn)?shù)的部分,假定正確答案是35個CT=zeros(4,35);%初始化矩陣T(1,:)=1;%設(shè)定正確答案的參數(shù)mark1=answer-T;wrongx=sum(mark1=0);%當(dāng)結(jié)果選錯時,每一列將分別多一個1與-1。選擇正確時,此列都是0。A=sum(sum(wrongx);%統(tǒng)計(jì)非零的結(jié)果。wrong=A/2;%由于-1與1是成對出現(xiàn)的,所以需要將上一步所得結(jié)果除以2.score=

18、35-wrong;%算出結(jié)果fprintf('選擇題得分為%d',score);%在command窗口輸出成績四、模塊測試與分析1、首先進(jìn)行Hough變換,得到Hough變換矩陣如下所述(見圖1)。圖1可以觀察到2個峰值。2、使用Houghlines函數(shù)檢測直線,得到如下結(jié)果(見圖2)圖2并使用lines.theta語句得到直線角度,即為圖像傾斜角度。x=lines.theta x =43、修正圖像(如圖3所示)圖3這時觀察到傾斜的圖像已經(jīng)得到改正。4、在二值化后使用像素檢索技術(shù)對灰度值進(jìn)行統(tǒng)計(jì)。分為7個掃描區(qū)域,如圖4中7個方框所示。圖45、進(jìn)行灰度統(tǒng)計(jì),得到結(jié)果矩陣。最后處理由fprintf語句得到分?jǐn)?shù)。五、測試與調(diào)試過程這次實(shí)驗(yàn)遇到的第一個問題是如何由Hough變換得到直線角度。這個是教材上沒有的。網(wǎng)上提示說是調(diào)用lines函數(shù),但沒有說怎么調(diào)用。后來才從一篇Hough變換的文章中知道是lines.theta,類似于C#的調(diào)用方法。還有就是在本次設(shè)計(jì)中我第一次是將旋轉(zhuǎn)部分和灰度值統(tǒng)計(jì)部分分開寫成2個m文件的,然后再直接合并,結(jié)果發(fā)現(xiàn)有誤。經(jīng)過檢查后發(fā)現(xiàn)matlab在讀取圖片時會在原圖片外加一圈白色“幕布”,導(dǎo)致原圖片的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論