角膜作為眼光學系統最為重要的屈光部分, 它的特性在臨床手術中是一個重要的參數。本課題是通過Windows下的Hook技術自動截獲Orbscan Ⅱ角膜地形圖儀在檢測過程中產生的數據, 并將數據讀取到編寫的角膜分析軟件中, 進一步對數據進行分析與計算, 求得個體的全角膜360個半子午線Q值。角膜分析軟件是以Visual C++6.0為開發環境, 利用OpenGL繪圖技術, 繪制出個性化三維角膜形態與Q值分布圖, 并實現對角膜數據的即時查詢, 更好地擴展了角膜地形圖儀的功能, 為下一步研究角膜疾病的自動篩查打下了堅實的基礎。
引用本文: 黃學平, 謝忠好, 岑琴, 鄭穗聯. 基于角膜地形圖儀的個性化角膜分析軟件的設計與實現. 生物醫學工程學雜志, 2016, 33(4): 674-679. doi: 10.7507/1001-5515.20160111 復制
0 引言
角膜(cornea)是位于眼球前壁的一層透明膜,它的屈光力占整個眼球屈光力的3/4,它表面形貌特征的微小變化都會影響人的視力。在自然情況下角膜不是一個理想的球面,而是中間凸、四周相對平坦的非球面,其非球面性是以“Q值”來表示。Q值的計算方法之前一直是沿用Bennett等[1]于1991年提出的公式,但使用角膜曲率計計算所得的值準確率較低,直到角膜地形圖儀的出現,才有了新的突破。角膜地形圖儀是測量角膜表面形態特征的醫學檢查器械,通過使用計算機處理軟件來輔助對角膜表面上各點的形態及屈光力進行詳細定量描述,能夠為醫學臨床應用提供大量有價值的信息[2]。
目前,多種角膜地形圖儀應用于各大醫療機構,其中基于Placido盤的角膜地形圖儀技術最為成熟。本文所使用的就是基于Placido盤和斷層掃描原理的Orbscan Ⅱ角膜地形圖儀。Orbscan Ⅱ角膜地形圖儀采用光學裂隙掃描技術,能獲取角膜前后表面圖像,還能對角膜前后表面形態、角膜厚度、前房深度、角膜屈光力等多方面進行分析,給臨床醫療工作者提供檢測眼前節的全新概念和詳盡數據。一直以來,人們將Bennett公式應用于角膜地形圖儀內計算Q值,但由于角膜不同范圍的Q值是不同的,一般來說3 mm角膜直徑的Q值最大,越到周邊就越小,多數角膜地形圖儀所給出的Q值是角膜擬合球面直徑6 mm或角膜中央30°范圍的默認值[3],即一個Q值。Orbscan Ⅱ也不例外,取的也是平均值。而角膜表面用一個平均Q值來展示非球面特征,無法建立一種真正空間意義上的個體化角膜表面形態模型。但如果通過利用正切曲率半徑計算,得到細化的360°各半子午線截痕的Q值,再通過計算機處理建立角膜前表面的三維形態圖形,將建立一種真正空間意義上的角膜前表面模型,對角膜形態的描述將更準確。由于Obscan Ⅱ只是提供了大量的角膜基礎數據,針對被檢者個性化的全角膜數據(如個體的一系列Q值)還需要臨床醫療工作者根據得到的基礎數據進行更深入的計算,才能更好地輔助診斷及治療眼科疾病。目前大部分角膜地形圖儀都是國外進口的,價格昂貴,且只提供專有軟件已設計好的功能及計算結果,不開放基礎采集數據,不提供二次開發接口。如果要用新的模型進行角膜分析,則每一次檢查都要靠人工記錄角膜地形圖上每一點的基礎數據(一般每個角膜至少記錄360個數據),然后利用這些數據做進一步計算與研究,不僅工作量大、效率低,而且無法快速獲取每個個體的角膜信息,不符合當前倡導的快速診斷的要求。為獲得一種能自動獲取角膜數據并進行個性化快速分析的技術,本課題在充分了解Orbscan Ⅱ角膜地形圖儀原理的基礎上,利用計算機技術實時截獲角膜地形圖儀檢測過程中產生的數據,并轉化為可供程序自動計算360°各半子午線截痕的Q值,同時生成個性化的角膜前表面形態,使眼科醫生無需擔心數據采集的準確性和計算的復雜性,而只需專注于業務本身的操作流程,便能輕松掌握和使用直觀、形象的快速分析技術,幫助其做出正確的診斷和治療。
1 軟件總體架構
本課題組在Orbscan Ⅱ角膜地形圖儀上的數據獲取方面做了許多的研究工作[4],在此基礎上提出了利用Hook(Windows消息處理機制的一個平臺)技術實時截獲Orbscan Ⅱ角膜地形圖儀在檢測過程中產生的數據,并對數據進行個性化分析。軟件總體架構圖如圖 1所示。

