王希暢,呂學強,何 健,董志安
(1.北京信息科技大學 網絡文化與數字傳播北京市重點實驗室,北京 100101;2.北京洛奇智慧醫療科技有限公司,北京 100015;3.清華大學互聯網產業研究院,北京 100084)
隨著信息化時代的到來,醫療化驗單識別已成為醫療領域重要的研究話題。醫療OCR[1-2](optical character recognition,光學字符識別)生成的電子化驗單可以解決紙質化驗單數量過大,不便于保存,且患者無法正確理解各項指標含義的困擾[3]。而區域檢測是指需檢測到化驗單的檢驗項區域,為化驗單識別做預處理,對提取化驗單的有效信息進而進行后續的自動處理具有重要的作用。因此如何檢測檢驗項區域成為一項必不可少的研究。利用合適的檢測方法,可以得到較準確的檢驗項區域,對之后的識別[4-5]起到了重要的作用。
與其他區域檢測不同,醫療化驗單具有規定版型的特征,可以根據化驗單中的直線特點進行檢測。因此文中基于直線檢測進行化驗單檢驗項的區域檢測。在直線檢測領域內,霍夫變換占據著核心地位,分為標準霍夫變換與累積概率霍夫變換。同時,結合檢驗項區域特征,提出了基于二值化的單側區域檢測與雙側區域檢測方法,適用于不同傾斜程度的化驗單。
綜上所述,以某醫院真實化驗單為實驗數據進行區域檢測并切割,通過應用不同的區域檢測方法,對比區域切割的效果,對每種方法所適合的場景進行分析。
為尋找合適的區域檢測方法進行化驗單檢測,下面將著重介紹三種基于直線檢測的方法:基于霍夫直線檢測、單側區域檢測、雙側區域檢測。不同方法的區域檢測效果不同,利用合適的區域檢測方法可以得到較好的區域檢測效果。
1.1.1 霍夫直線檢測原理
霍夫直線檢測[6]在計算機視覺領域中有著重要的研究意義,其基本原理在于利用圖像空間中的邊緣像素點映射參數空間中參考點的可能軌跡。即圖像空間與參數空間中的點線是一一對應的,圖像空間中的某個點對應著參數空間中的某條線,反之同理。由此可知,參數空間中多條線映射著圖像空間中多個不同的點,而多條線的交點即為圖像空間中的某條直線[7],通過計算累計結果的局部最大值得到直線集合。
依照上述原理進行圖像中的直線檢測,利用公式ρ=xcosθ+ysinθ求解兩空間的對應關系[8]。首先遍歷圖像中的像素點,將像素點的坐標值與規定范圍內θ角度值代入公式計算距離ρ值,以ρ值與θ角度值為橫縱坐標存入計數器矩陣中,計算兩值相同的像素點的數量。每個像素點的角度變換極值為180。,均遍歷后得到計數器矩陣。在規定閾值的前提下,矩陣中元素值超過閾值的橫縱坐標(θ,ρ)為直線在參數空間中的映射表示,代入公式求解x值與y值即得到基于霍夫變換[9]檢測到的直線坐標集合。
1.1.2 邊緣檢測
為使醫療化驗單區域檢測的效果更佳,在霍夫直線檢測之前對圖像進行邊緣檢測[10]。所謂邊緣是指圖像信息周圍灰度值急劇變化的像素集合,是不同屬性區域的交界處,通常代表著內容的變化[11-12],它是圖像分割所依賴的最重要的依據。
Canny邊緣檢測包含四個步驟:(1)利用高斯濾波器進行濾波操作,降低噪聲點的干擾;(2)使用Sobel算子,計算各個點的梯度幅值與梯度方向;(3)利用非極大值抑制,消除邊緣檢測的雜散效應;(4)通過設置雙閾值,確定邊緣。
本節針對邊緣檢測使用python環境的cv2.Canny()函數[13],該函數對上述功能進行封裝,可直接調用。在調用時需設置閾值1與閾值2,一般來說閾值2大于閾值1,利用閾值2可檢測出大部分明顯的邊緣,確定真實邊緣,但仍有紕漏。需要設置[14]較小的閾值1連接斷斷續續的直線,確定潛在邊緣。
設置合適的閾值可以較為完整地顯示圖像中的輪廓信息,雙閾值設置過大或過小時均會造成圖像信息的不準確。雙閾值均過小時除描述輪廓外會產生較多雜質,即篩選條件過低,將不屬于輪廓的噪聲也一并顯示,容易對區域檢測造成干擾。而雙閾值過大代表著篩選條件過高,原本圖像中的輪廓易被當作雜質忽略,會篩除真實邊緣,無法完整表示圖像輪廓信息,造成圖像信息缺失。
如上所述,閾值過大或過小均會造成圖像輪廓信息無法正確顯示。因此,找到合適的雙閾值可以有效地對圖像進行邊緣檢測。經過對比,實驗設置的雙閾值為(50,150),可較為完整地顯示圖像輪廓,無其余雜質,效果較佳。
1.1.3 基于霍夫直線檢測具體流程
利用霍夫直線檢測進行醫療化驗單的區域檢測具體流程如圖1所示。

