回到首頁

MorphoLibJ

教學影片

安裝

  1. 執行Help › Update…,按Manage update sites
  2. 搜尋IJPB-plugins,按下Apply,安裝後重新啟動Fiji。

基本原理

分水嶺(Watershed)演算法將影像視為一個地形圖,模擬水往低處流的概念,從最低點向外淹水擴展,直到遇到其他區域的擴展,然後形成邊界。為了避免過度分割,通常需要手動或自動生成一些「標記」(種子點),這些標記代表了每個要分割的物體內部,從這些標記開始淹水。這個過程中,區域(region)會從種子點或最低點開始「長出來」,所以是典型的region growing策略。

在 MorphoLibJ 中,分水嶺方法主要基於梯度圖距離圖,其中有些方法會需要手動或自動產生種子點。

梯度圖

梯度圖 (Gradient Image):梯度最大的區域可以理解為影像中亮度或灰度變化最劇烈的區域。物體的邊界通常是亮度變化最大的地方,因此梯度影像會突出物體邊緣。若當作地形圖來看,則可視做在目標前景的外圍建出高牆。

你有以下數種方式可以產生梯度圖:

-1 -1 -1 -1 -1
-1 -1 -1 -1 -1
-1 -1 24 -1 -1
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1

如果是傳統的Laplacian則是這種形式(3x3)

0 -1 0
-1 4 -1
0 -1 0

距離圖

輸入二值化影像後,執行Process › Binary › Distance Map,會產生距離圖(Euclidian distance map,EDM)。將其反相,則可將前景視作山谷,用來做後續的分水嶺算法。

種子點

  1. 種子點可利用 Laplacian of GaussianDifference of Gaussian(DoG)亮點偵測產生
  2. 或是輸入二值化影像,執行Process › Binary › Ultimate Points就可以產生Ultimate Points 終極點。這個方法是對二值圖產生距離圖後再找出Maxima。此點的value是EDM的數字,等同此粒子內最大內切圓的半徑。可作為分割粒子依據,會產生ultimate eroded points (UEPs)

Classic Watershed

原理請見官方網頁的圖

使用方法

Classic Watershed 插件可在任何 2D 和 3D 的灰階影像(8、16 和 32-bit)上運行。 至少需要開啟一張影像才能運行此插件。

參數

輸出

實作

執行此Macro觀看範例,可以發現前處理如去噪可避免過度分割

run("Blobs (25K)");
run("Invert LUT");
run("Invert");
rename("origin");


run("Classic Watershed", "input=origin mask=None use min=0 max=150");
run("3-3-2 RGB");
rename("直接watershed");



selectWindow("origin");
run("Duplicate...", "title=高斯模糊");
run("Gaussian Blur...", "sigma=3");
run("Classic Watershed", "input=高斯模糊 mask=None use min=0 max=150");
run("3-3-2 RGB");
rename("高斯後watershed");

run("Tile");

Marker-controlled Watershed

官方網頁說明

使用方法

至少需要兩張影像才能運行:

此外,還可以選擇性地加入第三張影像:

參數

參數詳解

1. 緊湊度 (Compactness)

Compactness = 0 (傳統分水嶺)

Compactness > 0 (緊湊分水嶺)

選擇最佳值通常需要反覆試驗,原則如下:

  1. 0 開始: 先以傳統分水嶺的結果作為基準,觀察區域是否過於破碎或邊緣鋸齒嚴重。
  2. 逐步增加: 如果物件預期是規則形狀,或結果受雜訊影響嚴重,可逐步增加緊湊度(如 0.1, 0.5, 1.0...),並觀察變化。
  3. 考慮影像特性:
    • 高雜訊影像: 適當的緊湊度(如 0.5 ~ 2.0)有助於消除假邊緣。
    • 複雜形狀物件: 若物件本身形狀不規則,應使用較小的緊湊度,以避免過度簡化其真實輪廓。

2. 計算分水嶺線 (Calculate Dams)

此功能決定是否在分割出的不同區域之間產生明確的「分水嶺線」(Dams)。

啟用 "Calculate Dams"

禁用 "Calculate Dams"

輸出

實作

執行以下Macro

run("Blobs (25K)");
run("Invert LUT");
run("Duplicate...", "title=origin");


selectImage("origin");
run("Duplicate...", "title=edge");
run("Gaussian Blur...", "sigma=3");
run("Find Edges");


selectImage("origin");
run("Duplicate...", "title=binary");
run("Gaussian Blur...", "sigma=3");
setAutoThreshold("Triangle dark");
run("Convert to Mask");


selectImage("binary");
run("Duplicate...", "title=point");
run("Ultimate Points");


run("Marker-controlled Watershed", "input=edge marker=point mask=None compactness=0 use");
run("glasbey on dark");
run("Label Map to ROIs", "connectivity=C4 vertex_location=Corners name_pattern=r%03d");

run("Tile");



Interactive Marker-controlled Watershed

互動式標記控制的分水嶺分割