根據當前臨床診斷的需求,本軟件主要實現以下幾個功能:
(1)在角膜檢測過程中自動獲取Orbscan Ⅱ角膜地形圖儀系統中產生的角膜數據(曲率值等);
(2)根據截獲的曲率值計算得到個體化的全角膜Q值,并以曲線直觀表示;
(3)可全方位展示每個個體的角膜三維圖像;
(4)針對被檢者,可即時查詢個性化角膜數據;
(5)實現對角膜的數據管理。
2 軟件的設計與實現
角膜分析軟件對角膜數據的獲取與分析有兩種方法:其一是在文獻2中介紹的根據對角膜繪圖數據和彩帶條的比較獲取DF值(differential,指實際曲面各個檢測點與理想球面定點的高度差),繼而深入分析;其二是利用角膜繪圖數據獲取半子午線對應的曲率值,從而計算Q值。本文所采取的是第二種方法。
2.1 角膜數據的自動獲取
Hook技術能夠將自身的代碼“融入”被hook住的程序的進程中,成為目標進程的一部分。而API hook就是將應用程序編程接口(Application Programming Interface,API)調用的地方進行了轉移,或者重新實現的一種技術,是對API的正常調用起一個攔截或中間層的作用,這樣可以在調用正常的API之前得到控制權,執行自己的代碼。本角膜分析軟件就是利用Hook技術在Orbscan Ⅱ角膜地形圖儀系統上設置子程以監視Orbscan Ⅱ系統中指定窗口的某個消息,當消息發出時,角膜分析軟件會先捕獲該消息,從而得到被檢者的角膜數據,具體流程見圖 2所示。

(1)當Orbscan Ⅱ系統啟動后,角膜分析軟件會調用CreateRemoteThread函數將hook代碼的動態鏈接庫(dynamic link library, dll)文件加載到Orbscan Ⅱ的進程里面。
(2)dll文件中創建了一個函數結構與Orbscan Ⅱ中createDIBitmap函數完全一致的MycreateDIBitmap函數。代碼注入成功后,修改Orbscan進程中的導入地址表(import address table, IAT)信息,即將createDIBitmap函數的跳轉地址指向了dll文件中的目標函數MycreateDIBitmap,因此當Obscan Ⅱ調用createDIBitmap函數時,先是調用了MycreateDIBitmap,實現對角膜數據第一時間的截獲。
(3)角膜分析軟件截獲的數據包括被診者名字、ID、Tangetial Power和原始數據取得的時間等信息。采用內存共享技術,取得MycreateDIBitmap得到的數據。
通過以上方法得到的角膜繪圖數據如圖 3所示。

角膜繪圖數據圖是本分析軟件在角膜檢測過程中將屏幕上顯示的數據截獲下來的,與原角膜地形圖儀系統中展示的角膜數據完全一致。上圖中左側的顏色條是各顏色和與之對應的曲率值,圖正中所示的圖形是被檢者的角膜數據,以0~359°展現角膜各個范圍的曲率值,且不同的曲率值以不同的顏色標識。
2.2 角膜數據的自動分析
2.2.1 根據彩色條獲取曲率值
大多數角膜地形圖儀規定采用冷色(深藍、淺藍)代表平坦的角膜部分(屈光力弱);暖色(紅、橙、黃)代表陡峭的角膜部分(屈光力強);中間色用綠色。在角膜地形圖上標有一個彩色條形圖示稱為色彩級差標尺,它標明這一角膜地形圖上每一種顏色所代表的角膜屈光力。在Orbscan Ⅱ角膜地形圖儀系統中,角膜上不同曲率半徑對應不同的顏色,從 & HFA64C8至 & H8C8CE6,部分值如表 1所示。

