影像分割
分水嶺分割
分水嶺分割借用了一個生動的地理比喻。把影像想成一片地景,其中亮度(或更常見的是梯度大小——亮度變化有多快)就是高度:平坦、均勻的區域是谷地,銳利的邊緣是山脊。現在想像下起雨來,或水從每個谷底升起。每一池水不斷擴大,直到即將與鄰池合併;就在這些相遇的線上築起堤壩。當淹水結束,堤壩便是分割邊界,而每個集水盆地就是一個區域。
精確地說,經典的 Vincent-Soille 演算法依高度將像素排序,逐層淹沒表面,把每個像素指派給某個局部最小值的盆地,並在兩盆地原本會相接之處標出分水嶺線。天真地執行會把每個微小的局部最小值都當成種子,使一張有雜訊的影像災難性地過度分割成數千個碎片。標準的補救是標記控制的分水嶺(marker-controlled watershed):由你(或一個前處理步驟)提供一小組標記——每個真實物體內放一個、背景放幾個——只從這些標記淹起,如此區域數量便受到控制。
分水嶺擅長分開「彼此相接、但各有清楚亮度中心」的物體,這正是它成為計數細胞、穀粒或硬幣常備工具的原因。典型的現代流程是在二值前景遮罩內計算距離轉換(distance transform,峰值落在物體中心),以那些峰值作為標記,再執行分水嶺把成團物體切開。它也常作為最後一步,用來切開 CNN 合併在一起的實例。
在原始的有雜訊影像上天真地執行分水嶺,你會得到破碎的一團亂——過度分割不是 bug,而是無約束淹水的必然結果。標記(或先平滑表面)是必要的,而非可選的。