圖1 區域檢測具體流程
首先,對化驗單灰度圖進行邊緣檢測生成二值圖。再利用概率霍夫變換函數cv2.HoughLinesP()生成檢測到的所有線段頭尾坐標集合。由于集合中有部分線段不符合后續區域檢測的要求,因此需要對線段集合進行篩選。篩選條件設置為兩個:(1)刪除豎直線段,即起點與終點橫坐標相差距離較小的線段;(2)刪除平行距離過近的線段,由于化驗單中的黑線不只由一行像素點表示,因此需刪去相鄰的線段,保留靠近下邊緣的線段。
將篩選后的線段縱坐標放入新的集合,需在該集合中自動檢測出檢驗項區域的上下邊界,篩除不符合條件的線段。該醫院化驗單的特點為檢驗項呈現在表格之中。因此,可基于該特點確定區域上邊界max_up與下邊界max_down。通過比較相鄰兩直線的距離進行判斷,直線相差距離較大的下方直線為下邊界,上邊界為距離較小的上方直線,依據最終上下邊界進行切割即得到化驗單檢驗項區域。
該方法的難點在于調試合適的參數,使檢驗項區域檢測效果達到最佳。邊緣檢測,霍夫直線檢測均需要針對不同的醫療化驗單進行閾值調試,往往不同化驗單所需閾值不同,且調試閾值較花費時間,故該方法無法對大量醫療化驗單進行區域檢測。
由于醫療化驗單具有固定的版型,因此本節通過二值圖的黑色像素點是否連續來判斷直線坐標,根據圖像單側檢測到的直線坐標進行區域檢測。利用該方法檢測化驗單的檢驗項區域可較準確地提取出所需部分。
1.2.1 圖像二值化
為使醫療化驗單中區域區分更加明顯,預先利用python環境的cv2.cvtColor()函數將原始RGB圖像轉換為灰度圖[15],將色彩三通道變為單通道,以此減少運算量;再對灰度圖二值化達到突出前景的目的。二值化是指通過設置閾值,把圖像的每個像素值按照閾值大小設定為0或255,使圖像呈黑白效果,有效地突出圖像輪廓,可明顯區分圖像前景與背景,方便提取圖像中的信息,降低維度。
二值化處理中最重要的是閾值選取,需要根據閾值的大小判斷像素點的值,不同閾值的選取會呈現不同的圖像效果,合適的閾值選取會提高單側區域檢測方法的檢測準確性。閾值選取分為全局閾值與局部閾值。全局閾值是指圖像像素均按照一個閾值來劃分:大于該值的像素群和小于該值的像素群,該閾值選取方法較單一,無法根據圖像亮度等因素進行閾值設定,對光照不均勻的圖像容易出現錯誤的二值分割;局部閾值是指按照圖像中不同部分的不同亮度來計算每一個區域的閾值[16-17],該方法按照區域特點[18]設定不同閾值。為準確地突出每一部分的輪廓,避免光照不均勻等誤差,實驗將使用局部自適應閾值法進行圖像預處理。
局部自適應閾值法[19]是根據像素的鄰域塊的像素值分布來確定該像素位置上的二值化閾值。通過調用函數cv2.adaptiveThreshold()對灰度圖實現二值化,針對每一個像素點設置相應的閾值,即對該像素點周圍的像素值加權平均,并減去一設定常數,從而得到該像素點的閾值。該方法打破了全局閾值的束縛,減少了相對誤差。
1.2.2 單側區域檢測具體流程
單側區域檢測是基于醫療化驗單二值圖實現的,按照判定范圍分為左側區域檢測與右側區域檢測,即從不同側對化驗單進行檢驗項區域檢測。二者針對不同傾斜方向的圖像有著不同的效果。單側區域檢測具體流程如圖2所示。