從表 1中可以了解到每種顏色對應不同的曲率。當前所使用的Orbscan Ⅱ版本默認為35級顏色帶,如顏色值為 & H50D214的彩條對應的曲率值為45.5。將所得到的繪圖數據與彩色條進行對比,可以取得曲率的值。再根據醫生臨床診斷的習慣,對獲取的數據進行轉換,設定角膜半子午線每間隔1°為角度步長,周邊離角膜頂點距離每間隔0.1 mm為距離步長,得到的正切曲率值如表 2所示。

2.2.2 利用曲率值求Q值
每一個人均有自己的角膜非球面特性(Q值),且是獨一無二的。準分子激光角膜屈光手術就是針對每個個體角膜的Q值進行個性化治療[5],Q值在手術中起到關鍵的作用[6]。Q值引導的個性化手術就是通過預先輸入患者的個體化Q值,使得術后仍然保持角膜的非球面性,從而降低因手術引入的球面像差,增進術后視覺效果。文獻[7]中介紹了一種求Q值的方法,即利用線性回歸擬合法和坐標旋轉技術得到角膜前表面360條半子午線的Q值。
由標準二次曲線公式和曲率公式推導得到正切曲率半徑公式,其中曲率半徑rt值為376/曲率值,y為離角膜頂點的距離值。令,得到;再令,得。利用線性回歸擬合法求出a、b值,繼而求得c值,然后由公式計算得到該條半子午線的Q值。再利用坐標旋轉技術得到角膜0~359°半子午線的Q值。
2.3 角膜數據展示
本角膜分析軟件是以VC++ 6.0為開發環境,利用OpenGL(Open Graphics Library)技術,繪制曲率半徑為7.7 mm的理想半球面,再根據曲率值的顏色條給圖形進行著色,使模型更具立體感,臨床工作者可以通過鼠標變換不同視角,更好地查看角膜表面的形態,如圖 4所示。除此以外,軟件還可以自動繪制求得的360條半子午線產生的圖形,也可導出Q值表,協助醫生更好地診斷角膜疾病,如圖 5所示。由于每個被檢者的角膜信息都被存入數據庫中,醫生可以隨時按照ID、時間等方式調用被檢者的數據,簡單易用,大大減輕醫生的臨床檢查工作,查詢界面如圖 6所示。



