影像分割
簡介
影像分割(Image Segmentation)是將數位影像分割成多個區域或物件的過程。這在生物醫學影像分析中尤為重要,用於識別和定量分析細胞、組織、器官或其他感興趣的結構。本章節將介紹主要的影像分割技術,並特別說明如何在ImageJ軟體中實作這些方法。
基本概念與方法類型
影像分割原理
影像分割旨在將影像中的像素根據某種準則(如灰度值、顏色、紋理、空間位置等)進行分組,形成具有相似特徵的區域。主要目標通常是將前景物件與背景分離。
分割方法分類
影像分割方法大致可分為以下類型:
-
手動分割 (Manual Segmentation)
- 人工描繪感興趣區域(ROI)。
- 適用場景:複雜、不規則或稀有結構;需要極高精確度的特殊案例。
- 優點:準確度高,適用於任何影像。
- 缺點:耗時、主觀性強、不適合大量影像處理。
- 應用:特殊病理切片分析、複雜組織結構辨識。
-
半自動分割 (Semi-automatic Segmentation)
- 提供少量互動(如指定種子點、初始輪廓),程式自動完成大部分分割過程。
- 優點:結合了人工的指導和程式的效率。
- 缺點:仍需要一定程度的人工介入。
- 應用:血管網路追蹤、神經纖維分析、互動式區域生長。
-
自動分割 (Automatic Segmentation)
- 程式根據預設算法或學習的模型完全自動進行分割。
- 優點:效率高,適合批量處理,客觀性強。
- 缺點:算法選擇和參數設定對結果影響大;可能無法處理所有複雜情況。
- 主要自動方法包含:
- 傳統方法:基於閾值、邊緣、區域等特徵。
- 機器學習與深度學習方法:從標記數據中學習分割規則。
傳統影像分割方法
閾值分割 (Thresholding)
閾值分割是最基本且廣泛使用的自動分割方法。它根據像素的灰度值將影像分成前景和背景兩部分(二值化影像)。
- 原理: 選擇一個或多個灰度值作為閾值,將影像中的像素分為兩類:灰度值高於閾值的歸為一類(通常是前景),低於閾值的歸為另一類(通常是背景)。
-
類型:
- 全局閾值 (Global Threshold): 使用單一閾值應用於整張影像。適用於照明均勻且前景背景對比明顯的影像。
- 局部閾值 / 自適應閾值 (Local / Adaptive Threshold): 對影像不同區域使用不同的閾值。適用於照明不均勻或背景複雜的影像。
-
ImageJ中的閾值分割
- 手動閾值: 使用
Image > Adjust > Threshold...
功能。- 會彈出一個視窗,顯示影像的灰度直方圖和當前選擇的閾值範圍。
- 使用者可以手動拖動滑桿或輸入數值來設定閾值範圍。
- 影像上會實時顯示被選中的區域(通常為紅色)。
- 選擇「Apply」後,影像會被二值化(通常前景為白色,背景為黑色)。
-
自動閾值: 在
Image > Adjust > Threshold...
視窗中,ImageJ提供了多種內建的自動閾值算法。點擊「Auto」按鈕可以自動選擇閾值。常見的自動算法包括:- Otsu (最大類間變異法)
- Triangle (基於直方圖形狀)
- IsoData (迭代法)
- Minimum (尋找直方圖谷值)
- MaxEntropy
- Li
- Mean
-
多重閾值: ImageJ的
Image > Adjust > Threshold...
預設是單一閾值。但可以通過腳本或一些插件實現多重閾值分割,將影像分割成多個灰度層次。 - 自適應閾值:
Image > Adjust > Auto Threshold
插件(通常需要從Plugins > Install Plugin...
安裝)或一些特定的插件提供了自適應閾值選項,如根據局部區域的平均值或中位數計算閾值。
- 手動閾值: 使用
邊緣基礎分割 (Edge-Based Segmentation)
這類方法通過尋找影像中像素灰度值變化劇烈的地方來識別邊界,然後將邊界連接起來形成區域輪廓。
- 原理: 利用微分算子(如梯度)來檢測影像的邊緣。
- ImageJ中的邊緣檢測:
- 梯度: ImageJ提供了多種濾波器來檢測邊緣。
Process > Find Edges
實現的是基於Sobel算子的邊緣檢測。- 其他算子如 Prewitt, Roberts 也可通過自定義濾波器或插件實現。
- 拉普拉斯: 拉普拉斯算子檢測的是灰度變化的二階導數。
Process > Filters > Laplacian
可以應用拉普拉斯濾波器,常用於邊緣增強。- LoG (Laplacian of Gaussian) 是一種結合高斯平滑的邊緣檢測方法,用於減少雜訊對邊緣檢測的影響,可通過插件實現。
- 梯度: ImageJ提供了多種濾波器來檢測邊緣。
- 邊緣追蹤與連接: 檢測到的邊緣可能不連續,需要後續的邊緣追蹤和連接步驟來形成完整的邊界,這通常涉及更複雜的算法或手動編輯。
區域基礎分割 (Region-Based Segmentation)
這類方法根據像素之間的相似性將它們合併到同一個區域。
-
區域生長 (Region Growing):
- 原理: 從一個或多個「種子點」開始,逐步將周圍滿足特定相似性準則(如灰度值在一定範圍內、紋理相似)的像素加入到當前區域中,直到沒有符合條件的相鄰像素為止。
-
ImageJ中的區域生長:
- ImageJ核心功能不直接包含區域生長工具,但許多插件提供了此功能。
-
例如,可以使用
Plugins > Segmentation > Region Growing
(如果已安裝) 或其他相關插件。 -
實作步驟通常包括:
- 選擇一個或多個像素作為種子點(可以使用Point Tool手動標記)。
- 設定生長條件(如灰度值範圍、相似度閾值)。
- 運行插件進行生長。
-
分水嶺算法 (Watershed Algorithm):
- 原理: 將灰度影像想像成地形,灰度值代表海拔高度。分水嶺算法模擬降雨後水流匯集到「集水盆」的過程,集水盆之間的邊界即為分割結果(分水嶺線)。通常應用於影像的梯度圖或距離變換圖。
- 應用: 常見於分離相互接觸或重疊的物體,如細胞或顆粒。
- 過分割處理: 分水嶺算法容易產生過分割(將單一物體分割成多個區域),需要結合標記點或其他預處理/後處理步驟來控制分割結果。
-
ImageJ中的分水嶺算法:
ImageJ的
Process > Binary > Watershed
功能應用於二值化影像,通常用於分離二值化後接觸的物體。 更進階的分水嶺實現(如基於標記的分水嶺)通常需要安裝插件,例如 Fiji 中的Process > Segmentation > Morphological Segmentation
或其他提供此功能的插件。 實作流程可能涉及: 1. 對原始影像進行預處理(如降噪、增強對比)。 2. 計算影像的梯度圖或進行距離變換。 3. 確定標記點(每個集水盆內的一個點,代表一個物件)。這可以通過尋找局部最小值或利用形態學操作實現。 4. 應用分水嶺算法。 5. 進行後處理(如去除小區域)。
機器學習與深度學習方法
這類方法通過從大量標記好的影像數據中學習特徵和模式,自動執行分割任務。
- 監督式學習: 需要人工標記訓練數據。常見算法包括支持向量機(SVM)、隨機森林等。
- 深度學習: 使用卷積神經網路(CNN)等複雜模型,能夠自動學習更抽象、更魯棒的特徵。
ImageJ中的機器學習/深度學習分割
- Trainable Weka Segmentation:
Plugins > Segmentation > Trainable Weka Segmentation
基於機器學習庫Weka,允許使用者選擇一系列像素特徵(如灰度、邊緣、紋理)並手動標記不同類別的區域(如細胞核、細胞質、背景)作為訓練數據。 然後,它會訓練一個分類器(如隨機森林),並用訓練好的模型對整個影像進行像素分類,從而實現分割。 實作步驟:
1. 打開影像並啟動Trainable Weka Segmentation插件。
2. 選擇用於訓練的影像特徵。
3. 創建不同的類別(Class)。
4. 使用畫筆工具在影像上標記屬於各個類別的區域作為訓練樣本。
5. 選擇一個分類器。
6. 點擊「Train classifier」進行模型訓練。
7. 點擊「Create result (Plugin)」應用模型到當前影像或批量應用到多個影像。
- 深度學習整合 (Deep Learning Integration):
- StarDist: 是一個專門用於密集細胞核或星形物體實例分割的深度學習模型,在Fiji中作為插件提供 (
Plugins > Segmentation > StarDist
)。它能夠區分相互接觸的個體物件。 - U-Net: 是一種經典的用於生物醫學影像分割的深度學習架構,在Fiji中可以通過如 deepImageJ (
Plugins > deepImageJ
) 或其他插件/腳本來運行預訓練好的U-Net模型或進行推理。 - DeepLab: 另一種常用的深度學習分割模型,也可通過插件或腳本在ImageJ中使用。
- StarDist: 是一個專門用於密集細胞核或星形物體實例分割的深度學習模型,在Fiji中作為插件提供 (
分割後處理 (Segmentation Post-processing)
分割結果可能包含雜訊(小孔洞、孤立的小區域)、邊界不平滑或物體連接不緊密等問題,需要進行後處理來優化結果。
-
形態學操作 (Morphological Operations):
Process > Binary
提供了多種形態學操作,如Dilate
,Erode
,Open
,Close
,Outline
,Skeletonize
,Fill Holes
等。這些操作通常應用於二值化影像。- 膨脹 (Dilation): 使物體邊界向外擴張,用於連接斷開的物體、填充小孔洞。
- 侵蝕 (Erosion): 使物體邊界向內收縮,用於去除小物體、分離連接較弱的物體。
- 開運算 (Opening): 先侵蝕後膨脹,用於去除孤立的小點和消除物體邊緣的毛刺。
- 閉運算 (Closing): 先膨脹後侵蝕,用於填充物體內的小孔洞和連接鄰近的物體。
- ImageJ中的形態學操作:
-
物件過濾與分析 (Object Filtering & Analysis):
- 物件標記 (Object Labeling): 將二值化影像中的每個連通區域標記為一個獨立的物件。
- 過濾: 根據物件的屬性(如面積、周長、圓度、強度等)去除不符合條件的物件(如過小或過大的區域)。
- 分析: 測量每個物件的各種屬性。
-
ImageJ中的物件分析:
通常在二值化或分割後生成標記影像後進行。
Analyze > Analyze Particles...
是ImageJ中用於物件分析的核心功能。 - 它首先會尋找二值化影像中的連通區域。 - 使用者可以設定「Size」和「Circularity」等過濾條件來排除不需要的物件。 - 勾選「Display results」會在Results視窗中顯示每個物件的測量結果(如面積、周長、質心等)。 - 勾選「Show: Outlines」會在原始影像上繪製物件輪廓;「Show: Masks」會創建每個物件的二值化遮罩;「Show: Count Masks」會創建標記影像。 -Analyze > Measure
用於測量當前選區或整個影像的屬性。 -Analyze > Set Measurements...
用於選擇要在Analyze Particles
或Measure
中進行的測量項目。
實作範例與練習 (Examples & Practice)
範例:細胞核分割 (以閾值分割與後處理為例)
- 影像準備: 載入細胞核染色的螢光影像(如DAPI染色影像)。可能需要進行背景校正或對比度增強。
-
分割步驟:
應用自動閾值分割,例如
Image > Adjust > Threshold...
並選擇Otsu
算法,然後點擊Apply
進行二值化。- 後處理:
使用形態學操作
Process > Binary > Open
去除小雜訊點。 使用Process > Binary > Fill Holes
填充細胞核內部可能存在的孔洞。 如果細胞核有接觸,可能需要考慮使用Process > Binary > Watershed
進行分離(在Open操作之後進行)。
- 後處理:
使用形態學操作
-
物件標記與分析:
使用
Analyze > Analyze Particles...
功能,設定合適的尺寸過濾條件(去除過小或過大的物件),並選擇需要測量的參數(如面積、數量)。這將標記出每個細胞核並提供定量數據。
常見問題解決 (Common Problem Solving)
- Q: 分割結果不完整或有遺漏? A: 檢查原始影像的質量,可能需要先進行預處理(如降噪、增強對比度)。調整分割方法的參數(如閾值範圍、邊緣檢測靈敏度、區域生長準則)。考慮使用多種分割方法結合(如先閾值分割,再用區域生長修補)。對於機器學習方法,可能需要更多的訓練數據或調整特徵選擇。
- Q: 分割結果過分割(一個物件被分成多個區域)或欠分割(多個物件被合為一個區域)? A: 過分割在分水嶺算法中常見,可以通過對梯度圖進行平滑、調整標記點或使用形態學後處理(如閉運算再分水嶺)來緩解。欠分割可能由閾值設置過低或相似度準則過於寬鬆導致,需要調整參數。形態學操作(如開運算分離粘連物體,閉運算填充孔洞)是重要的後處理步驟。