圖2 單側區域檢測具體流程
首先,對醫療化驗單灰度圖進行自適應閾值化生成二值圖,大于閾值的像素值設為255,反之則設為0。再根據待測圖像的特征輸入判定范圍,可選擇左側或右側進行區域檢測,本節設判定長度為40。從圖像縱軸起點開始判定,若該行像素點均為黑色,則將該行橫坐標計入直線集合中;若存在白色像素點,則跳到下一行,以此循環。將范圍內的像素點均遍歷過后,即得到初檢測的直線集合。
上述所得到的直線集合是范圍內未經篩選的全部直線,為找出檢驗項區域的上下邊界,需對該集合進行篩選[20],篩選條件與基于霍夫檢測方法相同,篩選后即得到檢驗項區域上下邊界,依據檢測到的上下邊界進行區域切割。
單側區域檢測的特點是以單側檢測的坐標為基準進行切割,對于傾斜角度較小的化驗單具有良好的檢測效果,不同側的區域檢測方法適用于不同傾斜方向的化驗單。同時,該方法無需耗費過多時間進行參數調試,即可實現大量化驗單的檢驗項區域檢測。
雙側區域檢測是在單側區域檢測的基礎上完成的,具體流程相似。二者均預先對醫療化驗單灰度圖進行二值化處理,生成像素值為0或255的二值圖;再利用判定直線算法產生初直線集合;最后基于篩選條件生成檢驗項區域的上下邊界,以此完成檢驗項區域檢測。但不同于單側的左側遍歷或右側遍歷,雙側區域檢測的特點是相繼輸入左側與右側的判定范圍,分別實現上述過程后返回兩組輸出值,對比兩組輸出值生成檢驗項區域的上下邊界,以此進行區域切割。
直線判定范圍是決定區域檢測效果的重要因素,合適的判定范圍可優化檢驗項區域的檢測效果,雙側區域檢測需設定不同側的直線判定范圍。設醫療化驗單寬度為w,寬度系數為100。實驗分別對比了橫軸起點為左側w/25,左側w/6,右側w/6的圖像信息。結果表明圖像在不同的范圍內呈現不同的信息。故選定左側w/6與右側w/6作為雙側區域檢測范圍。
左側與右側分別輸出檢驗項區域上下邊界的目的是防止左右傾斜相差過大,為均衡左右邊界坐標,減少雜質切割,即對左右兩側的輸出值進行對比得到最終的上下邊界(max_up,max_down),并進行檢驗項區域切割。
通過對比左右側返回的坐標,判斷該化驗單是否處于傾斜狀態。若傾斜角度過大,可依據四點坐標進行傾斜圖像的矯正。
上文介紹了三種不同的區域檢測方法:基于霍夫直線檢測、單側區域檢測與雙側區域檢測方法,下面將針對三種方法的檢測效果進行分析總結。實驗數據為某醫院30張真實醫療化驗單:16張手機拍攝+14張高拍儀拍攝。針對以下問題展開具體分析:(1)針對不同設備拍攝的化驗單,三種區域檢測方法效果是否相同;(2)是否對所有類型的化驗單圖像均可準確檢測,如在不同傾斜角度下拍攝的化驗單。
據高拍儀拍攝的14張圖像顯示,由于高拍儀設備具有自動裁剪與亮度均勻的特點,可精準裁剪化驗單的整體輪廓。故拍攝的圖像均為水平放置,且無背景噪聲。
由此可見,醫療化驗單經高拍儀拍攝后,均顯示為規整模式的圖像,無區域檢測難度。分別利用三種區域檢測方法對14張高拍儀拍攝的化驗單進行檢測,發現由于化驗單的類型相同,任意一種方法均能準確地檢測出14張圖像的檢驗項區域,檢測效果良好且相同。因此,若對高拍儀拍攝的醫療化驗單進行區域檢測,采用任意一種檢測方法均可。
針對16張手機拍攝的醫療化驗單進行區域檢測時發現,不同于高拍儀拍攝的化驗單,由于手機拍攝缺乏專業性,會出現化驗單傾斜、背景噪聲等問題,對區域檢測造成干擾。因此對每種方法所適合的檢測場景展開研究。
(1)由于霍夫直線檢測有設置閾值的限制,利用基于霍夫直線檢測方法進行區域檢測時,需設置最小線長度閾值(minLineLength)與最大線差值(maxLineGap),因此研究不同閾值與化驗單的關系是區域檢測的基礎。為確定不同閾值對同一張醫療化驗單區域檢測效果的影響,設置不同閾值進行對比實驗。選定任意一張手機拍攝的醫療化驗單,在該化驗單的基礎上設置不同的最小線長度閾值(minLineLength),并對檢測效果進行對比。首先對化驗單a選定兩個不同的最小線長度閾值,分別為147與180。可以看出,對化驗單a進行閾值調試時,閾值為147的檢測效果較好,可較準確的檢測出檢驗項區域。
由此可得,對于同一張手機拍攝的醫療化驗單,設置不同的閾值檢測效果有明顯差異。因此,對醫療化驗單進行區域檢測時,需針對不同化驗單進行閾值的調試,閾值可直接影響檢測效果。將閾值設為最佳數值時能準確地檢測出醫療化驗單的檢驗項區域,檢測效果較好。
為更清晰地分析基于霍夫直線檢測的區域檢測方法適合的場景,需以同一閾值對不同的醫療化驗單進行區域檢測。在化驗單a中最小線長度閾值為147時檢測效果較佳,故利用該閾值對化驗單b進行區域檢測。通過對比同一閾值下不同化驗單的檢測效果判斷該方法能否進行批量化驗單的區域檢測。實驗結果如圖3所示,圖3(a)為當minLineLength=147時對化驗單a進行檢測的效果,圖3(b)為當minLineLength=147時,對另一張手機拍攝的化驗單b進行區域檢測的效果,可明顯看出,效果不佳。