3 討論
通過個性化角膜分析軟件將角膜形態進行數碼化分析,并將所獲得的信息以不同特征的彩色圖來表現,能夠精確測量、分析全角膜前表面任意點的曲率,檢測角膜屈光力,是研究角膜前表面形態的一種系統而全面的定量分析手段。
該軟件的主要創新點有:
(1)軟件在不影響現有角膜地形圖儀的情況下,可以自動獲取角膜數據,摒棄了手工記錄數據的方式,大大提升了工作效率。
(2)由于角膜數據是以位圖的形式被存入數據庫,避免了數據的失真,同時也為數據的重復使用奠定了基礎。
(3)能繪制個體化的角膜三維圖形并采用線性回歸擬合法自動求得全角膜Q值分布圖,能夠精確地分析整個角膜表面的形態。
(4)增加數據查詢功能,提高了臨床檢查的效率。
實踐證明,手工記錄的數據求得的Q值分布圖與使用本軟件截獲數據所求得的Q值分布圖基本一致,可為臨床工作者提供準確的輔助信息。
本軟件雖然顯著提升了獲取數據、計算Q值的工作效率,但是三維成像和Q值分布圖仍需要人工主觀判斷,存在一定的誤差,因此自動對圓錐角膜和角膜疾患的篩查是未來的研究方向。
4 小結
本角膜分析軟件是在現有的角膜地形圖儀系統上,通過Windows下的API Hook程序掛接到Orbscan Ⅱ進程中,即時截獲檢測過程中產生的角膜數據,并通過共享內存的方式,將數據讀取到角膜分析軟件中,且存入數據庫。在VC++ 6.0開發環境下,對截獲的數據進一步分析、處理,自動地為每一位被檢者提供個體化的三維角膜形態、Q值分布圖及查詢功能,更好地擴展了角膜地形圖儀的功能,為角膜的深入研究開辟了新的思路。
0 引言
角膜(cornea)是位于眼球前壁的一層透明膜,它的屈光力占整個眼球屈光力的3/4,它表面形貌特征的微小變化都會影響人的視力。在自然情況下角膜不是一個理想的球面,而是中間凸、四周相對平坦的非球面,其非球面性是以“Q值”來表示。Q值的計算方法之前一直是沿用Bennett等[1]于1991年提出的公式,但使用角膜曲率計計算所得的值準確率較低,直到角膜地形圖儀的出現,才有了新的突破。角膜地形圖儀是測量角膜表面形態特征的醫學檢查器械,通過使用計算機處理軟件來輔助對角膜表面上各點的形態及屈光力進行詳細定量描述,能夠為醫學臨床應用提供大量有價值的信息[2]。
目前,多種角膜地形圖儀應用于各大醫療機構,其中基于Placido盤的角膜地形圖儀技術最為成熟。本文所使用的就是基于Placido盤和斷層掃描原理的Orbscan Ⅱ角膜地形圖儀。Orbscan Ⅱ角膜地形圖儀采用光學裂隙掃描技術,能獲取角膜前后表面圖像,還能對角膜前后表面形態、角膜厚度、前房深度、角膜屈光力等多方面進行分析,給臨床醫療工作者提供檢測眼前節的全新概念和詳盡數據。一直以來,人們將Bennett公式應用于角膜地形圖儀內計算Q值,但由于角膜不同范圍的Q值是不同的,一般來說3 mm角膜直徑的Q值最大,越到周邊就越小,多數角膜地形圖儀所給出的Q值是角膜擬合球面直徑6 mm或角膜中央30°范圍的默認值[3],即一個Q值。Orbscan Ⅱ也不例外,取的也是平均值。而角膜表面用一個平均Q值來展示非球面特征,無法建立一種真正空間意義上的個體化角膜表面形態模型。但如果通過利用正切曲率半徑計算,得到細化的360°各半子午線截痕的Q值,再通過計算機處理建立角膜前表面的三維形態圖形,將建立一種真正空間意義上的角膜前表面模型,對角膜形態的描述將更準確。由于Obscan Ⅱ只是提供了大量的角膜基礎數據,針對被檢者個性化的全角膜數據(如個體的一系列Q值)還需要臨床醫療工作者根據得到的基礎數據進行更深入的計算,才能更好地輔助診斷及治療眼科疾病。目前大部分角膜地形圖儀都是國外進口的,價格昂貴,且只提供專有軟件已設計好的功能及計算結果,不開放基礎采集數據,不提供二次開發接口。如果要用新的模型進行角膜分析,則每一次檢查都要靠人工記錄角膜地形圖上每一點的基礎數據(一般每個角膜至少記錄360個數據),然后利用這些數據做進一步計算與研究,不僅工作量大、效率低,而且無法快速獲取每個個體的角膜信息,不符合當前倡導的快速診斷的要求。為獲得一種能自動獲取角膜數據并進行個性化快速分析的技術,本課題在充分了解Orbscan Ⅱ角膜地形圖儀原理的基礎上,利用計算機技術實時截獲角膜地形圖儀檢測過程中產生的數據,并轉化為可供程序自動計算360°各半子午線截痕的Q值,同時生成個性化的角膜前表面形態,使眼科醫生無需擔心數據采集的準確性和計算的復雜性,而只需專注于業務本身的操作流程,便能輕松掌握和使用直觀、形象的快速分析技術,幫助其做出正確的診斷和治療。
1 軟件總體架構
本課題組在Orbscan Ⅱ角膜地形圖儀上的數據獲取方面做了許多的研究工作[4],在此基礎上提出了利用Hook(Windows消息處理機制的一個平臺)技術實時截獲Orbscan Ⅱ角膜地形圖儀在檢測過程中產生的數據,并對數據進行個性化分析。軟件總體架構圖如圖 1所示。

