賈智彬呂學(xué)強(qiáng)何 健董志安
(1.北京信息科技大學(xué)網(wǎng)絡(luò)文化與數(shù)字傳播重點(diǎn)實(shí)驗(yàn)室 北京 100101)(2.北京洛奇智慧醫(yī)療科技有限公司 北京 100015)(3.清華大學(xué)互聯(lián)網(wǎng)產(chǎn)業(yè)研究院 北京 100084)
隨著深度學(xué)習(xí)[1~2]的廣泛應(yīng)用,醫(yī)療OCR[3~4](Optical Character Recognition,光學(xué)字符識(shí)別)已經(jīng)成為醫(yī)療領(lǐng)域重要的研究話題。在醫(yī)療化驗(yàn)單識(shí)別的過程中,由于拍照的角度不同往往會(huì)導(dǎo)致圖像內(nèi)容產(chǎn)生一定的傾斜,而內(nèi)容的傾斜對(duì)圖像的文字識(shí)別影響非常大,所以在一個(gè)化驗(yàn)單識(shí)別系統(tǒng)的預(yù)處理階段,圖像內(nèi)容的傾斜校正往往是非常重要的部分。
目前對(duì)于醫(yī)療化驗(yàn)單圖像的校正并沒有專門提出或改進(jìn)的算法,大多數(shù)還是使用一些通用的校正方法,例如基于Hough變換的方法[5~7],基于投影的方法[8],基于K-最近鄰簇方法[9~10]?;贖ough變換是一種快速的形狀匹配技術(shù),經(jīng)過Ballard D.H[11]的推廣,雖然其可以檢測(cè)任意形狀,很好地?cái)U(kuò)展了該算法的應(yīng)用[12~13],但該方法的計(jì)算量還是比較大。基于投影的方法是通過投影圖像的某些統(tǒng)計(jì)特性來求得其傾斜角,但由于需要對(duì)整個(gè)圖像統(tǒng)計(jì)特征值,因此計(jì)算量和復(fù)雜度都比較高。而K-最近鄰簇方法是找出所有聯(lián)通中心的K個(gè)最鄰近點(diǎn),計(jì)算每對(duì)近鄰的矢量方向并統(tǒng)計(jì)生成直方圖,其峰值對(duì)應(yīng)著整幅圖像的傾角,但因整幅圖像中聯(lián)通成分較多,比較耗時(shí)。
由于醫(yī)療化驗(yàn)單版面復(fù)雜,例如化驗(yàn)單中文字的字體和字號(hào)多樣性且文字分布可能密集或零散,使得以上的方法對(duì)于醫(yī)療化驗(yàn)單的傾斜校正效果不明顯。本文在曾凡鋒[14]等所提出的在文本子區(qū)域上進(jìn)行檢測(cè)以及李慶峰[15]所使用的兩點(diǎn)法的基礎(chǔ)上,提出了一種快速的化驗(yàn)單圖像傾斜校正算法,通過找到其圖像中的某一條直線的左右端點(diǎn),然后計(jì)算其直線的傾斜角度,大大提高了校正的速度和準(zhǔn)確性。
提出的方法運(yùn)用兩點(diǎn)法的基本思想,即已知直線上不同兩點(diǎn)的坐標(biāo),那么就可以求得這條直線的斜率,進(jìn)而即可確定直線的傾斜角度。本文算法是基于兩個(gè)前提和一個(gè)假設(shè)下完成的。
前提1:化驗(yàn)單中至少含有一條貫徹版面的線段,該線段可以是化驗(yàn)單中表格的邊;
前提2:化驗(yàn)單的整體形狀為矩形。
假設(shè)1:斜線被切分成無窮多份后,每一份可以看成是一條直線,即斜線是由局部的直線組成的。
以往的方法一般是通過在圖像的整體上進(jìn)行傾斜角度的計(jì)算,例如計(jì)算整體邊框的傾斜度,但現(xiàn)實(shí)中往往會(huì)存在一些圖像邊框傾斜,但其內(nèi)容并沒傾斜,由于化驗(yàn)單傾斜校正的主要目的是校正內(nèi)容,若要按照之前提出的算法來校正,肯定會(huì)出現(xiàn)錯(cuò)誤校正的情況,而本文提出的方法將直接在化驗(yàn)單內(nèi)容部分中進(jìn)行校正。
通過對(duì)大量?jī)A斜圖像的研究分析發(fā)現(xiàn),如果能夠確定斜線左側(cè)起點(diǎn)坐標(biāo)L(x,y)以及斜線右側(cè)結(jié)束點(diǎn)坐標(biāo)R(x,y),就可以求出兩點(diǎn)之間的位移差a=imgR.y-imgL.y,偏移量b=|imgRx-imgLx|,再利用勾股定理,a2+b2=c2,計(jì)算直角三角形斜邊長(zhǎng)度,之后即可通過求角式(1)可計(jì)算出傾斜的角度。
通過對(duì)大量的二值化后的化驗(yàn)單圖片研究分析發(fā)現(xiàn),可以利用像素最小求和的方法來確定圖片中的內(nèi)容區(qū)域,從而檢測(cè)到圖片中斜線的位置信息及坐標(biāo),然后根據(jù)勾股定理及求角公式完成傾斜角度的求解。
為了盡量使每份近似于直線,需要將二值化圖像按固定像素等份切分為img={img1,img2,…,imgn},而這個(gè)固定的像素將在很大的程度上決定該算法的好壞。切分之后,原圖中的“斜線”片段變成了子圖中的“直線”,然后利用選擇子圖的位置i(1≤i≤n)以及切分的寬度,找到子圖的直線橫坐標(biāo)??梢岳眯邢袼攸c(diǎn)最小求和方法,找到子圖中縱坐標(biāo)。取img左側(cè)某個(gè)子圖imgL坐標(biāo)為(x,y),取右側(cè)某個(gè)子圖imgR坐標(biāo)為(x,y),根據(jù)imgL,imgR的坐標(biāo)即可計(jì)算出傾斜的角度,再根據(jù)求出角度的正負(fù)值進(jìn)行偏移校對(duì),即可完成校驗(yàn),具體實(shí)現(xiàn)步驟如圖1所示。
圖1 圖像校正流程圖
1)在進(jìn)行二值化之前需要將圖片中的背景去除,然后在去完背景的圖像上進(jìn)行二值化處理,本文使用的是全局閾值法[16]。將圖像由3通道轉(zhuǎn)化為2通道,像素點(diǎn)的灰度值設(shè)置為0或255,其中0代表黑色像素點(diǎn),255代表白色像素點(diǎn)??梢愿鶕?jù)0和255提取圖像中的信息,二值圖像在進(jìn)行圖像處理時(shí)增加提高處理的效率。
2)為了盡可能地將傾斜的橫線切分成多份直線,需要根據(jù)不同的化驗(yàn)單種類,確定其合適的切割寬度,切分整個(gè)化驗(yàn)單圖像的固定寬度在很大程度上決定了算法的優(yōu)越性。從理論上講,其寬度越小,切分出的線段越接近直線,效果應(yīng)該越好,但如果切割寬度和化驗(yàn)單中的文字大小一樣,反而降低校正效果。在本類化驗(yàn)單中,一個(gè)文字的像素為20像素,通過實(shí)驗(yàn)得,寬度在22像素左右時(shí)分割效果最佳。在確定好切割寬度后,就可以將化驗(yàn)單按照每小份22像素進(jìn)行切割,共分為n份,然后根據(jù)img的寬度將圖片平均分成兩個(gè)集合,即imgL、imgR,其中mid=img.width/2;根據(jù)式(2)對(duì)imgn進(jìn)行集合劃分。劃分之后,從imgL、imgR集合中分別取出子圖imgL(i),imgR(j),通過計(jì)算imgL(i),imgR(j)的偏移量以及位移差,由此即可計(jì)算出對(duì)應(yīng)的img的傾斜角度。
3)通過使用最小求和公式計(jì)算imgL矩陣中每一行像素之和,之后通過位置信息進(jìn)行排序,即根據(jù)式(3)可以找到第一條直線的位置,能夠找到imgL圖像中直線的y坐標(biāo)信息。根據(jù)所選取imgL的位置信息計(jì)算imgL中的x坐標(biāo)信息,即imgLx=i*22。利用上述方法同樣可以計(jì)算出imgR的(x,y)坐標(biāo)。
4)通過步驟3可以計(jì)算出imgL、imgR的坐標(biāo),再通過計(jì)算偏移量、位移差即可計(jì)算img傾斜角度。如果img存在傾斜,則偏移量不等于0,即imgR.x-imgL.x≠0。已知imgL、imgR兩點(diǎn)坐標(biāo),即可求出偏移量和位移差,再利用三角形勾股定理可計(jì)算出斜邊c的長(zhǎng)度,如圖2所示,再根據(jù)式(1),即可計(jì)算傾斜角度。之后根據(jù)a的取值判斷傾斜角度旋轉(zhuǎn)的方向,如果a大于0,則向圖片上旋轉(zhuǎn);如果a小于0,則向下旋轉(zhuǎn);如果a=0,則圖片不旋轉(zhuǎn)。
圖2 求角示例圖
5)為使img傾斜角度計(jì)算的更精確,從imgL集合中取一個(gè)子圖,imgR集合中取5個(gè)子圖合并組成五組數(shù)據(jù),如圖3所示。利用式(1),計(jì)算每一組傾斜角度,再根據(jù)式(4)計(jì)算img的平均傾斜角度,其中n=5。
圖3 對(duì)子圖進(jìn)行分組
經(jīng)過以上五步校正之后,可以將化驗(yàn)單內(nèi)容傾斜的圖像校正成功,圖4為原始圖片,圖5為校正過的圖片。
圖4 未校正的圖像
圖5 校正后圖像
為驗(yàn)證本文算法的效果,在此與傳統(tǒng)的Hough變換和投影法進(jìn)行比較。實(shí)驗(yàn)數(shù)據(jù)采用了50張類似于圖5的化驗(yàn)單進(jìn)行了實(shí)驗(yàn),將這些圖像以一定的角度為間隔進(jìn)行旋轉(zhuǎn)。
每張圖像生成6種不同的傾斜樣本圖像,共生成300張測(cè)試圖像。將三個(gè)方法分別對(duì)這些化驗(yàn)單進(jìn)行傾斜校正,然后對(duì)這些結(jié)果進(jìn)行比較,校正結(jié)果如圖6所示。
圖6(a)展示的是運(yùn)用上述的一張化驗(yàn)單的原圖,而這張?jiān)瓐D有個(gè)很大的特點(diǎn)就是化驗(yàn)單里的內(nèi)容是傾斜的,而圖片本身水平,而這樣的化驗(yàn)單在實(shí)際中并不是少數(shù)。圖6(b)展示的是旋轉(zhuǎn)10°后得到的化驗(yàn)單,圖6(c)、圖6(d)分別是通過Hough變換法、投影法得到的校正后的圖像。通過這三幅圖像可知,Hough變換法和投影法可以很好地將化驗(yàn)單的邊框由傾斜校正水平,但這并沒有將內(nèi)容校正水平,而圖6(e)展示的是通過本文算法得到的校正后圖像,可以看出其化驗(yàn)單里的內(nèi)容得到了明顯的校正,并不在是化驗(yàn)單本身進(jìn)行校正。
圖6 校正結(jié)果
表1對(duì)Hough變換法、投影法與本文方法進(jìn)行了對(duì)比分析,從每張的處理時(shí)間上來看,本文的處理時(shí)間最短,與其他兩種方法的速度相比得到了提高。而從平均誤差來看,本文算法的平均誤差在這三類算法中是最大的,這是因?yàn)楸疚乃惴z測(cè)是表單里的直線,而有的直線在原化驗(yàn)單中是傾斜的,雖然旋轉(zhuǎn)一定角度得到測(cè)試圖像,但其實(shí)這些直線并沒有真正旋轉(zhuǎn)到該角度,這會(huì)導(dǎo)致本文算法的平均誤差較大。準(zhǔn)確率是指經(jīng)過算法傾斜校正后文字內(nèi)容沒有傾斜的圖像與參與測(cè)試的所有樣本數(shù)之比,從表中可以看出,本文提出的方法的準(zhǔn)確率最高,達(dá)到了94.6%。這是因?yàn)镠ough變換和投影法對(duì)化驗(yàn)單這種比較復(fù)雜圖像的適應(yīng)度比較差,而本文算法直接針對(duì)化驗(yàn)單的內(nèi)容進(jìn)行傾斜校正,從而排除了圖像中非內(nèi)容部分的干擾,所以準(zhǔn)確率較高??梢?,本文所提出的算法與傳統(tǒng)的Hough變換法和投影法來說,在對(duì)化驗(yàn)單進(jìn)行傾斜校正的情況下,既提高了校正的精度,又減少了算法的執(zhí)行時(shí)間。
表1 各方法對(duì)比分析
本文提出的算法可以進(jìn)一步應(yīng)用于其圖像中至少有一條易于檢測(cè)到的直線,首先需要確定合適的固定寬度,然后根據(jù)本文所提出的算法,得到直線的左右端點(diǎn)的坐標(biāo),再求出其傾斜度,即可通過旋轉(zhuǎn)得到其校正后的圖像。
如圖7所示,這是一張來自其他醫(yī)院去完背景的化驗(yàn)單圖像,通過圖像可以看出其原圖存在一定程度的傾斜,通過觀察可以得出圖像滿足上述提到的前提條件1、2,根據(jù)上述算法思想,先求出其平均傾斜角度值,最后再對(duì)原圖進(jìn)行旋轉(zhuǎn)即可得到校正后的圖像,結(jié)果如圖8所示。
圖7 未校正的圖像
圖8 校正后的圖像
對(duì)于化驗(yàn)單這種比較復(fù)雜的圖像來說,該類圖像通常由表頭,檢驗(yàn)項(xiàng)內(nèi)容和表尾三部分組成,所以對(duì)其文本行進(jìn)行分析往往會(huì)受到表格或多或少的影響。本文結(jié)合化驗(yàn)單的基本特征,利用兩點(diǎn)法的基本思想,從而計(jì)算出其圖像的傾斜角度,達(dá)到校正圖像的效果。實(shí)驗(yàn)表明,本文提出的方法提高了校正的速度和對(duì)化驗(yàn)單這種比較復(fù)雜圖像校正的正確率,達(dá)到項(xiàng)目使用要求。
但目前本文提出的算法還需要對(duì)不同種類的化驗(yàn)單進(jìn)行不同的特征分析,需要確定合適的分割寬度,這是本算法需要改進(jìn)的地方。另外,對(duì)于傾斜角過大的圖像,其算法的正確率也會(huì)大大降低,仍然需要結(jié)合其他方法進(jìn)行綜合處理。