2009年5月29日

用ImageJ分析顏色

前幾天一個學生寫信問我這樣一個問題
阿簡老師你好:
我是動科系(舊名畜產系)的學生,最近老師讓我們用小鼠做生理學的實驗。我們
做的實驗是測驗雌鼠去勢之後對肥胖代謝的影響。
然後結果的觀察有一部分是在實驗結束後取出肝來觀察。我正常的肝會是血紅色,脂肪肝會偏黃色。脂肪肝程度越高,顏色會越淡越黃。
請問老師知道image J有辦法做類似色譜分析(紅色多少%、黃色多少%、藍色多少%之類的)的工作,來量化比較樣本的外觀脂肪肝程度
謝謝老師
詠文上


ImageJ做得到嗎?當然可以,它可是地球上最強的生物醫學影像處理軟體呢!不過怎麼用呢?
我google了一下,找到了這份文件
Colour Analysis Tools in ImageJ
這裡頭可是介紹了不少分析顏色的方式呢!

因為這份文件,我才開始能解決一些過去沒能解決的問題。
例如:
有位醫師問我,如何從一張彩色超音波影像中,挑出紅色的面積,那時候我只會手動圈選,不過現在也有解了,
就是用這裡的plugin【threshold_colour

還有一位做細胞免疫螢光染色的研究生,問我如何去量化幾張圖片中的綠色螢光。那時候我只能教他用灰階來看value,不過現在我想到應該可以把圖片以HSB(HSL)模式呈現,去看顏色的飽和度和亮度。

色彩模型有很多種,像是RGB、CMYK或是HSB。HSB模型就是彩度、飽和度和亮度,這種模型符合人類視覺對色彩的感知方式,像是在描述深紅色和淺紅色,只要固定色相是紅色,然後調整飽和度和亮度就可以了。

就以本篇文章最上面那位同學的舉手發問來說吧,這個就很難用RGB模型去解釋,可是用HSB就可以解釋了。

以下就幾種色彩分析的plugin來說明

threshold_colour

目的:取出影像中某些特定顏色,加入threshold
來源:http://www.dentistry.bham.ac.uk/landinig/software/software.html

下載後解壓縮,放在plungins資料中,開啟Imagej之後就可以在plugin的選單中找到Threshold_Colour
先開啟欲分析的圖片,再點選Threshold_Colour,就會出現下圖右邊的視窗。
你可以調整拉桿去決定你要的顏色,然後勾取Threshold,就可以了
HSB Histogram



HSB_Histogram
目的:分析HSB的分佈。

就像最上面的例子,想知道一張圖藍色有多少、黃色有多少。這個Macros(怎麼取得,最後再說)和上面那個Plugin的功能有點像,看下面範例的右邊視窗,我就知道整個影像的黃色綠色的分佈比例最多,但是上面那個plugin沒辦法把量化的數值取出來,所以我們要改用別的方式,做出來的結果就是左邊的視窗【HSB Histogram】,其實畫面的高低峰和右邊的【Threshold Colour】一樣,只是畫面的呈現很容易讓人誤會,你可能會以為它分析的是RGB,那是因為它借用了另外一個叫【RGB Histogram】的功能來做,所以畫面長很像。不過沒關係,反正我們只要知道第一個是彩度的分佈,剩下兩個是飽和度和明度。

HSB Histogram


按下左下角的LIst,就可以把所有量化的數值都取出來了。
因為它是借用【RGB Histogram】來分析,但沒有改標籤,所以自己要知道,red其實是彩度、green其實是飽和度、blue是明度。

以下表中bin為2的那個資料來說明,意思是「這張圖裡,彩度值為2的像素有16個,飽和度為2的像素有5023個,明度值為2的有0個」,需要特別注意的是,這裡用的彩度值不是以360度為度量,而是以0~255來度量。
HSB

最後來說來源和取得方式
這個Macro在NIH的官網裡是有比較早的版本(http://rsb.info.nih.gov/ij/macros/HSB_Histogram.txt),不過執行到最後會有命名的問題出現,所以有更新的版本在


// Calculates the HSB histogram of an RGB image

// The RGB histograms correspond to the H, S and B components respectively

// Requires Color_Histogram plugin by Dimiter Prodanov

// 14/1/2006 fixed renaming of images


a=getTitle();

if (bitDepth()==24) {

run("HSB Stack");

run("Convert Stack to RGB");

run("Color Histogram");

b=getTitle();

selectWindow(a+" (RGB)");

run("Close");

selectWindow(a);

run("RGB Color");

c="title='HSB Histogram of "+a+"'";

selectWindow(b);

run("Rename...", c);

}

else{

showMessage(a +" is not an RGB image.");

}


把上面這段文字存在記事本裡,存檔為HSB_Histogram.txt
然後開啟Imagej,用Plungs/Macros/Install,去選這個HSB_Histogram.txt來安裝,然後就可以在Plungs/Macros裡看到HSB_Histogram的功能了。

開啟影像選HSB_Histogram,就會出現上面那張圖的樣子了。

祝福大家分析色彩愉快!