根據當前臨床診斷的需求,本軟件主要實現以下幾個功能:
(1)在角膜檢測過程中自動獲取Orbscan Ⅱ角膜地形圖儀系統中產生的角膜數據(曲率值等);
(2)根據截獲的曲率值計算得到個體化的全角膜Q值,并以曲線直觀表示;
(3)可全方位展示每個個體的角膜三維圖像;
(4)針對被檢者,可即時查詢個性化角膜數據;
(5)實現對角膜的數據管理。
2 軟件的設計與實現
角膜分析軟件對角膜數據的獲取與分析有兩種方法:其一是在文獻2中介紹的根據對角膜繪圖數據和彩帶條的比較獲取DF值(differential,指實際曲面各個檢測點與理想球面定點的高度差),繼而深入分析;其二是利用角膜繪圖數據獲取半子午線對應的曲率值,從而計算Q值。本文所采取的是第二種方法。
2.1 角膜數據的自動獲取
Hook技術能夠將自身的代碼“融入”被hook住的程序的進程中,成為目標進程的一部分。而API hook就是將應用程序編程接口(Application Programming Interface,API)調用的地方進行了轉移,或者重新實現的一種技術,是對API的正常調用起一個攔截或中間層的作用,這樣可以在調用正常的API之前得到控制權,執行自己的代碼。本角膜分析軟件就是利用Hook技術在Orbscan Ⅱ角膜地形圖儀系統上設置子程以監視Orbscan Ⅱ系統中指定窗口的某個消息,當消息發出時,角膜分析軟件會先捕獲該消息,從而得到被檢者的角膜數據,具體流程見圖 2所示。

(1)當Orbscan Ⅱ系統啟動后,角膜分析軟件會調用CreateRemoteThread函數將hook代碼的動態鏈接庫(dynamic link library, dll)文件加載到Orbscan Ⅱ的進程里面。
(2)dll文件中創建了一個函數結構與Orbscan Ⅱ中createDIBitmap函數完全一致的MycreateDIBitmap函數。代碼注入成功后,修改Orbscan進程中的導入地址表(import address table, IAT)信息,即將createDIBitmap函數的跳轉地址指向了dll文件中的目標函數MycreateDIBitmap,因此當Obscan Ⅱ調用createDIBitmap函數時,先是調用了MycreateDIBitmap,實現對角膜數據第一時間的截獲。
(3)角膜分析軟件截獲的數據包括被診者名字、ID、Tangetial Power和原始數據取得的時間等信息。采用內存共享技術,取得MycreateDIBitmap得到的數據。
通過以上方法得到的角膜繪圖數據如圖 3所示。

角膜繪圖數據圖是本分析軟件在角膜檢測過程中將屏幕上顯示的數據截獲下來的,與原角膜地形圖儀系統中展示的角膜數據完全一致。上圖中左側的顏色條是各顏色和與之對應的曲率值,圖正中所示的圖形是被檢者的角膜數據,以0~359°展現角膜各個范圍的曲率值,且不同的曲率值以不同的顏色標識。
2.2 角膜數據的自動分析
2.2.1 根據彩色條獲取曲率值
大多數角膜地形圖儀規定采用冷色(深藍、淺藍)代表平坦的角膜部分(屈光力弱);暖色(紅、橙、黃)代表陡峭的角膜部分(屈光力強);中間色用綠色。在角膜地形圖上標有一個彩色條形圖示稱為色彩級差標尺,它標明這一角膜地形圖上每一種顏色所代表的角膜屈光力。在Orbscan Ⅱ角膜地形圖儀系統中,角膜上不同曲率半徑對應不同的顏色,從 & HFA64C8至 & H8C8CE6,部分值如表 1所示。

