分水嶺分割

2022-07-21 00:15:19 字數 1560 閱讀 7298

分水嶺分割利用影象形態學進行影象區域分割。它將影象灰度值看作一幅地形圖,在地形圖的區域性極小值處與地形最低點是連通的,從最低點開始注水,水流會逐漸淹沒地形較低點構成的區域,直到整個影象被淹沒。在這個過程中,通過相關形態學處理,可以實現一幅影象的分水嶺分割。

以下gif影象給出了形象說明:

影象來自

分水嶺分割具體演算法思想如下:

1 設為地形圖上完成分割後的 r 個蓄水池,

為完成分割後蓄水池

內的像數集合,

為地形圖上灰度值小於 n 的像數集合;

2 當水面**到 n 時,當前蓄水池

被淹沒的像數集合可表示為:

,當前所有蓄水池被淹沒的像數集合表示為:

;3 假設第 n 步時,

已知, 令 q 表示

集合構成的連通區域,通過考察 q 上各個連通區域 q 與

連通區域關係,分別進行如下處理:

1)為空時,發現乙個新的蓄水池 q,將 q 加入

;2)不為空,但僅包含

的乙個連通分量,將 q 合併到

中構成,蓄水池面積擴大,但數量保持不變;

3)不為空,但包含

的兩個及兩個以上連通分量,此時需要構造堤壩防止

中蓄水池融合;

4 重複步驟3,直到 n = nmax + 1 時,

表示整個影象像數,分割完成,

各個連通區域即為分割的蓄水池區域,留下的堤壩則為分割邊界。

以上為分水嶺分割基本思想,影象的每個極小值點構成乙個蓄水池的中心點。由於影象中存在較多極小值點,故一般影象分水嶺分割可能得到很多小的區域。可以通過手動設定蓄水池位置來避免過多極小值影響,演算法僅認為設定點為蓄水池中心點,從而忽略掉任意其他極小值點。

同時,可以首先對影象進行一階微分處理,在影象平滑區域影象梯度值較小,在影象邊緣區域梯度值較大。然後使用梯度影象作為地形圖,可以分割出平滑影象塊。

在 opencv 中,函式 cv::watershed() 實現了分水嶺分割,該函式將影象邊緣轉換為地形圖上的山脊,影象平滑區域轉換為地形圖上的山谷,同時使用 markers 引數標記蓄水池,實現分水嶺分割,具體如下:

void cv::watershed(cv::inputarray image, cv::inputoutputarray markers);

image: 8位3通道影象,函式對影象進行一階微分處理,視梯度圖為地形圖上的山脊與山谷;

markers: 32位有符號整數影象,使用 1,2,3... 等序號標記不同的蓄水池。當完成分割後,該影象形成最終蓄水池區域標記影象,其中,值 -1 表示區域邊界。

以下給出 cv::watershed() 分析截圖:

引數資料 醫學影象處理與分析 羅述謙 周果巨集

分水嶺分割

基於拓撲理論的數學形態學的分割演算法,基本思想是把影象看作是地形地貌,影象中每一點的灰度值表示該點的海拔高度,每乙個區域性極小值及其影響區域成為集水盆,集水盆的邊界則形成分水嶺。在每乙個區域性極小值表面,刺穿乙個小孔,然後慢慢把整個模型浸入水中,隨著浸入的加深,每乙個區域性極小值的影響區域慢慢向外擴...

分水嶺分割演算法

如果影象中的目標物體是連在一起的,則分割起來會更困難,分水嶺演算法經常用於處理這類問題,通常會取得比較好的效果。分水嶺分割演算法把影象看成一副 地形圖 其中亮度比較強的地區畫素值較大,而比較暗的地區畫素比較小,通過尋找 匯水盆地 和 分水嶺界限 對影象進行分割。步驟 1.讀取影象 2.求取影象的邊界...

分水嶺分割演算法

建立不同目標間的分水嶺 漲水法 分水嶺計算步驟 1 設待分割圖象為f x,y 其梯度圖象為g x,y 2 用m1,m2,mr表示g x,y 中各區域性極小值的象素,位置,c mi 為與mi對應的區域中的象素座標集合 3 用n表示當前灰度閾值,t n 代表記為 u,v 的象素集合,g u,v 4 對m...