使用方法

  1. 在影像上使用 Point ToolMulti-point Tool 或任何選取工具,標示出您感興趣的物件(作為「種子點」)。可事先製作,或使用這個plugin的時候,臨時加入ROI manager,並update加入影像中。
  2. 將這些標記加入 ROI Manager (Analyze > Tools > ROI Manager...)。
  3. 在 ROI Manager 視窗中,選取所有要作為種子點的 ROI。
  4. 執行Plugins › MorphoLibJ › Segmentation › Interactive Marker-controlled Watershed

實作

範例:使用維管束圖片進行細胞分割。圖片來源

開啟維管束圖片後,執行Macro

run("Duplicate...", "title=1");
run("8-bit");
run("Gaussian Blur...", "sigma=1");
run("Gaussian Blur...", "sigma=1");
run("Subtract Background...", "rolling=10 light sliding");
run("Invert");
run("Duplicate...", "title=2");
setAutoThreshold("Triangle");
run("Convert to Mask");
run("Duplicate...", "title=3");
run("Distance Map");
run("Find Maxima...", "prominence=1 output=[Point Selection]");
run("ROI Manager...");
roiManager("Add");
selectImage("1");
roiManager("Select", 0);
run("Interactive Marker-controlled Watershed");

Morphological Segmentation 形態學分割

Morphological Segmentation結合了形態學操作(如擴展最小值、形態學梯度)與分水嶺演算法,能夠對各種類型(8、16、32 位元)的 2D 和 3D 灰階影像進行高效分割。

使用方法

  1. 開啟影像:在 Fiji 中開啟任何8-bit影像(單一 2D 影像或 3D 堆疊)。
  2. 啟動插件:執行 Plugins > MorphoLibJ > Segmentation > Morphological Segmentation
  3. 設定參數:在插件視窗中,依序設定「輸入影像」、「分水嶺分割」的參數。
  4. 執行分割:點擊 Run 按鈕。
  5. 檢視與匯出:在「結果面板」中選擇不同的顯示方式,並可將結果匯出為新影像。
  6. 後處理:如有需要,可使用「後處理面板」的功能對分割結果進行微調。

在主畫布中可以隨時平移、縮放或滾動切片,就像操作一般 ImageJ 視窗一樣。


參數

1. 輸入影像

梯度類型 計算方式 邊緣厚度 邊緣位置 視覺效果
形態學梯度 膨脹 - 侵蝕 較厚 涵蓋物體邊緣內外兩側 邊界輪廓清晰,但較粗
內部梯度 原始 - 侵蝕 較薄 位於物體的內側 邊界精確,但偏內
外部梯度 膨脹 - 原始 較薄 位於物體的外側 邊界精確,但偏外

2. 分水嶺分割

設定分割演算法的核心參數。


3. 結果

此面板在執行分割後啟用,用於視覺化與匯出結果。


4. 後處理 Post-processing

多切片操作提示: 在 3D 堆疊中,可使用「點工具」並按住 SHIFT 鍵,在不同切片上點選要合併的物件。

實作

使用範例影像Blobs進行分割,Tolerance設定35。

Distance Transform Watershed

一種分離二值影像中相接觸物件的經典方法是利用距離變換(distance transform)分水嶺法(watershed method)。其想法是在重疊物件的中心盡可能遠的地方建立邊界。這種策略對圓形物件效果很好,被稱為距離變換分水嶺 (Distance Transform Watershed)。它包括計算二值影像的距離變換,將其反轉(因此影像最暗的部分是物件的中心),然後使用原始影像作為遮罩對其應用分水嶺。在我們的實作中,我們包含了一個使用擴展最小值的分水嶺選項,以便使用者可以控制物件分裂和合併的數量。

能分離相互接觸的二值物體 (如細胞、顆粒),有效處理黏連物體,分割線位於物體間距最遠處。

MorphoLibJ 在 Plugins › MorphoLibJ › Binary Images… 選單下提供演算法:

Distance Transform Watershed

Distance Transform Watershed 需要一個 2D 8-bit 的二值影像來運行。若是如此,將會彈出如下的對話框:

插件參數分為距離變換和分水嶺選項:

距離圖選項 (Distance map options):

分水嶺選項 (Watershed options):

最後,可以點擊 Preview 選項來視覺化目前插件配置的結果。

結果:2D 32位元標籤影像(每個物件一個索引值)。

Distance Transform Watershed (3D)

Distance Transform Watershed 3D 需要一個 3D 8-bit 的二值影像來運行。若是如此,將會彈出如下的對話框:

參數與 2D 版本相同,但部分參數已修改為對 3D 影像:

距離圖選項 (Distance map options):

分水嶺選項 (Watershed options):

結果:3D 32位元標籤影像(每個物件一個索引值)。

實作

使用維管束圖片進行細胞分割。圖片來源

開啟維管束檔案後,執行以下Macro

run("Duplicate...", "title=binary")

run("8-bit");
run("Gaussian Blur...", "sigma=2");
setAutoThreshold("Triangle dark");
run("Convert to Mask");
run("Distance Transform Watershed", "distances=[Quasi-Euclidean (1,1.41)] output=[32 bits] normalize dynamic=1 connectivity=4");
run("glasbey on dark");
run("Label Map to ROIs", "connectivity=C4 vertex_location=Corners name_pattern=r%03d");
run("ROI Manager...");

run("Tile");