本發(fā)明涉及圖像識別定位領(lǐng)域,特別涉及一種基于霍夫變換的無定位點(diǎn)試卷矩形定位框的識別方法。
背景技術(shù):
隨著社會教育制度的完善和考試制度的日益規(guī)范,考試的類型和方式也不斷增多,但傳統(tǒng)的紙質(zhì)考試仍然是目前考試的主流。目前的自動閱卷系統(tǒng)主要有光標(biāo)閱讀機(jī)和基于圖像處理的閱卷系統(tǒng)。而答題試卷大致分為兩種,一種是有點(diǎn)位點(diǎn)的,一種是無定位點(diǎn)的;對于當(dāng)前無定位點(diǎn)的試卷,定位的方法主要是通過題號和選擇題填涂區(qū)域的識別共同確定試卷的定位點(diǎn),這種方法需要成熟,精準(zhǔn)的識別庫,商業(yè)成本較高;本發(fā)明提出了一種基于霍夫變換的矩形識別算法,能夠較準(zhǔn)確識別出試卷中的矩形框,對抗試卷矩形斷裂、模糊、傾斜等多種情況,魯棒性較好。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種準(zhǔn)確、穩(wěn)定的無定位點(diǎn)試卷矩形框識別方法。
一種無定位點(diǎn)試卷中待處理試卷的矩形定位框識別方法,包含以下步驟:
1)讀入試卷,進(jìn)行二值化、糾偏處理;
2)讀取模板記錄的矩形區(qū)域信息,運(yùn)用“最大輪廓尋找”方法得到區(qū)域的最大輪廓,用最小的矩形對輪廓進(jìn)行擬合;
3)判斷擬合出來的矩形大小與記錄的矩形大小是否一致,方法是設(shè)定一個誤差范圍,分別比較兩個矩形的長度和高度的誤差是否在設(shè)定范圍內(nèi);若在設(shè)定范圍內(nèi),則該擬合出來的矩形即是需要識別的矩形;若不在設(shè)定范圍內(nèi),則進(jìn)行步驟4);
4)運(yùn)用霍夫變換檢測出區(qū)域信息的線段,并對檢測出的線段作預(yù)處理,包括分類、合并;
5)對預(yù)處理后的線段進(jìn)行加權(quán)排序;計算得到每條線段的權(quán)值后,根據(jù)權(quán)值從大到小對線段進(jìn)行排序;
6)將權(quán)值位于前三位的線段提取出來,其余舍棄;
7)從上下左右四個方向各取出一條線段進(jìn)行擬合,擬合的方法是:求出上線段與左線段的交點(diǎn)Point1,下線段和右線段的交點(diǎn)Point2,擬合得到的矩形長度為:Point2.x-Point1.x;高度為:Point2.y-Point1.y;
8)比較模板中記錄的矩形長高,若誤差均在設(shè)定范圍之內(nèi),則認(rèn)為識別成功,返回擬合矩形的坐標(biāo)和長高,該擬合出來的矩形即是需要識別的矩形;若長度或高度的誤差其中有一個超過設(shè)定范圍,則進(jìn)行下一步;
9)上方線段集合中取出下一條候選線段,再次進(jìn)行擬合;
10)當(dāng)上方線段集合全部測試完畢并且沒有找到合適的矩形時,將該方向的線段索引重置,并按照“上、左、下、右”的順序?qū)⒏木€段的權(quán)限移至下一個方向;
11)四個方向上的所有線段集合全部測試擬合完畢后,若均沒找到合適的矩形則輸出“矩形未找到”。
進(jìn)一步的,線段權(quán)值包括線段位置誤差權(quán)值和線段長度誤差權(quán)值;
線段位置誤差權(quán)值計算公式為:
位置誤差權(quán)值=0.8^abs(當(dāng)前線段序號-記錄線段序號);
線段長度誤差權(quán)值計算公式為:
長度誤差權(quán)值=(線段長度-最小線段長度)/(最大線段長度-最小線段長度)。
一種無定位點(diǎn)試卷中空白模板試卷的選擇矩形方法,包含以下步驟:
1)通過掃描得到的原始試卷圖像進(jìn)行二值化處理;
2)對其進(jìn)行糾偏處理;
3)得到糾正后的圖像后,用“尋找最大輪廓”法找出試卷上面積最大的三個矩形,并記錄其位置;
4)對矩形進(jìn)行一次“矩形直線重疊判定”,確保最大輪廓尋找出來矩形的與直線擬合出來的矩形大小一致。
進(jìn)一步的,糾偏處理具體為尋找出圖像中面積最大的輪廓,然后用一個最小的矩形將輪廓圍住,計算矩形的角度,得出試卷的傾斜角度,再對試卷糾偏。
進(jìn)一步的,“矩形直線重疊判定”方法如下:
1)確定矩形框的像素寬,一般3~6個像素,根據(jù)經(jīng)驗(yàn)設(shè)置為5;
2)從定位區(qū)域由上至下橫向掃描圖像,向下依次掃描5個像素點(diǎn),若其中有黑色像素點(diǎn),則停止掃描,并將該行的總像素SumPix加1;
3)當(dāng)掃描完一行之后,比較SumPix與定位區(qū)域?qū)挼拇笮?,若SumPix大于定位區(qū)域?qū)挼?0%,則認(rèn)為該行有可能是矩形的邊長,并停止掃描;否則,則將該行像素全部置零;
4)依次從上、下、左、右四個方向?qū)D像進(jìn)行清除操作,濾去盡可能多的噪聲;
5)對經(jīng)過清除處理后的矩形區(qū)域圖像運(yùn)用霍夫變換函數(shù)進(jìn)行直線檢測,得到該區(qū)域的線段信息;
6)對檢測出來的線段進(jìn)行二次處理;
7)記錄四個方向上矩形線段的序號信息。
進(jìn)一步的,所述二次處理步驟如下:
1)將線段分成四類,一是垂直左邊的線段,二是垂直右邊的線段,三是水平上方的線段,四是水平底部的線段,分類方法:根據(jù)線段坐標(biāo)計算線段的角度,再比較線段坐標(biāo)與區(qū)域中心的大小關(guān)系,得出線段的分類;
2)合并線段:從分類后的線段中取出兩條線段,計算他們在各自方向上的距離,垂直的線段距離是y軸坐標(biāo)的相減的絕對值,水平的線段距離是x軸坐標(biāo)的相減的絕對值,比較距離是否在5個像素內(nèi),若是則將兩條直線合并,合并的方法是取兩條直線各自端點(diǎn)的坐標(biāo);
3)將合并后的線段排序,因?yàn)橐涗浘匦芜吙蚓€段在所有識別出的線段的索引序號,因此需要對不同位置的線段需要作不同的排序:
頂部線段:根據(jù)y軸大小排序;
底部線段:根據(jù)尋找區(qū)域底部位置距離大小排序;
左側(cè)線段:根據(jù)x軸大小排序;
右側(cè)線段:根據(jù)尋找區(qū)域右側(cè)位置距離大小排序。
本發(fā)明相對于現(xiàn)有技術(shù)具有如下的優(yōu)點(diǎn)及效果:能夠準(zhǔn)確定位到矩形框,相對于以前的方法,矩形識別一般用尋找矩形輪廓和尋找直線交點(diǎn),第一種方法在矩形多處斷裂或有線段粘連在矩形框上時便會出錯,魯棒性不高;第二種方法會受到直線識別的干擾,并且在識別出多條線段的情況下難以判斷,而本發(fā)明中的方法,對霍夫變換檢測的線段進(jìn)行預(yù)處理,并加入了權(quán)值計算,能夠很好地解決矩形斷裂、像素干擾、多條線段的問題,準(zhǔn)確對矩形進(jìn)行定位識別。
附圖說明
圖1為霍夫變化公式圖形表示圖;
圖2是空白模板試卷上的選擇矩形流程圖;
圖3是測試樣本試卷上尋找矩形的流程圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)說明:
本發(fā)明是基于霍夫變換的,霍夫變換是圖像變換中的經(jīng)典手段之一,主要用來從圖像中分離出具有某種相同特征的幾何形狀(如,直線,圓等)?;舴蜃儞Q尋找直線與圓的方法相比與其它方法可以更好的減少噪聲干擾。經(jīng)典的霍夫變換常用來檢測直線,圓,橢圓等。
霍夫變換檢測直線算法思想:
每個像素坐標(biāo)點(diǎn)經(jīng)過變換都變成都直線特質(zhì)有貢獻(xiàn)的統(tǒng)一度量,一個簡單的例子如下:一條直線在圖像中是一系列離散點(diǎn)的集合,通過一個直線的離散極坐標(biāo)公式,可以表達(dá)出直線的離散點(diǎn)幾何等式如下:
X*cos(theta)+y*sin(theta)=r;
其中角度theta指r與X軸之間的夾角,r為到直線幾何垂直距離。任何在直線上點(diǎn),x,y都可以表達(dá),其中r,theta是常量。該公式圖形表示如圖1所示。
然而在實(shí)現(xiàn)的圖像處理領(lǐng)域,圖像的像素坐標(biāo)P(x,y)是已知的,而r,theta則是我們要尋找的變量。如果我們能繪制每個(r,theta)值根據(jù)像素點(diǎn)坐標(biāo)P(x,y)值的話,那么就從圖像笛卡爾坐標(biāo)系統(tǒng)轉(zhuǎn)換到極坐標(biāo)霍夫空間系統(tǒng),這種從點(diǎn)到曲線的變換稱為直線的霍夫變換。變換通過量化霍夫參數(shù)空間為有限個值間隔等分或者累加格子。當(dāng)霍夫變換算法開始,每個像素坐標(biāo)點(diǎn)P(x,y)被轉(zhuǎn)換到(r,theta)的曲線點(diǎn)上面,累加到對應(yīng)的格子數(shù)據(jù)點(diǎn),當(dāng)一個波峰出現(xiàn)時候,說明有直線存在。
矩形識別的算法分為兩大步,一是模板上矩形信息的記錄,二是待處理試卷上矩形的定位識別。其總體的思想是先在模板試卷上記錄矩形大小、邊框線段在識別出的所有直線中的排序索引和長度,根據(jù)這些記錄的信息在待處理試卷上作出矩形的識別。識別的方法分兩種,一是最大輪廓尋找,這個方法運(yùn)算速度快,在矩形斷裂很大、但只有一處的情況下仍然適用,即使矩形模糊情況下識別效果仍然良好,但受像素干擾較大,試卷上的字體若超出矩形,就會導(dǎo)致識別的失??;二是根據(jù)霍夫變換檢測出的直線擬合出一個跟記錄信息最相近的矩形,這種方法能夠很好地對抗矩形多處斷裂的情況,并且受書寫字體干擾少,但運(yùn)行速度會相對較慢。綜合兩種方法能夠較好地識別出大多試卷的矩形。
一、空白模板試卷的選擇矩形方法:
1)通過掃描得到的原始試卷圖像可能有彩色的,灰色的,為了統(tǒng)一處理,也為了簡化操作,因此首先需要對圖像進(jìn)行灰度化,二值化處理。二值化采用經(jīng)驗(yàn)二值化處理方法。
2)原始圖像可能存在傾斜的問題,二值化之后還有對其進(jìn)行糾偏處理。這里的糾偏方法采用“最大矩形糾偏”法。具體方法是:尋找出圖像中面積最大的輪廓,然后用一個最小的矩形將輪廓圍住,計算矩形的角度,得出試卷的傾斜角度,再對試卷糾偏。
3)得到糾正后的圖像后,用“尋找最大輪廓”法找出試卷上面積最大的三個矩形,并記錄其位置。
4)得到的三個矩形并不一定都可以作為定為矩形,因?yàn)檫吙驍嗔训脑?,可能會?dǎo)致尋找出來的矩形變小,因此需要對矩形進(jìn)行一次“矩形直線重疊判定”,作用是確保最大輪廓尋找出來矩形的與直線擬合出來的矩形大小一致。
“矩形直線重疊判定”方法如下:
試卷中的文字會影響線段的識別,為了盡可能過濾掉干擾的像素點(diǎn),首先需要對矩形區(qū)域進(jìn)行清除處理,步驟如下:
1)確定矩形框的像素寬,一般3~6個像素,根據(jù)經(jīng)驗(yàn)設(shè)置為5;
2)從定位區(qū)域由上至下橫向掃描圖像,向下依次掃描5個像素點(diǎn),若其中有黑色像素點(diǎn),則停止掃描,并將該行的總像素SumPix加1;
3)當(dāng)掃描完一行之后,比較SumPix與定位區(qū)域?qū)挼拇笮。鬝umPix大于定位區(qū)域?qū)挼?0%,則認(rèn)為該行有可能是矩形的邊長,并停止掃描;否則,則將該行像素全部置零。
4)依次從上、下、左、右四個方向?qū)D像進(jìn)行清除操作,濾去盡可能多的噪聲;
5)對經(jīng)過清除處理后的矩形區(qū)域圖像運(yùn)用霍夫變換函數(shù)進(jìn)行直線檢測,得到該區(qū)域的線段信息
6)由于圖像線段有厚度、斷裂等原因,霍夫變換檢測出來的線段一般效果不是很完美,例如一條線段會檢測出多條,因此需要對檢測出來的線段進(jìn)行二次處理。
7)記錄四個方向上矩形線段的序號信息。
其中,二次處理處理步驟如下:
1.將線段分成四類,一是垂直左邊的線段,二是垂直右邊的線段,三是水平上方的線段,四是水平底部的線段,分類方法:根據(jù)線段坐標(biāo)計算線段的角度,再比較線段坐標(biāo)與區(qū)域中心的大小關(guān)系,得出線段的分類
2.合并線段。從分類后的線段中取出兩條線段,計算他們在各自方向上的距離,垂直的線段距離是y軸坐標(biāo)的相減的絕對值,水平的線段距離是x軸坐標(biāo)的相減的絕對值,比較距離是否在5個像素內(nèi),若是則將兩條直線合并,合并的方法是取兩條直線各自端點(diǎn)的坐標(biāo)。
3.將合并后的線段排序,因?yàn)橐涗浘匦芜吙蚓€段在所有識別出的線段的索引序號,因此需要對不同位置的線段需要作不同的排序:
頂部線段:根據(jù)y軸大小排序;
底部線段:根據(jù)尋找區(qū)域底部位置距離大小排序;
左側(cè)線段:根據(jù)x軸大小排序;
右側(cè)線段:根據(jù)尋找區(qū)域右側(cè)位置距離大小排序;
二、待處理試卷上的矩形定位識別方法:
1)讀入試卷,進(jìn)行二值化、糾偏處理。
2)讀取模板記錄的矩形區(qū)域信息,運(yùn)用“最大輪廓尋找”方法得到區(qū)域的最大輪廓,用最小的矩形對輪廓進(jìn)行擬合。
3)判斷擬合出來的矩形大小與記錄的矩形大小是否一致,方法是設(shè)定一個誤差范圍,這里根據(jù)經(jīng)驗(yàn)設(shè)置為8個像素,分別比較兩個矩形的長度和高度的誤差是否在設(shè)定范圍內(nèi);若在設(shè)定范圍內(nèi),則該擬合出來的矩形即是需要識別的矩形。若兩者誤差較大,則進(jìn)行下一步。
4)運(yùn)用霍夫變換檢測出區(qū)域信息的線段,并對檢測出的線段作預(yù)處理,包括分類、合并;
5)對預(yù)處理后的線段進(jìn)行加權(quán)排序。線段加權(quán)排序是基于這樣的一個問題:霍夫變換會檢測出很多條線段,到底哪一條線段才是矩形的邊線?如果將所有的線段都測試一遍從而得出最優(yōu)的矩形的話,假設(shè)每個方向有10條線段,那么擬合出最優(yōu)矩形所需要的擬合嘗試最多有可能是:10^4=10000次。這樣識別的效率就會很低,因此需要對線段進(jìn)行加權(quán)排序,篩選出權(quán)值最高,也就是最有可能是矩形邊線上的線段,將不可能的線段拋棄,最后得到權(quán)值最高的三條線段,那么每次擬合矩形最糟糕也只是3^4=81次,而很多情況下,因?yàn)橐呀?jīng)篩選出了權(quán)值最高的線段,因此一般只需要3-5次的嘗試便可以得到最優(yōu)的矩形。所以線段加權(quán)排序是非常重要的一步。線段權(quán)值包括兩個方面的內(nèi)容,一是線段位置誤差權(quán)值,二是線段長度誤差權(quán)值。因?yàn)樵仍谀0迳弦呀?jīng)記錄了各個方向上矩形的邊線序號,因此越接近該序號的線段越有可能是矩形的邊線,但由于模板試卷和待識別試卷的擴(kuò)大識別區(qū)域不完全一致的原因,序號相同不一定就是矩形的邊線,所以還要加上線段長度的判斷,長度越接近模板中矩形邊線長度的線段越有可能是需要尋找的矩形邊線。
線段位置誤差權(quán)值由排序后的線段序號和記錄的序號差值確定,其計算公式為:
位置誤差權(quán)值=0.8^abs(當(dāng)前線段序號-記錄線段序號);
公式解析:當(dāng)序號誤差為0,權(quán)值為1,當(dāng)序號誤差增大時,權(quán)值由于冪運(yùn)算的原因迅速減少,能夠較明顯的把各個階層的線段區(qū)分開來。
線段長度誤差權(quán)值為了避免誤差數(shù)據(jù)過大的影響,需要對誤差進(jìn)行歸一化處理,歸一化的方法是min-max標(biāo)準(zhǔn)化。首先計算每條線段與記錄的矩形邊線長度誤差,并保存誤差的最大最小值,將誤差歸一化的公式為:
長度誤差權(quán)值=(線段長度-最小線段長度)/(最大線段長度-最小線段長度);
歸一化后,每個誤差數(shù)據(jù)都能發(fā)揮相同的作用效果。
計算得到每條線段的權(quán)值后,根據(jù)權(quán)值從大到小對線段進(jìn)行排序。
6)將權(quán)值位于前三位的線段提取出來,其余舍棄。
7)從上下左右四個方向各取出一條線段進(jìn)行擬合,擬合的方法是:求出上線段與左線段的交點(diǎn)Point1,下線段和右線段的交點(diǎn)Point2,擬合得到的矩形長度為:Point2.x-Point1.x;高度為:Point2.y-Point1.y。
8)比較模板中記錄的矩形長高,若誤差均在8個像素之內(nèi),則認(rèn)為識別成功,返回擬合矩形的坐標(biāo)和長高;若長度或高度的誤差其中有一個超過了8個像素,則進(jìn)行下一步;
9)上方線段集合中取出下一條候選線段,再次進(jìn)行擬合。
10)當(dāng)上方線段集合全部測試完畢并且沒有找到合適的矩形時,將該方向的線段索引重置,并按照“上、左、下、右”的順序?qū)⒏木€段的權(quán)限移至下一個方向。
11)四個方向上的所有線段集合全部測試擬合完畢后,若均沒找到合適的矩形則輸出“矩形未找到”。
上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。