(a)當minLineLength=147時化驗單a的檢測效果

(b)當minLineLength=147時化驗單b的檢測效果
如上文所述,基于霍夫直線檢測的區域檢測方法應用在手機拍攝的化驗單上有一定的局限性。當對某張化驗單進行不同閾值測試時,可根據檢測效果得到適合該化驗單的最佳閾值;利用該閾值對其他化驗單進行檢測時發現效果較差,是由于手機拍攝的圖像類型不盡相同,例如傾斜程度的不同會產生不同的干擾。因此對于手機拍攝的單張化驗單,需調到適合該化驗單的檢測閾值進行檢測。不同圖像的檢測閾值往往不同,且調試到合適的閾值較花費時間,故無法應用此方法對大批量化驗單進行檢驗項區域檢測。
(2)單側區域檢測方法沒有霍夫閾值的限制,因此無需對不同化驗單進行閾值調試,檢測花費時間較少。該方法分為左側區域檢測與右側區域檢測,即按照左側或右側檢測的坐標進行檢驗項區域切割。二者適用于不同傾斜方向的圖像,對順時針傾斜或逆時針傾斜的化驗單有不同的檢測效果。若利用左側檢測方法對順時針傾斜的化驗單進行區域檢測,可較準確地檢測出檢驗項區域,減少背景雜質的出現。通過對比不同方法對同一傾斜圖像的檢測效果,找到適合該類型圖像的檢測方法。如圖4(a)為對順時針傾斜的化驗單進行左側檢測的效果,圖4(b)為對相同圖像進行右側檢測的效果。
經對比可知,左側區域檢測方法適用于順時針傾斜的化驗單圖像,依照左側檢測的坐標對該類型圖像進行切割可減少背景噪聲,防止切割到其余雜質。同理,針對逆時針傾斜的化驗單圖像,利用右側區域檢測方法較為合適,以右側檢測到的邊界線對逆時針傾斜的圖像進行區域切割,可得到較準確的檢驗項區域。

(a)對順時針傾斜的化驗單左側檢測的效果

(b)對順時針傾斜的化驗單右側檢測的效果
綜上所述,單側區域檢測方法適用于不同傾斜方向的化驗單。根據化驗單的狀態選擇左側檢測或右側檢測,可得到較優效果。即對不同傾斜方向的醫療化驗單進行區域檢測,需選擇適合該檢測場景的區域檢測方法。
(3)對手機拍攝的16張醫療化驗單進行區域檢測時發現,雙側區域檢測的特點是會返回左右兩側檢測到的縱軸坐標值,該值為檢驗項區域的上下邊界坐標。當圖像趨于傾斜時返回的坐標會有明顯差異,左右兩側坐標未處于同一水平線,可以此判斷圖像是否處于傾斜狀態。通過對比左右兩側坐標值,將傾斜圖像校正并切割檢驗項區域。
醫療領域的發展已成為社會熱點,醫療化驗單識別在醫療領域中占據著重要的研究地位。檢驗項區域檢測是化驗單識別必不可少的預處理,前者的檢測效果對識別的準確率有著重要的影響。因此找到區域檢測方法所適合的檢測場景有著重要的研究意義。
該文提出了三種區域檢測方法,分別描述每種方法的原理與流程,為后續對比實驗奠定基礎。同時,以某醫院真實化驗單為實驗數據,利用不同設備對醫療化驗單進行拍攝,通過對比化驗單的區域檢測效果對每種方法適合的拍攝情景進行說明。
不同的區域檢測方法適合不同類型的化驗單。根據化驗單特點找到適合的區域檢測方法,可得到較好的檢測效果,為后續的識別做鋪墊,效果顯著。