從表 1中可以了解到每種顏色對應不同的曲率。當前所使用的Orbscan Ⅱ版本默認為35級顏色帶,如顏色值為 & H50D214的彩條對應的曲率值為45.5。將所得到的繪圖數據與彩色條進行對比,可以取得曲率的值。再根據醫生臨床診斷的習慣,對獲取的數據進行轉換,設定角膜半子午線每間隔1°為角度步長,周邊離角膜頂點距離每間隔0.1 mm為距離步長,得到的正切曲率值如表 2所示。

2.2.2 利用曲率值求Q值
每一個人均有自己的角膜非球面特性(Q值),且是獨一無二的。準分子激光角膜屈光手術就是針對每個個體角膜的Q值進行個性化治療[5],Q值在手術中起到關鍵的作用[6]。Q值引導的個性化手術就是通過預先輸入患者的個體化Q值,使得術后仍然保持角膜的非球面性,從而降低因手術引入的球面像差,增進術后視覺效果。文獻[7]中介紹了一種求Q值的方法,即利用線性回歸擬合法和坐標旋轉技術得到角膜前表面360條半子午線的Q值。
由標準二次曲線公式和曲率公式推導得到正切曲率半徑公式,其中曲率半徑rt值為376/曲率值,y為離角膜頂點的距離值。令,得到;再令,得。利用線性回歸擬合法求出a、b值,繼而求得c值,然后由公式計算得到該條半子午線的Q值。再利用坐標旋轉技術得到角膜0~359°半子午線的Q值。
2.3 角膜數據展示
本角膜分析軟件是以VC++ 6.0為開發環境,利用OpenGL(Open Graphics Library)技術,繪制曲率半徑為7.7 mm的理想半球面,再根據曲率值的顏色條給圖形進行著色,使模型更具立體感,臨床工作者可以通過鼠標變換不同視角,更好地查看角膜表面的形態,如圖 4所示。除此以外,軟件還可以自動繪制求得的360條半子午線產生的圖形,也可導出Q值表,協助醫生更好地診斷角膜疾病,如圖 5所示。由于每個被檢者的角膜信息都被存入數據庫中,醫生可以隨時按照ID、時間等方式調用被檢者的數據,簡單易用,大大減輕醫生的臨床檢查工作,查詢界面如圖 6所示。



3 討論
通過個性化角膜分析軟件將角膜形態進行數碼化分析,并將所獲得的信息以不同特征的彩色圖來表現,能夠精確測量、分析全角膜前表面任意點的曲率,檢測角膜屈光力,是研究角膜前表面形態的一種系統而全面的定量分析手段。
該軟件的主要創新點有:
(1)軟件在不影響現有角膜地形圖儀的情況下,可以自動獲取角膜數據,摒棄了手工記錄數據的方式,大大提升了工作效率。
(2)由于角膜數據是以位圖的形式被存入數據庫,避免了數據的失真,同時也為數據的重復使用奠定了基礎。
(3)能繪制個體化的角膜三維圖形并采用線性回歸擬合法自動求得全角膜Q值分布圖,能夠精確地分析整個角膜表面的形態。
(4)增加數據查詢功能,提高了臨床檢查的效率。
實踐證明,手工記錄的數據求得的Q值分布圖與使用本軟件截獲數據所求得的Q值分布圖基本一致,可為臨床工作者提供準確的輔助信息。
本軟件雖然顯著提升了獲取數據、計算Q值的工作效率,但是三維成像和Q值分布圖仍需要人工主觀判斷,存在一定的誤差,因此自動對圓錐角膜和角膜疾患的篩查是未來的研究方向。
4 小結
本角膜分析軟件是在現有的角膜地形圖儀系統上,通過Windows下的API Hook程序掛接到Orbscan Ⅱ進程中,即時截獲檢測過程中產生的角膜數據,并通過共享內存的方式,將數據讀取到角膜分析軟件中,且存入數據庫。在VC++ 6.0開發環境下,對截獲的數據進一步分析、處理,自動地為每一位被檢者提供個體化的三維角膜形態、Q值分布圖及查詢功能,更好地擴展了角膜地形圖儀的功能,為角膜的深入研究開辟了新的思路。