2018年8月18日

用Imagej分析薄膜干涉的顏色與厚度

最近一個眼科醫師來信問到要分析淚膜油脂層厚度的問題,真是開啟了我學習之旅,特別是在干涉色的部分。

好,一步一步來說明。在他來信之前,我從來都以為眼淚不過就是一層淚水罷了,原來眼淚不只是眼淚,請自行Google "tear film"的圖自行參考,眼淚層的最外層原來還有一層油脂層,那是眼瞼的腺體分泌的,其中一個重要功能就是讓淚水不會很快就蒸發。這層油脂層大約是100nm,不過要怎麼知道它的厚度呢?

這裡就要用到物理課教過的薄膜干涉了,現象大家也都看過,就是在柏油路上積水上剛好又有浮油就很容易看到上面有彩虹色彩的,那就是薄膜干涉。當然泡泡上的色彩也是薄膜干涉,不過這裡講的淚水上的油脂層其實是跟水上有油那個例子一樣的,如果是泡泡的話,膜兩側是空氣,所以稍稍有些不同。

那麼薄膜干涉怎麼幫助判斷厚度呢?其實薄膜干涉會出現的干涉色會和厚度有關係。下方這個圖是我看了薄膜干涉的公式之後,自己用Excel加上一些VBA畫出來的圖。越左邊的顏色是越薄的薄膜,越右邊就是越厚的了。以100nm的厚度來說,干涉色其實是灰灰白白的,所以正常人的眼睛你也不容易看到有特別的干涉色出現囉。



醫學上要檢驗這淚膜上油脂層的厚度也是有專用的機器,這次提問的醫生就告訴我他們是用Keratograph 5M這個機器在拍的。這個講機器名字也沒關係,反正誰會沒事會去買這個東西,所以沒有業配這種事情。

那機器就是有光源均勻照射眼球,然後有攝影機特寫眼球表面看薄膜干涉的干涉色,在判斷上就是主觀看顏色判斷有多厚,這次的提問就是想說可不可以量化那個顏色。提問的醫師有給一份文件【Image‑based quantitative analysis of tear flm lipid layer thickness for meibomian
gland evaluation】,有興趣的Google一下就可以看到。文件裡有一個顏色和厚度的對照圖,所以理論上只要能對到那個顏色,就知道厚度了,不過實務上是有些問題的。

一開始我以為只要像分析海溫那樣,用imagej的Calibrate的功能,把那個顏色轉換成厚度就好。不過想想是做不到的,因為真實影像的色彩是對不到那個顏色厚度圖的。舉例來說,影像中一個點的RGB(100,200,140),但是你可能在顏色厚度對照圖裡找不到這種顏色。

怎麼辦呢?所以就要找「接近」的顏色了,這裡就要用到了「歐式距離」來算了。就一個XY平面來說,空間中兩個點的距離的算法是((x1-x2)^2+(y1-y2)^2))^0.5,如果是立體空間的話,就是多加一個(z1-z2)^2而已。這邊要算「顏色接近」也是這樣做,把RGB當作三維,看看真實影像裡的某個點RGB和對照圖的RGB哪個距離比較近,找到最近的之後,換算成厚度就好了。


不過imagej裡沒有內建這種功能,所以我是把影像的色頻分離後轉存成text image再用excel去分析,那個算歐式距離的就交給Excel VBA去算,程式在此
https://drive.google.com/file/d/1sZ-Rc9G42_ITNTRvS-GKfZS03X2eNPCs/view?usp=sharing


好啦,大致上就是這樣,詳細的分析方法就用影片吧。