趙寶彬,劉雨晴,郝如龍,葛愛明
(復旦大學光源與照明工程系,上海 200433)
眼底上分布著人體唯一可見的毛細血管,通過檢測這些血管分布以及形態變換,對白內障、青光眼、老年黃斑變性、高血壓和糖尿病視網膜病變等疾病的預防和早期治療具有重要作用[1-3]。眼底相機是目前臨床上常用的眼底檢測方法[4,5]。在對眼底成像的過程中,為滿足嚴格的光照與成像條件,需要將圖像采集裝置的照明光束中心對準瞳孔中心,使照明光束穿過瞳孔準確投射到眼底[6]。但是在實際操作中,被檢測者體型的差異以及眼睛位置與大小的不同造成照明光束中心不能準確對準瞳孔中心。
為保證圖像采集裝置的照明光束中心對準患者瞳孔中心,一般采取手動對準和自主式對準兩種方式。手動對準需要被檢測者高度配合,保持相對穩定的拍照姿勢,并且需要專業醫護人員具有很高的熟練度;自主式對準需要眼底相機實時計算眼部圖像的瞳孔中心位置,當患者眼球運動到成像視場中心時,眼底相機快速觸發照明系統完成曝光并抓拍眼底圖像。自主式對準相比手動對準具有調節速度快和操作簡單等優點,適用于眼底篩查設備的智能化改進。
眼底相機精確檢測患者瞳孔并完成照明的過程中,實時獲取瞳孔中心點坐標是眼底相機照明控制的關鍵技術。然而,眼球運動、眨眼、角膜反射光斑以及睫毛陰影等因素的干擾,增加了瞳孔中心坐標檢測的難度。目前對于瞳孔中心點檢測算法,國內外已有很多的相關研究。王晶等[7]提出了基于圓近似模型的瞳孔中心點的自動定位算法,這種方法在變換光照下具有很好的魯棒性。張宏薇等[8]提出了基于Hough變換的瞳孔識別方法。Nam等[9]提出了一種基于動態閾值法與邊緣檢測法的瞳孔定位算法。但是這三種算法復雜度高且運行效率低,因此不適合移植于基于嵌入式系統的智能眼底相機中。Leo等[10]提出了基于無監督方法的近紅外臉部圖像的瞳孔精確定位算法。Abbasi等[11]提出了基于粒子濾波的瞳孔檢測算法。趙彥濤等[12]提出了選擇性閾值取反操作后進行徑向對稱變換的瞳孔中心定位。這三種方法主要針對對比度高的紅外圖像,不適合對比度差的彩色圖像。賈彩琴等[13]提出了基于異方差的瞳孔中心定位方法,這種方法首先基于AdaBoost方法檢測人臉區域,之后進行邊緣檢測與圓近似,通過異方差確定瞳孔中心點,這種方法定位精度高,但是計算冗余,計算時間長。
鑒于目前瞳孔定位算法不能滿足眼底相機中的照明控制需求,本文研究開發適合基于ZYNQ處理器的眼底相機瞳孔定位算法。
眼部圖像的特點是前景瞳孔呈現黑色且亮度低,背景區域的鞏膜和皮膚分別呈現白色和黃色且亮度高?;诖颂卣鳎疚膶GB格式的眼部圖像轉換至YCbCr色彩空間,其中Y分量代表亮度、Cb代表藍色分量、Cr代表紅色分量。膚色在Cb和Cr分量具有很好的聚類性,因此可以選取合適閾值過濾掉背景皮膚區域。瞳孔與鞏膜之間亮度差異大,因此在Y分量上選取合適的閾值濾除鞏膜區域。從而將瞳孔區域從眼部分割出來。根據式(1)~式(3)將圖像從RGB格式轉換至YCbCr色彩空間[14],結果如圖1(b)所示。根據式(4)對瞳孔區域進行分割,結果如圖1(c)所示。表1是根據實驗確定的最佳閾值。
Y=0.299×R+0.587×G+0.114×B+0
(1)
Cb=-0.169×R-0.331×G+0.500×B+128
(2)
Cr=0.500×R-0.419×G-0.081×B+128
(3)
(4)
表1 瞳孔分割閾值Table 1 Pupil detection thresholds.
圖1 基于YCbCr色彩空間的閾值分割Fig.1 Threshold segmentation based on YCbCr color space
經過閾值分割,圖像存在許多沖擊噪聲,會對下一步的處理的運算速度與準確性帶來影響。本文使用形態學濾波去除這些孤立的噪聲點[15]。二值化形態學濾波使用固定的幾何結構對圖像進行掃描處理,主要有兩種基本的操作:腐蝕與膨脹。將這兩種操作結合組成開運算與閉運算,先腐蝕后膨脹為開運算,先膨脹后腐蝕為閉運算[16,17]。開運算可以有效去除噪點,閉運算可以填補空洞。本文為了去除孤立的沖擊噪聲點,使用開運算去除小的像素塊。經過本文實驗,選擇3×3的窗口,先進行兩次腐蝕再進行兩次膨脹運算。既可以保持目標區域大小不變,又可以有效去除噪聲。
經過形態學去噪后得到的二值圖像由于眼睫毛背景干擾而導致瞳孔區域上邊沿過長,進而導致瞳孔中心定位錯誤??紤]到眼睫毛區域在水平投影方向上的積分值小于瞳孔虹膜區域的積分值,因此本文先將二值圖像在水平方向上積分然后選取合適的閾值去除眼睫毛背景干擾。設I(x,y)為M×N大小的二值圖像函數,I(x)為水平積分。根據式(5)對原始二值圖像在水平方向上做積分運算。選擇合適的閾值q,根據式(6)和式(7)可求出Xlow和Xhigh。最后根據式(11)對輸入圖像I(x,y)進行裁剪得到IOUT(x,y)。這里根據實驗選取q值為35。圖2(a)為原始二值圖像,圖2(b)為本文水平積分閾值裁剪法處理后的效果圖。可以看出水平積分閾值裁剪法可以效去除眼睫毛背景干擾。圖2(c)是未包含水平積分閾值裁剪預處理的瞳孔定位效果圖,可以看出,綠色定位點不在人工標記的紅色圓圈內,定位效果差。圖2(d)是使用包含此處理過程的瞳孔定位效果圖,其中,本文算法定位的綠色標記點在人工標記的紅色圓圈內,可以看出,引入水平積分閾值裁剪法可以有效去除眼睫毛背景干擾,使得定位效果顯著提高。
(5)
q=I(xlow)
(6)
q=I(xhigh)
(7)
(8)
圖2 水平積分閾值裁剪法計算過程Fig.2 Experiment of clipping based on horizontal integration and threshold
經過上述步驟得到了瞳孔區域的分割圖像,但是此時還不能進行坐標計算,因為上述分割得到的區域仍然是像素層次,需要進行連通區域標記找到最大的連通域,再通過計算連通域的最小外接圓求出瞳孔中心坐標。像素間的連通性是確定區域的一個重要概念,本文采用的是一種基于遞歸方法的二值圖像連通域像素標記算法[18,19],目的是把二值圖像中互相鄰接的目標像素集合提取出來,通過對二值圖像的掃描和分析可得到二值圖像中的連通域劃分和連通域的數目。二值圖像分為前景和背景,本文方法假設目標前景為1,背景為0,標記算法只對目標前景像素進行標記。連通區域標記完之后,選取最大的連通域,使用最小包圍圓法求出瞳孔中心坐標[20]。圖3展示了完整的瞳孔中心坐標計算流程。
圖3 瞳孔中心定位過程,步驟包括RGB至YCbCr色彩空間轉換、 閾值分割、形態學濾波、水平積分閾值裁剪、 連通區域標記和最小包圓法Fig.3 Pupil center location Steps include RGB to YCbCr conversion, denoising using morphological filter, horizontal intergration Threshold, labeling and Smallest Enclosing Disk
求解出瞳孔中心點坐標后,需要確定該點坐標與照明光束中心點坐標的距離。目前使用的距離主要有以下三種:
1)歐式距離,以點x=(x1,x2,…,xn),y=(y1,y2,…,yn)為例,歐式距離可表示為
(9)
2)曼哈頓距離,又稱城市街區距離,可表示為
(10)
3)切比雪夫距離為
(11)
考慮到切比雪夫距離求解只涉及到減法、絕對值和大小比較運算,計算速度相對于涉及到平方與根號開方的歐式距離和曼哈頓距離更快。因此本文選擇切比雪夫距離作為瞳孔中心與照明光束中心距離的計算依據。
對與眼底圖像上的兩點x=(x1,x2),y=(y1,y2),切比雪夫距離可表示為
d(x,y)=max(|x1-y1|,|x2-y2|)
(12)
本文實驗裝置核心板如圖4(a)所示,上面搭載了ZYNQ-7020處理芯片、512M DDR、串口、千兆以太網和USB等外設。ZYNQ-7020系列處理器主要由PS和 PL兩大功能模塊構成[21]。其中,PS主要由ARM CPU、存儲器接口和I/O 外設組成;PL 則采用FPGA技術實現擴展功能以滿足特定的功能需求。兩部分以高速片上總線AXI(Advanced eXtensible Interface)互聯,保證整個系統的處理帶寬。本文方法的計算架構如圖4(b)所示,測試圖片首先經過綠色框圖代表的IP核(YCbCr色彩轉換閾值分割IP、腐蝕運算IP和膨脹運算IP)執行瞳孔區域分割,之后通過視頻直接內存存取(video direct memory access, VDMA)發送至DDR并由ARM CPU執行軟件部分算法(水平積分閾值裁剪、連通域標記和最小包圓法)計算瞳孔。
1)彩色閾值分割的電路邏輯設計。硬件的優勢是處理圖像的像素數據流,因此將原始圖片轉換為RGB格式的像素數據流作為IP核的輸入。如圖5所示,該電路由色彩轉換與閾值分割兩部分組成。其中色彩轉換部分邏輯電路輸入的是像素的RGB值,閾值分割部分輸出的是二值圖像數據流。為了使此算法設計適合硬件加速,本文對色彩轉換部分使用定點整數乘法與移位運算代替式(1)~式(3)中的浮點數乘法運算。為了降低硬件資源消耗,本文又對式(1)~式(3)進行了合并重組,得到式(8)~式(10)。
Y=(76(R-G)+29(B-G))>>8+G
(13)
Cb=(144(B-Y))>>8+128
(14)
Cr=(182(R-Y))>>8+128
(15)
圖5 色彩空間轉換及閾值分割電路邏輯Fig.5 Threshold segmentation based on YCbCr calculator logic
2)形態濾波的電路邏輯設計。形態學的腐蝕與膨脹是根據圖6所示的電路圖實現的,為了降低延遲提高數據吞吐率,采用了行緩存與窗口緩存。輸出為二值圖像,二值圖像的像素可以分為兩類:前景像素與背景像素。通常前景像素用1表示,背景像素用0表示。為降低PL端資源消耗,本文將圖像算法的腐蝕與膨脹電路圖分別綜合為兩個IP核,通過軟件重復組合調用完成形態學開運算達到去除噪聲的目的。
圖6 形態學濾波電路邏輯Fig.6 Morphological filter implementation
運行在PS端的算法由ARM CORTEX A9處理器執行。將OpenCV庫移植在ZYNQ處理器上,連通區域標記和最小包圓法可以調用OpenCV庫完成,水平閾值積分裁剪算法通過C++語言編寫實現。
經過Vivado開發工具綜合編譯,圖7給出了ZYNQ FPGA資源消耗率,其中查找表(Look Up Table, LUT)和塊隨機存儲器(Block Random Access Memory, BRAM)等存儲資源使用率不到全部硬件資源的40%,數字信號處理器(Digital Signal Processor, DSP)計算資源的使用率為5%。因此圖像分割和形態學濾波IP消耗的資源在ZYNQ所能提供資源的范圍內,滿足設計要求。
圖7 FPGA硬件資源資源使用率Fig.7 FPGA hardware resource usage
為評估算法的準確性,本文選取了不同被測人員的50張眼部圖像進行測試。這50張圖片包含了瞳孔部分被遮擋(眼瞼遮擋或眼球轉動到眼角處),膚色變換,眼睫毛背景干擾,光斑復雜和離焦等多種情況,因此,可以保證算法具有較高的魯棒性。為定性展示本文定位效果,本文隨機選取四張測試圖像:圖8(a)膚色較白;圖8(b)眼球轉動至眼角處且存在睫毛背景干擾;圖8(c)圖片模糊且膚色較暗;圖8(d)膚色較亮并存在睫毛背景干擾??紤]到瞳孔面積在50~100 pixel范圍內,且人工標定瞳孔中心存在標定誤差,因此,當檢測到的瞳孔中心位置與標定的瞳孔中心位置的距離小于5個pixel的時候,認為正確檢測到瞳孔中心。圖8所示的四張測試結果中,紅色圓圈是人工標記的瞳孔中心位置,半徑為5個pixel。綠色標記點是本文算法計算的瞳孔中心,黃色十字符號是視場中心。眼底相機的視場中心和照明光束中心重合,因此黃色十字符號同時表示照明光束中心??梢钥闯鲇嬎愕耐字行木G色標記點準確落在了紅色圓圈內,因此認為檢測結果正確。當本文方法檢測到綠色標記點與黃色十字點的切比雪夫距離小于給定閾值時,說明照明光束中心對準患者瞳孔中心,此時觸發照明光源開關,完成眼底曝光照明。
圖8 測試不同圖片的定位效果Fig.8 Pupil center location results in different conditions
為定量說明本文算法的定位效果優勢,將本文算法與圓近似(Circle approximation)[7]和改進的Hough圓檢測(Improved Hough circle)[8]方法做對比。表2給出了本文瞳孔定位算法的測試結果,可見:(1)本文算法的主要優勢在于檢測速度,本文采用了軟硬件協同設計思想,將色彩轉換閾值分割以及形態學濾波通過硬件加速,使得檢測時間顯著縮短;(2)檢測的準確度略高于其他兩種算法,這是因為本文在瞳孔閾值分割部分充分考慮到瞳孔區域前景與背景皮膚和虹膜在YCcCr色彩空間下具有很高的差異性,并且加入了水平積分閾值裁剪法使得睫毛的背景干擾影響降低,提高了檢測準確度。因此,本文方法在保證檢測精度與魯棒性高的同時,檢測速度有了顯著降低,滿足眼底相機中照明控制對瞳孔定位精度與時間的要求。
表2 3種算法的平均計算時間和檢測精度比較Table 2 Comparison with previous works
本文為輔助眼底相機自動為患者拍攝眼底圖像,提出了一種用于眼底照明控制的瞳孔中心點定位方法。該方法通過基于YCbCr色彩空間的閾值分割法進行瞳孔區域分割,形態學濾波去除噪聲。通過水平積分閾值裁剪法降低眼睫毛背景干擾,最后使用連通域標記與最小包圓法計算瞳孔中心坐標。為滿足瞳孔定位實時性的要求,基于ZYNQ處理器完成了算法加速,將瞳孔區域分割算法部署在PL端,經實驗驗證,本文方法在硬件資源消耗40%的情況下,定位準確度在90%以上,檢測速度每幀69 ms,基本滿足眼底相機對基于瞳孔定位的照明控制技術的魯棒性、精確性和實時性的要求,有利于眼底相機的智能化改進。