本發(fā)明涉及圖象定位解析技術(shù),應(yīng)用于圖象分割,具體涉及一種基于三點(diǎn)定位和直線定位的圖片分割方法及系統(tǒng)。
背景技術(shù):
現(xiàn)有的計(jì)算機(jī)閱卷方式是:首先用高速掃描儀將答題卡掃描至掃描端后通過網(wǎng)絡(luò)上傳至閱卷服務(wù)器,客觀題部分根據(jù)設(shè)置好的標(biāo)準(zhǔn)答案,系統(tǒng)會(huì)自動(dòng)統(tǒng)計(jì)結(jié)果,無(wú)需人工干預(yù),主觀題部分根據(jù)提供的切割方案將上傳的答題卡主觀題部分自動(dòng)切割,由指定的閱卷員進(jìn)行網(wǎng)上閱卷,待主觀題部分全部批閱完后,系統(tǒng)可將客觀題部分和主觀題部分進(jìn)行統(tǒng)計(jì)匯總,并可導(dǎo)出相關(guān)的統(tǒng)計(jì)結(jié)果。如圖6所示。
計(jì)算機(jī)網(wǎng)絡(luò)閱卷由于其在閱卷質(zhì)量、閱卷效率和對(duì)提高教學(xué)質(zhì)量等方面具有顯著的優(yōu)勢(shì),特別是在教學(xué)質(zhì)量監(jiān)測(cè)與評(píng)估要求不斷提高的今天,它必將日益受到重視并成為未來各類考試的主要閱卷方式。
目前的計(jì)算機(jī)閱卷在實(shí)現(xiàn)答題卡主觀題部分切割圖片時(shí),采用三點(diǎn)定位的方式,依據(jù)答題卡上預(yù)先打印的三個(gè)錨點(diǎn),定義一個(gè)標(biāo)準(zhǔn)的方框,實(shí)現(xiàn)圖片的切割。這種方式基本可以滿足中學(xué)以上的切割答題卡的需求,但在小學(xué)生存在亂涂亂畫時(shí),存在三個(gè)錨點(diǎn)不能準(zhǔn)確定位的情況,切割答題區(qū)域時(shí),就會(huì)出現(xiàn)錯(cuò)誤。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)存在的不足,本發(fā)明公開了一種基于三點(diǎn)定位和直線定位的圖片識(shí)別方法及系統(tǒng),基于三點(diǎn)定位和直線定位的切割圖片,來實(shí)現(xiàn)圖象分割,達(dá)到切分答題區(qū)域的目的。
為實(shí)現(xiàn)上述目的,本發(fā)明的具體方案如下:
一種基于三點(diǎn)定位和直線定位的圖片分割方法,包括以下步驟:
答題卡的掃描:通過掃描組件逐張獲取每張答題卡,將答題卡制作成對(duì)應(yīng)的圖片,將圖片保存至設(shè)定的位置,數(shù)據(jù)庫(kù)記錄存儲(chǔ)位置;
答題卡圖片旋轉(zhuǎn):通過數(shù)據(jù)庫(kù)讀取每一張圖片,識(shí)別整個(gè)答題卡的開始標(biāo)點(diǎn)和結(jié)束標(biāo)點(diǎn),依據(jù)標(biāo)點(diǎn)旋轉(zhuǎn)圖片,保證圖片標(biāo)點(diǎn)之間水平;
答題卡分割:通過數(shù)據(jù)庫(kù)讀取旋轉(zhuǎn)后的每一張圖片,讀取圖片中每一個(gè)標(biāo)點(diǎn)的位置,依據(jù)數(shù)據(jù)庫(kù)中設(shè)置的答題區(qū)域的長(zhǎng)寬,通過計(jì)算下一個(gè)標(biāo)點(diǎn)是否為結(jié)束標(biāo)點(diǎn),判斷結(jié)束標(biāo)點(diǎn)位 置;讀取圖片中開始標(biāo)點(diǎn)和結(jié)束標(biāo)點(diǎn)之間是否存在直線,如果存在,則該答題區(qū)域?yàn)橐坏涝囶},如果不存在直線,擇認(rèn)為選取的結(jié)束標(biāo)點(diǎn)錯(cuò)誤,繼續(xù)尋找下一個(gè)標(biāo)點(diǎn),判斷是否是對(duì)應(yīng)的結(jié)束節(jié)點(diǎn);
找到結(jié)束節(jié)點(diǎn),將該答題區(qū)域使Graphics方法,切分成一張小圖片,并將對(duì)應(yīng)信息記錄到對(duì)應(yīng)數(shù)據(jù)庫(kù)中。對(duì)應(yīng)信息是指:對(duì)應(yīng)圖片名稱及題號(hào)、試題在系統(tǒng)中的編號(hào)等。每張?jiān)嚲碓跀?shù)據(jù)庫(kù)中都對(duì)應(yīng)一個(gè)ID,切分的每張圖片都有一個(gè)小ID,ID之間對(duì)應(yīng)起來即可。
進(jìn)一步的,在掃描答題卡之前還需要答題卡的制作:將主觀題及客觀題分別設(shè)置在同一張答題卡上并分別設(shè)置對(duì)應(yīng)的答題框,在客觀題對(duì)應(yīng)的答題框內(nèi)設(shè)定起始位置開始標(biāo)點(diǎn),設(shè)置起始標(biāo)點(diǎn)橫豎對(duì)應(yīng)的結(jié)束標(biāo)點(diǎn),設(shè)置起始標(biāo)點(diǎn)和結(jié)束標(biāo)點(diǎn)對(duì)應(yīng)的直線,在主觀題對(duì)應(yīng)的答題框內(nèi)對(duì)每個(gè)主觀題均設(shè)置開始結(jié)束對(duì)應(yīng)標(biāo)點(diǎn)并設(shè)置標(biāo)點(diǎn)之間連線。
更進(jìn)一步的,在制作答題卡時(shí),在標(biāo)點(diǎn)之前還需要從數(shù)據(jù)庫(kù)中獲取答案數(shù)量及每個(gè)試題的答題空間大小,計(jì)算客觀題答題區(qū)域長(zhǎng)寬,獲取試題數(shù)量,獲取客觀題答案?jìng)€(gè)數(shù)及標(biāo)號(hào),計(jì)算得出客觀題在答題卡中起始位置;每個(gè)主觀題單獨(dú)計(jì)算在答題卡中的位置。
進(jìn)一步的,通過掃描組件獲取每張答題卡時(shí),在數(shù)據(jù)庫(kù)中記錄圖片信息,包括名稱及掃描時(shí)間,掃描出錯(cuò)時(shí),數(shù)據(jù)庫(kù)記錄出錯(cuò)出現(xiàn)位置。
進(jìn)一步的,旋轉(zhuǎn)圖片時(shí),旋轉(zhuǎn)角度計(jì)算方式:定義旋轉(zhuǎn)軸的位置為A點(diǎn),觸點(diǎn)點(diǎn)下的位置為B點(diǎn),觸點(diǎn)彈起的位置為C點(diǎn),由ABC三個(gè)頂點(diǎn)構(gòu)成了一個(gè)三角形,各頂點(diǎn)所在的角為角A、角B、角C,各頂點(diǎn)正對(duì)的三角形的邊為a、b、c,計(jì)算角A的度數(shù)。
更進(jìn)一步的,計(jì)算角A的度數(shù)時(shí),A點(diǎn)的坐標(biāo)(x,y)通過圖片的位置和圖片的長(zhǎng)寬獲取到,B點(diǎn)和C點(diǎn)的坐標(biāo)(x1,y1),(x2,y2)可以從motionEvent中得到,三角形各邊邊長(zhǎng)為:
double a=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double b=Math.sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
double c=Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
得到角A的余弦值為double cosA=(b*b+c*c-a*a)/(2*b*c);
則角A的弧度為double arcA=Math.acos(cosA);
這個(gè)弧度是0-PI之間的,換成角度使用double angleA=arcA*180/Math.PI。
其中,motionEvent旋轉(zhuǎn)事件Double數(shù)據(jù)類型,雙精度的
Math.sqrt 開平方
Math.acos 余弦
double angleA:聲明變量
Math.PI:圓周率,π=3.14159265….
進(jìn)一步的,還包括答題卡條形碼獲取,查詢數(shù)據(jù)庫(kù)存儲(chǔ)的條形碼位置,將條形碼位置切圖,使Graphics方法,依據(jù)數(shù)據(jù)庫(kù)存儲(chǔ)的坐標(biāo)點(diǎn)對(duì)應(yīng)標(biāo)點(diǎn)獲取相對(duì)坐標(biāo),獲取數(shù)據(jù)庫(kù)中存儲(chǔ)的長(zhǎng)寬,制作新的圖片,圖片信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。每張?jiān)嚲碓跀?shù)據(jù)庫(kù)中有唯一標(biāo)識(shí),條形碼和其他試題都屬于試卷的一部分。
一種基于三點(diǎn)定位和直線定位的圖片分割方系統(tǒng),包括:
答題卡的掃描模塊:通過掃描組件逐張獲取每張答題卡,將答題卡制作成對(duì)應(yīng)的圖片,將圖片保存至設(shè)定的位置,數(shù)據(jù)庫(kù)記錄存儲(chǔ)位置;
答題卡圖片旋轉(zhuǎn)模塊:通過數(shù)據(jù)庫(kù)讀取每一張圖片,識(shí)別整個(gè)答題卡的開始標(biāo)點(diǎn)和結(jié)束標(biāo)點(diǎn),依據(jù)標(biāo)點(diǎn)旋轉(zhuǎn)圖片,保證圖片標(biāo)點(diǎn)之間水平;
答題卡分割模塊:通過數(shù)據(jù)庫(kù)讀取旋轉(zhuǎn)后的每一張圖片,讀取圖片中每一個(gè)標(biāo)點(diǎn)的位置,依據(jù)數(shù)據(jù)庫(kù)中設(shè)置的答題區(qū)域的長(zhǎng)寬,通過計(jì)算下一個(gè)標(biāo)點(diǎn)是否為結(jié)束標(biāo)點(diǎn),判斷結(jié)束標(biāo)點(diǎn)位置;讀取圖片中開始標(biāo)點(diǎn)和結(jié)束標(biāo)點(diǎn)之間是否存在直線,如果存在,則該答題區(qū)域?yàn)橐坏涝囶},如果不存在直線,擇認(rèn)為選取的結(jié)束標(biāo)點(diǎn)錯(cuò)誤,繼續(xù)尋找下一個(gè)標(biāo)點(diǎn),判斷是否是對(duì)應(yīng)的結(jié)束節(jié)點(diǎn);找到結(jié)束節(jié)點(diǎn),將該答題區(qū)域使Graphics方法,切分成一張小圖片,并將對(duì)應(yīng)信息記錄到對(duì)應(yīng)數(shù)據(jù)庫(kù)中。
本發(fā)明的有益效果:
本發(fā)明答題卡的掃描:試卷掃描成圖片,方便后續(xù)方法進(jìn)行,答題卡圖片旋轉(zhuǎn):使傾斜的圖片水平,方便后續(xù)切分圖片,答題卡分割:將試卷分割成每道題目一張圖片,方便閱卷,本發(fā)明的方法可以提高網(wǎng)絡(luò)閱卷答案區(qū)切分的準(zhǔn)確率,規(guī)避小學(xué)生亂寫亂畫引起的試卷切圖是定位不準(zhǔn)的風(fēng)險(xiǎn),使老師在進(jìn)行網(wǎng)絡(luò)閱卷時(shí),不會(huì)因?yàn)榇痤}區(qū)域切分錯(cuò)誤而引起無(wú)法判斷成績(jī)的情況。
附圖說明
圖1是答題卡制作方法流程圖;
圖2是答題卡掃描流程圖;
圖3是答題卡條形碼獲取流程圖;
圖4是答題卡答案區(qū)流程圖;
圖5圖片旋轉(zhuǎn)示意圖;
圖6現(xiàn)有的網(wǎng)上閱卷系統(tǒng)流程圖。
具體實(shí)施方式:
下面結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說明:
圖象定位解析技術(shù),應(yīng)用于圖象分割。所謂圖像分割就是按一定的規(guī)則將圖像劃分成若干有意義的區(qū)域,即各區(qū)域的并集是整個(gè)圖像,各區(qū)域的交集為0。
圖象分割將圖象表示為物理上有意義的連通區(qū)域的集合,也就是根據(jù)目標(biāo)與背景的先驗(yàn)知識(shí),對(duì)圖象中的目標(biāo),背景進(jìn)行標(biāo)記、定位,然后將目標(biāo)從背景或其他偽目標(biāo)中分離出來。
具體方法是:
如圖1所示,答題卡制作方法:從數(shù)據(jù)庫(kù)中獲取答案數(shù)量及每個(gè)試題的答題空間大小,計(jì)算客觀題答題區(qū)域長(zhǎng)寬(客觀題通知設(shè)置答題框),獲取試題題數(shù)量,獲取客觀題答案?jìng)€(gè)數(shù)及標(biāo)號(hào),計(jì)算得出客觀題在答題卡中起始位置,設(shè)定起始位置開始標(biāo)點(diǎn),設(shè)置起始位置橫豎對(duì)應(yīng)的結(jié)束標(biāo)點(diǎn)。設(shè)置起始位置和結(jié)束位置對(duì)應(yīng)的直線。主觀題單獨(dú)設(shè)置答題框,每個(gè)主觀題單獨(dú)計(jì)算在答題卡中的位置,設(shè)置開始結(jié)束對(duì)應(yīng)標(biāo)點(diǎn),設(shè)置標(biāo)點(diǎn)之間連線,結(jié)束答題卡制作。
如圖2所示,答題卡掃描:通過掃描儀,逐張獲取每張?jiān)嚲?,將試卷制作成?duì)應(yīng)的圖片,數(shù)據(jù)庫(kù)記錄圖片信息(名稱、掃描時(shí)間)等,掃描出錯(cuò)時(shí),數(shù)據(jù)庫(kù)記錄出錯(cuò)出現(xiàn)位置,圖片保存到設(shè)定的位置,數(shù)據(jù)庫(kù)記錄存儲(chǔ)位置;
如圖5所示,圖片旋轉(zhuǎn):依據(jù)數(shù)據(jù)庫(kù)讀取每一張圖片,依據(jù)整個(gè)答題卡的開始標(biāo)點(diǎn)和右側(cè)結(jié)束標(biāo)點(diǎn),依據(jù)標(biāo)點(diǎn)旋轉(zhuǎn)圖片,保證圖片標(biāo)點(diǎn)之間水平。旋轉(zhuǎn)角度計(jì)算方式:定義旋轉(zhuǎn)軸的位置為A點(diǎn),觸點(diǎn)點(diǎn)下的位置為B點(diǎn),觸點(diǎn)彈起的位置為C點(diǎn),由ABC三個(gè)頂點(diǎn)構(gòu)成了一個(gè)三角形,各頂點(diǎn)所在的角為角A、角B、角C,各頂點(diǎn)正對(duì)的三角形的邊為a、b、c,計(jì)算角A的度數(shù)。
A點(diǎn)的坐標(biāo)(x,y)通過圖片的位置和圖片的長(zhǎng)寬獲取到,B點(diǎn)和C點(diǎn)的坐標(biāo)(x1,y1),(x2,y2)可以從motionEvent中得到,三角形各邊邊長(zhǎng)為:
double a=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double b=Math.sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
double c=Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
得到角A的余弦值為double cosA=(b*b+c*c-a*a)/(2*b*c);
則角A的弧度為double arcA=Math.acos(cosA);
這個(gè)弧度是0-PI之間的,換成角度使用double angleA=arcA*180/Math.PI
如圖3所示,答題卡條形碼獲取方法:查詢數(shù)據(jù)庫(kù)存儲(chǔ)的條形碼位置,將條形碼位置切圖,使Graphics方法,依據(jù)數(shù)據(jù)庫(kù)存儲(chǔ)的坐標(biāo)點(diǎn)對(duì)應(yīng)標(biāo)點(diǎn)獲取相對(duì)坐標(biāo),獲取數(shù)據(jù)庫(kù)中存儲(chǔ)的長(zhǎng)寬,制作新的圖片,圖片信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。
如圖4所示,答題卡答案區(qū):依據(jù)數(shù)據(jù)庫(kù)讀取每一張圖片,讀取圖片中每一個(gè)標(biāo)點(diǎn),讀取位置,依據(jù)數(shù)據(jù)庫(kù)中設(shè)置的答題區(qū)域的長(zhǎng)寬,通過計(jì)算下一個(gè)標(biāo)點(diǎn)是否為結(jié)束標(biāo)點(diǎn),判斷結(jié)束標(biāo)點(diǎn)位置。讀取圖片中開始標(biāo)點(diǎn)和結(jié)束標(biāo)點(diǎn)之間是否存在直線,如果存在,擇認(rèn)為該答題區(qū)域?yàn)橐坏涝囶},如果不存在直線,擇認(rèn)為選取的結(jié)束標(biāo)點(diǎn)錯(cuò)誤,繼續(xù)尋找下一個(gè)標(biāo)點(diǎn),判斷是否是對(duì)應(yīng)的結(jié)束節(jié)點(diǎn)。找到以后,將該答題區(qū)域使Graphics方法,切分成一張小圖片,并將對(duì)應(yīng)信息記錄到對(duì)應(yīng)數(shù)據(jù)庫(kù)中。
上述雖然結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對(duì)本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動(dòng)即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以內(nèi)。